|  |  | @ -92,10 +92,10 @@ class MiPayload { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                         iv->setQueuedCmdFinished();  // command failed
 | 
			
		
	
		
			
				
					|  |  |  |                         if (mSerialDebug) | 
			
		
	
		
			
				
					|  |  |  |                             miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                             DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                             DBGPRINTLN(F("enqueued cmd failed/timeout")); | 
			
		
	
		
			
				
					|  |  |  |                         if (mSerialDebug) { | 
			
		
	
		
			
				
					|  |  |  |                             miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                             DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                             DBGPRINT(F("no Payload received! (retransmits: ")); | 
			
		
	
		
			
				
					|  |  |  |                             DBGPRINT(String(mPayload[iv->id].retransmits)); | 
			
		
	
		
			
				
					|  |  |  |                             DBGPRINTLN(F(")")); | 
			
		
	
	
		
			
				
					|  |  | @ -109,14 +109,14 @@ class MiPayload { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             yield(); | 
			
		
	
		
			
				
					|  |  |  |             if (mSerialDebug){ | 
			
		
	
		
			
				
					|  |  |  |                 miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                 DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                 DBGPRINT(F("Requesting Inv SN ")); | 
			
		
	
		
			
				
					|  |  |  |                 DBGPRINTLN(String(iv->config->serial.u64, HEX)); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             if (iv->getDevControlRequest()) { | 
			
		
	
		
			
				
					|  |  |  |                 if (mSerialDebug) { | 
			
		
	
		
			
				
					|  |  |  |                     miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DBGPRINT(F("Devcontrol request 0x")); | 
			
		
	
		
			
				
					|  |  |  |                     DBGPRINT(String(iv->devControlCmd, HEX)); | 
			
		
	
		
			
				
					|  |  |  |                     DBGPRINT(F(" power limit ")); | 
			
		
	
	
		
			
				
					|  |  | @ -128,7 +128,7 @@ class MiPayload { | 
			
		
	
		
			
				
					|  |  |  |                 //iv->enqueCommand<InfoCommand>(SystemConfigPara); // read back power limit
 | 
			
		
	
		
			
				
					|  |  |  |             } else { | 
			
		
	
		
			
				
					|  |  |  |                 uint8_t cmd = iv->getQueuedCmd(); | 
			
		
	
		
			
				
					|  |  |  |                 miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                 DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                 DBGPRINT(F("prepareDevInformCmd 0x")); | 
			
		
	
		
			
				
					|  |  |  |                 DBGPRINTLN(String(cmd, HEX)); | 
			
		
	
		
			
				
					|  |  |  |                 uint8_t cmd2 = cmd; | 
			
		
	
	
		
			
				
					|  |  | @ -222,11 +222,11 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |                     mStat->rxSuccess++; | 
			
		
	
		
			
				
					|  |  |  |                     mSys->Radio.sendCmdPacket(iv->radioId.u64, 0x0f, 0x01, false);*/ | 
			
		
	
		
			
				
					|  |  |  |                 } else if ( p->packet[9] == 0x01 ) {//second frame
 | 
			
		
	
		
			
				
					|  |  |  |                     miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DBGPRINTLN(F("got 2nd frame (hw info)")); | 
			
		
	
		
			
				
					|  |  |  |                     //mSys->Radio.sendCmdPacket(iv->radioId.u64, 0x0f, 0x12, false);
 | 
			
		
	
		
			
				
					|  |  |  |                 } else if ( p->packet[9] == 0x12 ) {//3rd frame
 | 
			
		
	
		
			
				
					|  |  |  |                     miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DBGPRINTLN(F("got 3rd frame (hw info)")); | 
			
		
	
		
			
				
					|  |  |  |                     iv->setQueuedCmdFinished(); | 
			
		
	
		
			
				
					|  |  |  |                     mStat->rxSuccess++; | 
			
		
	
	
		
			
				
					|  |  | @ -261,7 +261,7 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } */ | 
			
		
	
		
			
				
					|  |  |  |             } else if (p->packet[0] == (TX_REQ_DEVCONTROL + ALL_FRAMES)) { // response from dev control command
 | 
			
		
	
		
			
				
					|  |  |  |                 miDPRINTHead(DBG_DEBUG, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                 DPRINTHEAD(DBG_DEBUG, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                 DBGPRINTLN(F("Response from devcontrol request received")); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                 mPayload[iv->id].txId = p->packet[0]; | 
			
		
	
	
		
			
				
					|  |  | @ -274,7 +274,7 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |                     else | 
			
		
	
		
			
				
					|  |  |  |                         msg = "NOT "; | 
			
		
	
		
			
				
					|  |  |  |                     //DPRINTLN(DBG_INFO, F("Inverter ") + String(iv->id) + F(" has ") + msg + F("accepted power limit set point ") + String(iv->powerLimit[0]) + F(" with PowerLimitControl ") + String(iv->powerLimit[1]));
 | 
			
		
	
		
			
				
					|  |  |  |                     miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DBGPRINTLN(F("has ") + msg + F("accepted power limit set point ") + String(iv->powerLimit[0]) + F(" with PowerLimitControl ") + String(iv->powerLimit[1])); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                     iv->clearCmdQueue(); | 
			
		
	
	
		
			
				
					|  |  | @ -379,11 +379,11 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |                         if ((mPayload[iv->id].requested) && (retransmit)) { | 
			
		
	
		
			
				
					|  |  |  |                             if (iv->devControlCmd == Restart || iv->devControlCmd == CleanState_LockAndAlarm) { | 
			
		
	
		
			
				
					|  |  |  |                                 // This is required to prevent retransmissions without answer.
 | 
			
		
	
		
			
				
					|  |  |  |                                 miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                                 DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                                 DBGPRINTLN(F("Prevent retransmit on Restart / CleanState_LockAndAlarm...")); | 
			
		
	
		
			
				
					|  |  |  |                                 mPayload[iv->id].retransmits = mMaxRetrans; | 
			
		
	
		
			
				
					|  |  |  |                             } else if(iv->devControlCmd == ActivePowerContr) { | 
			
		
	
		
			
				
					|  |  |  |                                 miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                                 DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                                 DBGPRINTLN(F("retransmit power limit")); | 
			
		
	
		
			
				
					|  |  |  |                                 mSys->Radio.sendControlPacket(iv->radioId.u64, iv->devControlCmd, iv->powerLimit, true); | 
			
		
	
		
			
				
					|  |  |  |                             } else { | 
			
		
	
	
		
			
				
					|  |  | @ -391,7 +391,7 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |                                 if (mPayload[iv->id].retransmits < mMaxRetrans) { | 
			
		
	
		
			
				
					|  |  |  |                                     mPayload[iv->id].retransmits++; | 
			
		
	
		
			
				
					|  |  |  |                                     if( !mPayload[iv->id].gotFragment ) { | 
			
		
	
		
			
				
					|  |  |  |                                         miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                                         DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                                         DBGPRINTLN(F("nothing received")); | 
			
		
	
		
			
				
					|  |  |  |                                         mPayload[iv->id].retransmits = mMaxRetrans; | 
			
		
	
		
			
				
					|  |  |  |                                     } else if ( cmd == 0x0f ) { | 
			
		
	
	
		
			
				
					|  |  | @ -422,7 +422,7 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |                                                 } | 
			
		
	
		
			
				
					|  |  |  |                                             } | 
			
		
	
		
			
				
					|  |  |  |                                         } | 
			
		
	
		
			
				
					|  |  |  |                                         miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                                         DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                                         if (change) { | 
			
		
	
		
			
				
					|  |  |  |                                             DBGPRINT(F("next request is 0x")); | 
			
		
	
		
			
				
					|  |  |  |                                         } else { | 
			
		
	
	
		
			
				
					|  |  | @ -440,10 +440,10 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |                     } else if(!crcPass && pyldComplete) { // crc error on complete Payload
 | 
			
		
	
		
			
				
					|  |  |  |                         if (mPayload[iv->id].retransmits < mMaxRetrans) { | 
			
		
	
		
			
				
					|  |  |  |                             mPayload[iv->id].retransmits++; | 
			
		
	
		
			
				
					|  |  |  |                             miDPRINTHead(DBG_WARN, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                             DPRINTHEAD(DBG_WARN, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                             DBGPRINTLN(F("CRC Error: Request Complete Retransmit")); | 
			
		
	
		
			
				
					|  |  |  |                             mPayload[iv->id].txCmd = iv->getQueuedCmd(); | 
			
		
	
		
			
				
					|  |  |  |                             miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                             DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                             DBGPRINTLN(F("prepareDevInformCmd 0x") + String(mPayload[iv->id].txCmd, HEX)); | 
			
		
	
		
			
				
					|  |  |  |                             mSys->Radio.prepareDevInformCmd(iv->radioId.u64, mPayload[iv->id].txCmd, mPayload[iv->id].ts, iv->alarmMesIndex, true); | 
			
		
	
	
		
			
				
					|  |  | @ -542,7 +542,7 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |             if (iv->alarmMesIndex < rec->record[iv->getPosByChFld(0, FLD_EVT, rec)]){ | 
			
		
	
		
			
				
					|  |  |  |                 iv->alarmMesIndex = rec->record[iv->getPosByChFld(0, FLD_EVT, rec)]; // seems there's no status per channel in 3rd gen. models?!?
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                 miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                 DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                 DBGPRINTLN(F("alarm ID incremented to ") + String(iv->alarmMesIndex)); | 
			
		
	
		
			
				
					|  |  |  |                 iv->enqueCommand<InfoCommand>(AlarmData); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
	
		
			
				
					|  |  | @ -619,7 +619,7 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |                 if (iv->alarmMesIndex < rec->record[iv->getPosByChFld(0, FLD_EVT, rec)]){ | 
			
		
	
		
			
				
					|  |  |  |                     iv->alarmMesIndex = rec->record[iv->getPosByChFld(0, FLD_EVT, rec)]; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                     miDPRINTHead(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DPRINTHEAD(DBG_INFO, iv->id); | 
			
		
	
		
			
				
					|  |  |  |                     DBGPRINTLN(F("alarm ID incremented to ") + String(iv->alarmMesIndex)); | 
			
		
	
		
			
				
					|  |  |  |                     //iv->enqueCommand<InfoCommand>(AlarmData);
 | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
	
		
			
				
					|  |  | @ -706,15 +706,15 @@ const byteAssign_t InfoAssignment[] = { | 
			
		
	
		
			
				
					|  |  |  |             return true; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         void miDPRINTHead(uint8_t lvl, uint8_t id) { | 
			
		
	
		
			
				
					|  |  |  | /*        void miDPRINTHead(uint8_t lvl, uint8_t id) {
 | 
			
		
	
		
			
				
					|  |  |  |             DPRINT(lvl, F("(#")); | 
			
		
	
		
			
				
					|  |  |  |             DBGPRINT(String(id)); | 
			
		
	
		
			
				
					|  |  |  |             DBGPRINT(F(") ")); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |         }*/ | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         void reset(uint8_t id) { | 
			
		
	
		
			
				
					|  |  |  |             //DPRINTLN(DBG_INFO, F("resetPayload: id: ") + String(id));
 | 
			
		
	
		
			
				
					|  |  |  |             miDPRINTHead(DBG_INFO, id); | 
			
		
	
		
			
				
					|  |  |  |             DPRINTHEAD(DBG_INFO, id); | 
			
		
	
		
			
				
					|  |  |  |             DBGPRINTLN(F("resetPayload")); | 
			
		
	
		
			
				
					|  |  |  |             memset(mPayload[id].len, 0, MAX_PAYLOAD_ENTRIES); | 
			
		
	
		
			
				
					|  |  |  |             mPayload[id].gotFragment = false; | 
			
		
	
	
		
			
				
					|  |  | 
 |