@ -92,11 +92,11 @@ class MiPayload {
iv - > setQueuedCmdFinished ( ) ; // command failed
iv - > setQueuedCmdFinished ( ) ; // command failed
if ( mSerialDebug )
if ( mSerialDebug )
DPRINTLN ( DBG_INFO , F ( " enqueued cmd failed/timeout " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINTLN ( F ( " enqueued cmd failed/timeout " ) ) ;
if ( mSerialDebug ) {
if ( mSerialDebug ) {
DPRINT ( DBG_INFO , F ( " (# " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINT ( String ( iv - > id ) ) ;
DBGPRINT ( F ( " no Payload received! (retransmits: " ) ) ;
DBGPRINT ( F ( " ) no Payload received! (retransmits: " ) ) ;
DBGPRINT ( String ( mPayload [ iv - > id ] . retransmits ) ) ;
DBGPRINT ( String ( mPayload [ iv - > id ] . retransmits ) ) ;
DBGPRINTLN ( F ( " ) " ) ) ;
DBGPRINTLN ( F ( " ) " ) ) ;
}
}
@ -109,17 +109,15 @@ class MiPayload {
yield ( ) ;
yield ( ) ;
if ( mSerialDebug ) {
if ( mSerialDebug ) {
DPRINT ( DBG_INFO , F ( " (# " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINT ( String ( iv - > id ) ) ;
DBGPRINT ( F ( " Requesting Inv SN " ) ) ;
DBGPRINT ( F ( " ) Requesting Inv SN " ) ) ;
DBGPRINTLN ( String ( iv - > config - > serial . u64 , HEX ) ) ;
DBGPRINTLN ( String ( iv - > config - > serial . u64 , HEX ) ) ;
}
}
if ( iv - > getDevControlRequest ( ) ) {
if ( iv - > getDevControlRequest ( ) ) {
if ( mSerialDebug ) {
if ( mSerialDebug ) {
DPRINT ( DBG_INFO , F ( " (# " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINT ( String ( iv - > id ) ) ;
DBGPRINT ( F ( " Devcontrol request 0x " ) ) ;
DBGPRINT ( F ( " ) Devcontrol request 0x " ) ) ;
DBGPRINT ( String ( iv - > devControlCmd , HEX ) ) ;
DBGPRINT ( String ( iv - > devControlCmd , HEX ) ) ;
DBGPRINT ( F ( " power limit " ) ) ;
DBGPRINT ( F ( " power limit " ) ) ;
DBGPRINTLN ( String ( iv - > powerLimit [ 0 ] ) ) ;
DBGPRINTLN ( String ( iv - > powerLimit [ 0 ] ) ) ;
@ -130,9 +128,8 @@ class MiPayload {
//iv->enqueCommand<InfoCommand>(SystemConfigPara); // read back power limit
//iv->enqueCommand<InfoCommand>(SystemConfigPara); // read back power limit
} else {
} else {
uint8_t cmd = iv - > getQueuedCmd ( ) ;
uint8_t cmd = iv - > getQueuedCmd ( ) ;
DPRINT ( DBG_INFO , F ( " (# " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINT ( String ( iv - > id ) ) ;
DBGPRINT ( F ( " prepareDevInformCmd 0x " ) ) ;
DBGPRINT ( F ( " ) prepareDevInformCmd 0x " ) ) ;
DBGPRINTLN ( String ( cmd , HEX ) ) ;
DBGPRINTLN ( String ( cmd , HEX ) ) ;
uint8_t cmd2 = cmd ;
uint8_t cmd2 = cmd ;
if ( cmd = = 0x1 ) { //0x1
if ( cmd = = 0x1 ) { //0x1
@ -225,10 +222,12 @@ const byteAssign_t InfoAssignment[] = {
mStat - > rxSuccess + + ;
mStat - > rxSuccess + + ;
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 , 0x0f , 0x01 , false ) ; */
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 , 0x0f , 0x01 , false ) ; */
} else if ( p - > packet [ 9 ] = = 0x01 ) { //second frame
} else if ( p - > packet [ 9 ] = = 0x01 ) { //second frame
DPRINTLN ( DBG_INFO , F ( " (# " ) + String ( iv - > id ) + F ( " ) got 2nd frame (hw info) " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINTLN ( F ( " got 2nd frame (hw info) " ) ) ;
//mSys->Radio.sendCmdPacket(iv->radioId.u64, 0x0f, 0x12, false);
//mSys->Radio.sendCmdPacket(iv->radioId.u64, 0x0f, 0x12, false);
} else if ( p - > packet [ 9 ] = = 0x12 ) { //3rd frame
} else if ( p - > packet [ 9 ] = = 0x12 ) { //3rd frame
DPRINTLN ( DBG_INFO , F ( " (# " ) + String ( iv - > id ) + F ( " ) got 3rd frame (hw info) " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINTLN ( F ( " got 3rd frame (hw info) " ) ) ;
iv - > setQueuedCmdFinished ( ) ;
iv - > setQueuedCmdFinished ( ) ;
mStat - > rxSuccess + + ;
mStat - > rxSuccess + + ;
}
}
@ -262,7 +261,8 @@ const byteAssign_t InfoAssignment[] = {
}
}
} */
} */
} else if ( p - > packet [ 0 ] = = ( TX_REQ_DEVCONTROL + ALL_FRAMES ) ) { // response from dev control command
} else if ( p - > packet [ 0 ] = = ( TX_REQ_DEVCONTROL + ALL_FRAMES ) ) { // response from dev control command
DPRINTLN ( DBG_DEBUG , F ( " Response from devcontrol request received " ) ) ;
miDPRINTHead ( DBG_DEBUG , iv - > id ) ;
DBGPRINTLN ( F ( " Response from devcontrol request received " ) ) ;
mPayload [ iv - > id ] . txId = p - > packet [ 0 ] ;
mPayload [ iv - > id ] . txId = p - > packet [ 0 ] ;
iv - > clearDevControlRequest ( ) ;
iv - > clearDevControlRequest ( ) ;
@ -273,7 +273,10 @@ const byteAssign_t InfoAssignment[] = {
mApp - > setMqttPowerLimitAck ( iv ) ;
mApp - > setMqttPowerLimitAck ( iv ) ;
else
else
msg = " NOT " ;
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 ] ) ) ;
//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 ) ;
DBGPRINTLN ( F ( " has " ) + msg + F ( " accepted power limit set point " ) + String ( iv - > powerLimit [ 0 ] ) + F ( " with PowerLimitControl " ) + String ( iv - > powerLimit [ 1 ] ) ) ;
iv - > clearCmdQueue ( ) ;
iv - > clearCmdQueue ( ) ;
iv - > enqueCommand < InfoCommand > ( SystemConfigPara ) ; // read back power limit
iv - > enqueCommand < InfoCommand > ( SystemConfigPara ) ; // read back power limit
}
}
@ -376,21 +379,20 @@ const byteAssign_t InfoAssignment[] = {
if ( ( mPayload [ iv - > id ] . requested ) & & ( retransmit ) ) {
if ( ( mPayload [ iv - > id ] . requested ) & & ( retransmit ) ) {
if ( iv - > devControlCmd = = Restart | | iv - > devControlCmd = = CleanState_LockAndAlarm ) {
if ( iv - > devControlCmd = = Restart | | iv - > devControlCmd = = CleanState_LockAndAlarm ) {
// This is required to prevent retransmissions without answer.
// This is required to prevent retransmissions without answer.
DPRINTLN ( DBG_INFO , F ( " Prevent retransmit on Restart / CleanState_LockAndAlarm... " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINTLN ( F ( " Prevent retransmit on Restart / CleanState_LockAndAlarm... " ) ) ;
mPayload [ iv - > id ] . retransmits = mMaxRetrans ;
mPayload [ iv - > id ] . retransmits = mMaxRetrans ;
} else if ( iv - > devControlCmd = = ActivePowerContr ) {
} else if ( iv - > devControlCmd = = ActivePowerContr ) {
DPRINT ( DBG_INFO , F ( " (# " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINT ( String ( iv - > id ) ) ;
DBGPRINTLN ( F ( " retransmit power limit " ) ) ;
DBGPRINTLN ( F ( " ) retransmit power limit " ) ) ;
mSys - > Radio . sendControlPacket ( iv - > radioId . u64 , iv - > devControlCmd , iv - > powerLimit , true ) ;
mSys - > Radio . sendControlPacket ( iv - > radioId . u64 , iv - > devControlCmd , iv - > powerLimit , true ) ;
} else {
} else {
uint8_t cmd = mPayload [ iv - > id ] . txCmd ;
uint8_t cmd = mPayload [ iv - > id ] . txCmd ;
if ( mPayload [ iv - > id ] . retransmits < mMaxRetrans ) {
if ( mPayload [ iv - > id ] . retransmits < mMaxRetrans ) {
mPayload [ iv - > id ] . retransmits + + ;
mPayload [ iv - > id ] . retransmits + + ;
if ( ! mPayload [ iv - > id ] . gotFragment ) {
if ( ! mPayload [ iv - > id ] . gotFragment ) {
DPRINT ( DBG_INFO , F ( " (# " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINT ( String ( iv - > id ) ) ;
DBGPRINTLN ( F ( " nothing received " ) ) ;
DBGPRINTLN ( F ( " ) nothing received " ) ) ;
mPayload [ iv - > id ] . retransmits = mMaxRetrans ;
mPayload [ iv - > id ] . retransmits = mMaxRetrans ;
} else if ( cmd = = 0x0f ) {
} else if ( cmd = = 0x0f ) {
//hard/firmware request
//hard/firmware request
@ -404,23 +406,23 @@ const byteAssign_t InfoAssignment[] = {
change = true ;
change = true ;
} else if ( cmd = = 0x09 ) { //MI single or dual channel device
} else if ( cmd = = 0x09 ) { //MI single or dual channel device
if ( mPayload [ iv - > id ] . dataAB [ CH1 ] & & iv - > type = = INV_TYPE_2CH ) {
if ( mPayload [ iv - > id ] . dataAB [ CH1 ] & & iv - > type = = INV_TYPE_2CH ) {
if ( ! mPayload [ iv - > id ] . stsAB [ CH2 ] | | ! mPayload [ iv - > id ] . dataAB [ CH2 ] ) {
if ( ! mPayload [ iv - > id ] . stsAB [ CH1 ] & & mPayload [ iv - > id ] . retransmits < 2 ) { }
//first try to get missing sts for first channel a second time
else if ( ! mPayload [ iv - > id ] . stsAB [ CH2 ] | | ! mPayload [ iv - > id ] . dataAB [ CH2 ] ) {
cmd = 0x11 ;
cmd = 0x11 ;
change = true ;
change = true ;
mPayload [ iv - > id ] . retransmits = 0 ; //reset counter
mPayload [ iv - > id ] . retransmits = 0 ; //reset counter
}
}
}
}
} else if ( cmd = = 0x11 ) {
} else if ( cmd = = 0x11 ) {
if ( mPayload [ iv - > id ] . dataAB [ CH2 ] ) { // data is there, but no status
if ( mPayload [ iv - > id ] . dataAB [ CH2 ] ) { // data + status ch2 are there?
if ( ! mPayload [ iv - > id ] . stsAB [ CH1 ] | | ! mPayload [ iv - > id ] . dataAB [ CH1 ] ) {
if ( mPayload [ iv - > id ] . stsAB [ CH2 ] & & ( ! mPayload [ iv - > id ] . stsAB [ CH1 ] | | ! mPayload [ iv - > id ] . dataAB [ CH1 ] ) ) {
cmd = 0x09 ;
cmd = 0x09 ;
change = true ;
change = true ;
}
}
}
}
}
}
DPRINT ( DBG_INFO , F ( " (# " ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINT ( String ( iv - > id ) ) ;
DBGPRINT ( F ( " ) " ) ) ;
if ( change ) {
if ( change ) {
DBGPRINT ( F ( " next request is 0x " ) ) ;
DBGPRINT ( F ( " next request is 0x " ) ) ;
} else {
} else {
@ -438,9 +440,12 @@ const byteAssign_t InfoAssignment[] = {
} else if ( ! crcPass & & pyldComplete ) { // crc error on complete Payload
} else if ( ! crcPass & & pyldComplete ) { // crc error on complete Payload
if ( mPayload [ iv - > id ] . retransmits < mMaxRetrans ) {
if ( mPayload [ iv - > id ] . retransmits < mMaxRetrans ) {
mPayload [ iv - > id ] . retransmits + + ;
mPayload [ iv - > id ] . retransmits + + ;
DPRINTLN ( DBG_WARN , F ( " CRC Error: Request Complete Retransmit " ) ) ;
miDPRINTHead ( DBG_WARN , iv - > id ) ;
DBGPRINTLN ( F ( " CRC Error: Request Complete Retransmit " ) ) ;
mPayload [ iv - > id ] . txCmd = iv - > getQueuedCmd ( ) ;
mPayload [ iv - > id ] . txCmd = iv - > getQueuedCmd ( ) ;
DPRINTLN ( DBG_INFO , F ( " (# " ) + String ( iv - > id ) + F ( " ) prepareDevInformCmd 0x " ) + String ( mPayload [ iv - > id ] . txCmd , HEX ) ) ;
miDPRINTHead ( 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 ) ;
mSys - > Radio . prepareDevInformCmd ( iv - > radioId . u64 , mPayload [ iv - > id ] . txCmd , mPayload [ iv - > id ] . ts , iv - > alarmMesIndex , true ) ;
}
}
}
}
@ -516,7 +521,7 @@ const byteAssign_t InfoAssignment[] = {
}
}
void miStsDecode ( Inverter < > * iv , packet_t * p , uint8_t stschan = CH1 ) {
void miStsDecode ( Inverter < > * iv , packet_t * p , uint8_t stschan = CH1 ) {
DPRINTLN ( DBG_INFO , F ( " (# " ) + String ( iv - > id ) + F ( " ) status msg 0x " ) + String ( p - > packet [ 0 ] , HEX ) ) ;
//DPRINTLN(DBG_INFO, F("(#") + String(iv->id) + F(") status msg 0x") + String(p->packet[0], HEX));
record_t < > * rec = iv - > getRecordStruct ( RealTimeRunData_Debug ) ; // choose the record structure
record_t < > * rec = iv - > getRecordStruct ( RealTimeRunData_Debug ) ; // choose the record structure
rec - > ts = mPayload [ iv - > id ] . ts ;
rec - > ts = mPayload [ iv - > id ] . ts ;
mPayload [ iv - > id ] . gotFragment = true ;
mPayload [ iv - > id ] . gotFragment = true ;
@ -537,7 +542,8 @@ const byteAssign_t InfoAssignment[] = {
if ( iv - > alarmMesIndex < rec - > record [ iv - > getPosByChFld ( 0 , FLD_EVT , rec ) ] ) {
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?!?
iv - > alarmMesIndex = rec - > record [ iv - > getPosByChFld ( 0 , FLD_EVT , rec ) ] ; // seems there's no status per channel in 3rd gen. models?!?
DPRINTLN ( DBG_INFO , F ( " (# " ) + String ( iv - > id ) + F ( " ) alarm ID incremented to " ) + String ( iv - > alarmMesIndex ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINTLN ( F ( " alarm ID incremented to " ) + String ( iv - > alarmMesIndex ) ) ;
iv - > enqueCommand < InfoCommand > ( AlarmData ) ;
iv - > enqueCommand < InfoCommand > ( AlarmData ) ;
}
}
//mPayload[iv->id].skipfirstrepeat = 1;
//mPayload[iv->id].skipfirstrepeat = 1;
@ -555,7 +561,7 @@ const byteAssign_t InfoAssignment[] = {
( p - > packet [ 0 ] = = 0x91 | | p - > packet [ 0 ] = = ( 0x37 + ALL_FRAMES ) ) ? CH2 :
( p - > packet [ 0 ] = = 0x91 | | p - > packet [ 0 ] = = ( 0x37 + ALL_FRAMES ) ) ? CH2 :
p - > packet [ 0 ] = = ( 0x38 + ALL_FRAMES ) ? CH3 :
p - > packet [ 0 ] = = ( 0x38 + ALL_FRAMES ) ? CH3 :
CH4 ;
CH4 ;
DPRINTLN ( DBG_INFO , F ( " (# " ) + String ( iv - > id ) + F ( " ) data msg 0x " ) + String ( p - > packet [ 0 ] , HEX ) + F ( " channel " ) + datachan ) ;
//DPRINTLN(DBG_INFO, F("(#") + String(iv->id) + F(") data msg 0x") + String(p->packet[0], HEX) + F(" channel ") + datachan);
// count in RF_communication_protocol.xlsx is with offset = -1
// count in RF_communication_protocol.xlsx is with offset = -1
iv - > setValue ( iv - > getPosByChFld ( datachan , FLD_UDC , rec ) , rec , ( float ) ( ( p - > packet [ 9 ] < < 8 ) + p - > packet [ 10 ] ) / 10 ) ;
iv - > setValue ( iv - > getPosByChFld ( datachan , FLD_UDC , rec ) , rec , ( float ) ( ( p - > packet [ 9 ] < < 8 ) + p - > packet [ 10 ] ) / 10 ) ;
yield ( ) ;
yield ( ) ;
@ -613,7 +619,8 @@ const byteAssign_t InfoAssignment[] = {
if ( iv - > alarmMesIndex < rec - > record [ iv - > getPosByChFld ( 0 , FLD_EVT , rec ) ] ) {
if ( iv - > alarmMesIndex < rec - > record [ iv - > getPosByChFld ( 0 , FLD_EVT , rec ) ] ) {
iv - > alarmMesIndex = rec - > record [ iv - > getPosByChFld ( 0 , FLD_EVT , rec ) ] ;
iv - > alarmMesIndex = rec - > record [ iv - > getPosByChFld ( 0 , FLD_EVT , rec ) ] ;
DPRINTLN ( DBG_INFO , F ( " alarm ID incremented to " ) + String ( iv - > alarmMesIndex ) ) ;
miDPRINTHead ( DBG_INFO , iv - > id ) ;
DBGPRINTLN ( F ( " alarm ID incremented to " ) + String ( iv - > alarmMesIndex ) ) ;
//iv->enqueCommand<InfoCommand>(AlarmData);
//iv->enqueCommand<InfoCommand>(AlarmData);
}
}
@ -699,8 +706,16 @@ const byteAssign_t InfoAssignment[] = {
return true ;
return true ;
}
}
void miDPRINTHead ( uint8_t lvl , uint8_t id ) {
DPRINT ( lvl , F ( " (# " ) ) ;
DBGPRINT ( String ( id ) ) ;
DBGPRINT ( F ( " ) " ) ) ;
}
void reset ( uint8_t id ) {
void reset ( uint8_t id ) {
DPRINTLN ( DBG_INFO , F ( " resetPayload: id: " ) + String ( id ) ) ;
//DPRINTLN(DBG_INFO, F("resetPayload: id: ") + String(id));
miDPRINTHead ( DBG_INFO , id ) ;
DBGPRINTLN ( F ( " resetPayload " ) ) ;
memset ( mPayload [ id ] . len , 0 , MAX_PAYLOAD_ENTRIES ) ;
memset ( mPayload [ id ] . len , 0 , MAX_PAYLOAD_ENTRIES ) ;
mPayload [ id ] . gotFragment = false ;
mPayload [ id ] . gotFragment = false ;
/*mPayload[id].maxPackId = MAX_PAYLOAD_ENTRIES;
/*mPayload[id].maxPackId = MAX_PAYLOAD_ENTRIES;