|
|
@ -152,7 +152,6 @@ class MiPayload { |
|
|
|
cmd2 = cmd == SystemConfigPara ? 0x01 : 0x00; //perhaps we can only try to get second frame?
|
|
|
|
mRadio->sendCmdPacket(iv->radioId.u64, cmd, cmd2, false, false); |
|
|
|
} else { |
|
|
|
//mSys->Radio.prepareDevInformCmd(iv->radioId.u64, cmd2, mPayload[iv->id].ts, iv->alarmMesIndex, false, cmd);
|
|
|
|
mRadio->sendCmdPacket(iv->radioId.u64, cmd, cmd2, false, false); |
|
|
|
}; |
|
|
|
|
|
|
@ -480,7 +479,6 @@ const byteAssign_t InfoAssignment[] = { |
|
|
|
DBGPRINT(F(" 0x")); |
|
|
|
DBGHEXLN(cmd); |
|
|
|
mRadio->sendCmdPacket(iv->radioId.u64, cmd, cmd, true, false); |
|
|
|
//mSys->Radio.prepareDevInformCmd(iv->radioId.u64, cmd, mPayload[iv->id].ts, iv->alarmMesIndex, true, cmd);
|
|
|
|
yield(); |
|
|
|
} |
|
|
|
} |
|
|
@ -496,60 +494,10 @@ const byteAssign_t InfoAssignment[] = { |
|
|
|
|
|
|
|
DBGPRINT(F("prepareDevInformCmd 0x")); |
|
|
|
DBGHEXLN(mPayload[iv->id].txCmd); |
|
|
|
//mSys->Radio.prepareDevInformCmd(iv->radioId.u64, mPayload[iv->id].txCmd, mPayload[iv->id].ts, iv->alarmMesIndex, true);
|
|
|
|
mRadio->sendCmdPacket(iv->radioId.u64, mPayload[iv->id].txCmd, mPayload[iv->id].txCmd, false, false); |
|
|
|
} |
|
|
|
} |
|
|
|
/*else { // payload complete
|
|
|
|
//This tree is not really tested, most likely it's not truly complete....
|
|
|
|
DPRINTLN(DBG_INFO, F("procPyld: cmd: 0x") + String(mPayload[iv->id].txCmd, HEX)); |
|
|
|
DPRINTLN(DBG_INFO, F("procPyld: txid: 0x") + String(mPayload[iv->id].txId, HEX)); |
|
|
|
//DPRINTLN(DBG_DEBUG, F("procPyld: max: ") + String(mPayload[iv->id].maxPackId));
|
|
|
|
//record_t<> *rec = iv->getRecordStruct(mPayload[iv->id].txCmd); // choose the parser
|
|
|
|
//uint8_t payload[128];
|
|
|
|
//uint8_t payloadLen = 0;
|
|
|
|
//memset(payload, 0, 128);
|
|
|
|
//for (uint8_t i = 0; i < (mPayload[iv->id].maxPackId); i++) {
|
|
|
|
// memcpy(&payload[payloadLen], mPayload[iv->id].data[i], (mPayload[iv->id].len[i]));
|
|
|
|
// payloadLen += (mPayload[iv->id].len[i]);
|
|
|
|
// yield();
|
|
|
|
//}
|
|
|
|
//payloadLen -= 2;
|
|
|
|
//if (mSerialDebug) {
|
|
|
|
// DPRINT(DBG_INFO, F("Payload (") + String(payloadLen) + "): ");
|
|
|
|
// mSys->Radio.dumpBuf(payload, payloadLen);
|
|
|
|
//}
|
|
|
|
//if (NULL == rec) {
|
|
|
|
// DPRINTLN(DBG_ERROR, F("record is NULL!"));
|
|
|
|
//} else if ((rec->pyldLen == payloadLen) || (0 == rec->pyldLen)) {
|
|
|
|
// if (mPayload[iv->id].txId == (TX_REQ_INFO + ALL_FRAMES))
|
|
|
|
// mStat->rxSuccess++;
|
|
|
|
// rec->ts = mPayload[iv->id].ts;
|
|
|
|
// for (uint8_t i = 0; i < rec->length; i++) {
|
|
|
|
// iv->addValue(i, payload, rec);
|
|
|
|
// yield();
|
|
|
|
// }
|
|
|
|
// iv->doCalculations();
|
|
|
|
// notify(mPayload[iv->id].txCmd);
|
|
|
|
// if(AlarmData == mPayload[iv->id].txCmd) {
|
|
|
|
// uint8_t i = 0;
|
|
|
|
// uint16_t code;
|
|
|
|
// uint32_t start, end;
|
|
|
|
// while(1) {
|
|
|
|
// code = iv->parseAlarmLog(i++, payload, payloadLen, &start, &end);
|
|
|
|
// if(0 == code)
|
|
|
|
// break;
|
|
|
|
// if (NULL != mCbAlarm)
|
|
|
|
// (mCbAlarm)(code, start, end);
|
|
|
|
// yield();
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//} else {
|
|
|
|
// DPRINTLN(DBG_ERROR, F("plausibility check failed, expected ") + String(rec->pyldLen) + F(" bytes"));
|
|
|
|
// mStat->rxFail++;
|
|
|
|
//}
|
|
|
|
//iv->setQueuedCmdFinished();
|
|
|
|
//}*/
|
|
|
|
|
|
|
|
} |
|
|
|
yield(); |
|
|
|
} |
|
|
@ -579,27 +527,27 @@ const byteAssign_t InfoAssignment[] = { |
|
|
|
|
|
|
|
void miStsConsolidate(Inverter<> *iv, uint8_t stschan, record_t<> *rec, uint8_t uState, uint8_t uEnum, uint8_t lState = 0, uint8_t lEnum = 0) { |
|
|
|
//uint8_t status = (p->packet[11] << 8) + p->packet[12];
|
|
|
|
uint16_t status = 3; // regular status for MI, change to 1 later?
|
|
|
|
uint16_t statusMi = 3; // regular status for MI, change to 1 later?
|
|
|
|
if ( uState == 2 ) { |
|
|
|
status = 5050 + stschan; //first approach, needs review!
|
|
|
|
statusMi = 5050 + stschan; //first approach, needs review!
|
|
|
|
if (lState) |
|
|
|
status += lState*10; |
|
|
|
statusMi += lState*10; |
|
|
|
} else if ( uState > 3 ) { |
|
|
|
status = uState*1000 + uEnum*10; |
|
|
|
statusMi = uState*1000 + uEnum*10; |
|
|
|
if (lState) |
|
|
|
status += lState*100; //needs review, esp. for 4ch-8310 state!
|
|
|
|
statusMi += lState*100; //needs review, esp. for 4ch-8310 state!
|
|
|
|
//if (lEnum)
|
|
|
|
status += lEnum; |
|
|
|
statusMi += lEnum; |
|
|
|
if (uEnum < 6) { |
|
|
|
status += stschan; |
|
|
|
statusMi += stschan; |
|
|
|
} |
|
|
|
if (status == 8000) |
|
|
|
status = 8310; //trick?
|
|
|
|
if (statusMi == 8000) |
|
|
|
statusMi = 8310; //trick?
|
|
|
|
} |
|
|
|
|
|
|
|
uint16_t prntsts = status == 3 ? 1 : status; |
|
|
|
if ( status != mPayload[iv->id].sts[stschan] ) { //sth.'s changed?
|
|
|
|
mPayload[iv->id].sts[stschan] = status; |
|
|
|
uint16_t prntsts = statusMi == 3 ? 1 : statusMi; |
|
|
|
if ( statusMi != mPayload[iv->id].sts[stschan] ) { //sth.'s changed?
|
|
|
|
mPayload[iv->id].sts[stschan] = statusMi; |
|
|
|
DPRINT(DBG_WARN, F("Status change for CH")); |
|
|
|
DBGPRINT(String(stschan)); DBGPRINT(F(" (")); |
|
|
|
DBGPRINT(String(prntsts)); DBGPRINT(F("): ")); |
|
|
@ -682,26 +630,10 @@ const byteAssign_t InfoAssignment[] = { |
|
|
|
miStsConsolidate(iv, datachan, rec, p->packet[23], p->packet[24]); |
|
|
|
|
|
|
|
if (p->packet[0] < (0x39 + ALL_FRAMES) ) { |
|
|
|
/*uint8_t cmd = p->packet[0] - ALL_FRAMES + 1;
|
|
|
|
mSys->Radio.prepareDevInformCmd(iv->radioId.u64, cmd, mPayload[iv->id].ts, iv->alarmMesIndex, false, cmd); |
|
|
|
mPayload[iv->id].txCmd = cmd;*/ |
|
|
|
mPayload[iv->id].txCmd++; |
|
|
|
mPayload[iv->id].retransmits = 0; // reserve retransmissions for each response
|
|
|
|
mPayload[iv->id].complete = false; |
|
|
|
} |
|
|
|
|
|
|
|
/*else if ( p->packet[0] == (0x39 + ALL_FRAMES) ) {
|
|
|
|
mPayload[iv->id].complete = true; |
|
|
|
}*/ |
|
|
|
|
|
|
|
/*if (iv->alarmMesIndex < rec->record[iv->getPosByChFld(0, FLD_EVT, rec)]){
|
|
|
|
iv->alarmMesIndex = rec->record[iv->getPosByChFld(0, FLD_EVT, rec)]; |
|
|
|
|
|
|
|
DPRINT_IVID(DBG_INFO, iv->id); |
|
|
|
DBGPRINT_TXT(TXT_INCRALM); |
|
|
|
DBGPRINTLN(String(iv->alarmMesIndex)); |
|
|
|
}*/ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
@ -714,9 +646,8 @@ const byteAssign_t InfoAssignment[] = { |
|
|
|
if(0 == code) |
|
|
|
break; |
|
|
|
if (NULL != mCbAlarm) |
|
|
|
(mCbAlarm)(code, start, end); |
|
|
|
yield(); |
|
|
|
} |
|
|
|
(mCbAl { FLD_YT, UNIT_KWH, CH0, CALC_YT_CH0, 0, CMD_CALC }, |
|
|
|
|
|
|
|
}*/ |
|
|
|
|
|
|
|
//if ( mPayload[iv->id].complete || //4ch device
|
|
|
@ -729,7 +660,7 @@ const byteAssign_t InfoAssignment[] = { |
|
|
|
} |
|
|
|
|
|
|
|
void miComplete(Inverter<> *iv) { |
|
|
|
if ( mPayload[iv->id].complete ) // && iv->type != INV_TYPE_4CH)
|
|
|
|
if ( mPayload[iv->id].complete ) |
|
|
|
return; //if we got second message as well in repreated attempt
|
|
|
|
mPayload[iv->id].complete = true; |
|
|
|
DPRINT_IVID(DBG_INFO, iv->id); |
|
|
@ -749,10 +680,13 @@ const byteAssign_t InfoAssignment[] = { |
|
|
|
iv->setValue(iv->getPosByChFld(0, FLD_PAC, rec), rec, (float) ac_pow/10); |
|
|
|
|
|
|
|
iv->doCalculations(); |
|
|
|
// update status state-machine,
|
|
|
|
iv->isProducing(); |
|
|
|
|
|
|
|
iv->setQueuedCmdFinished(); |
|
|
|
mStat->rxSuccess++; |
|
|
|
yield(); |
|
|
|
notify(RealTimeRunData_Debug, iv); //iv->type == INV_TYPE_4CH ? 0x36 : 0x09 );
|
|
|
|
notify(RealTimeRunData_Debug, iv); |
|
|
|
} |
|
|
|
|
|
|
|
bool build(uint8_t id, bool *complete) { |
|
|
|