@ -26,6 +26,8 @@ typedef struct {
uint8_t invId ;
uint8_t retransmits ;
bool gotFragment ;
uint8_t fragments ;
uint8_t lastFragments ;
/*
uint8_t data [ MAX_PAYLOAD_ENTRIES ] [ MAX_RF_PAYLOAD_SIZE ] ;
uint8_t maxPackId ;
@ -124,7 +126,8 @@ class MiPayload {
DBGPRINT ( F ( " power limit " ) ) ;
DBGPRINTLN ( String ( iv - > powerLimit [ 0 ] ) ) ;
}
mSys - > Radio . sendControlPacket ( iv - > radioId . u64 , iv - > devControlCmd , iv - > powerLimit , false , false ) ;
mSys - > Radio . sendControlPacket ( iv - > radioId . u64 ,
iv - > getNextTxChanIndex ( ) , iv - > devControlCmd , iv - > powerLimit , false , false ) ;
mPayload [ iv - > id ] . txCmd = iv - > devControlCmd ;
mPayload [ iv - > id ] . limitrequested = true ;
@ -148,10 +151,12 @@ class MiPayload {
if ( cmd = = 0x01 | | cmd = = SystemConfigPara ) { //0x1 and 0x05 for HM-types
cmd = 0x0f ; // for MI, these seem to make part of the Polling the device software and hardware version number command
cmd2 = cmd = = SystemConfigPara ? 0x01 : 0x00 ; //perhaps we can only try to get second frame?
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 , cmd , cmd2 , false , false ) ;
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 ,
iv - > getNextTxChanIndex ( ) , cmd , cmd2 , false , false ) ;
} else {
//mSys->Radio.prepareDevInformCmd(iv->radioId.u64, cmd2, mPayload[iv->id].ts, iv->alarmMesIndex, false, cmd);
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 , cmd , cmd2 , false , false ) ;
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 ,
iv - > getNextTxChanIndex ( ) , cmd , cmd2 , false , false ) ;
} ;
mPayload [ iv - > id ] . txCmd = cmd ;
@ -192,6 +197,8 @@ class MiPayload {
record_t < > * rec = iv - > getRecordStruct ( InverterDevInform_All ) ; // choose the record structure
rec - > ts = mPayload [ iv - > id ] . ts ;
mPayload [ iv - > id ] . gotFragment = true ;
mPayload [ iv - > id ] . fragments + + ;
/*
Polling the device software and hardware version number command
@ -234,6 +241,7 @@ const byteAssign_t InfoAssignment[] = {
}
iv - > isConnected = true ;
mPayload [ iv - > id ] . gotFragment = true ;
mPayload [ iv - > id ] . fragments + + ;
if ( mSerialDebug ) {
DPRINT_IVID ( DBG_INFO , iv - > id ) ;
DPRINT ( DBG_INFO , F ( " HW_VER is " ) ) ;
@ -246,6 +254,7 @@ const byteAssign_t InfoAssignment[] = {
DPRINT ( DBG_INFO , F ( " HW_PartNo " ) ) ;
DBGPRINTLN ( String ( ( uint32_t ) ( ( ( p - > packet [ 10 ] < < 8 ) | p - > packet [ 11 ] ) < < 8 | p - > packet [ 12 ] ) < < 8 | p - > packet [ 13 ] ) ) ;
mPayload [ iv - > id ] . gotFragment = true ;
mPayload [ iv - > id ] . fragments + + ;
iv - > setValue ( iv - > getPosByChFld ( 0 , FLD_YT , rec ) , rec , ( float ) ( ( p - > packet [ 20 ] < < 8 ) + p - > packet [ 21 ] ) / 1 ) ;
if ( mSerialDebug ) {
DPRINT ( DBG_INFO , F ( " HW_FB_TLmValue " ) ) ;
@ -266,6 +275,7 @@ const byteAssign_t InfoAssignment[] = {
DBGPRINTLN ( F ( " got 3rd frame (hw info) " ) ) ;
iv - > setQueuedCmdFinished ( ) ;
mPayload [ iv - > id ] . complete = true ;
mPayload [ iv - > id ] . fragments + + ;
mStat - > rxSuccess + + ;
}
@ -423,6 +433,17 @@ const byteAssign_t InfoAssignment[] = {
//DPRINTLN(DBG_INFO, F("Pyld incompl code")); //info for testing only
bool crcPass , pyldComplete ;
crcPass = build ( iv - > id , & pyldComplete ) ;
// evaluate quality of send channel with rcv params
if ( retransmit ) {
iv - > evalTxChanQuality ( crcPass , mPayload [ iv - > id ] . retransmits ,
mPayload [ iv - > id ] . fragments , mPayload [ iv - > id ] . lastFragments ) ;
DPRINT ( DBG_INFO , " Quality: " ) ;
iv - > dumpTxChanQuality ( ) ;
DBGPRINTLN ( " " ) ;
}
mPayload [ iv - > id ] . lastFragments = mPayload [ iv - > id ] . fragments ;
if ( ! crcPass & & ! pyldComplete ) { // payload not complete
if ( ( mPayload [ iv - > id ] . requested ) & & ( retransmit ) ) {
if ( iv - > devControlCmd = = Restart | | iv - > devControlCmd = = CleanState_LockAndAlarm ) {
@ -433,7 +454,8 @@ const byteAssign_t InfoAssignment[] = {
} else if ( iv - > devControlCmd = = ActivePowerContr ) {
DPRINT_IVID ( DBG_INFO , iv - > id ) ;
DBGPRINTLN ( F ( " retransmit power limit " ) ) ;
mSys - > Radio . sendControlPacket ( iv - > radioId . u64 , iv - > devControlCmd , iv - > powerLimit , true , false ) ;
mSys - > Radio . sendControlPacket ( iv - > radioId . u64 ,
iv - > getNextTxChanIndex ( ) , iv - > devControlCmd , iv - > powerLimit , true , false ) ;
} else {
uint8_t cmd = mPayload [ iv - > id ] . txCmd ;
if ( mPayload [ iv - > id ] . retransmits < mMaxRetrans ) {
@ -444,7 +466,8 @@ const byteAssign_t InfoAssignment[] = {
mPayload [ iv - > id ] . retransmits = mMaxRetrans ;
} else if ( cmd = = 0x0f ) {
//hard/firmware request
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 , 0x0f , 0x00 , true , false ) ;
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 ,
iv - > getNextTxChanIndex ( ) , 0x0f , 0x00 , true , false ) ;
//iv->setQueuedCmdFinished();
//cmd = iv->getQueuedCmd();
} else {
@ -481,7 +504,8 @@ const byteAssign_t InfoAssignment[] = {
}
DBGPRINT ( F ( " 0x " ) ) ;
DBGHEXLN ( cmd ) ;
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 , cmd , cmd , true , false ) ;
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 ,
iv - > getNextTxChanIndex ( ) , cmd , cmd , true , false ) ;
//mSys->Radio.prepareDevInformCmd(iv->radioId.u64, cmd, mPayload[iv->id].ts, iv->alarmMesIndex, true, cmd);
yield ( ) ;
}
@ -499,7 +523,8 @@ 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);
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 , mPayload [ iv - > id ] . txCmd , mPayload [ iv - > id ] . txCmd , false , false ) ;
mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 ,
iv - > getNextTxChanIndex ( ) , mPayload [ iv - > id ] . txCmd , mPayload [ iv - > id ] . txCmd , false , false ) ;
}
}
/*else { // payload complete
@ -568,6 +593,7 @@ const byteAssign_t InfoAssignment[] = {
record_t < > * rec = iv - > getRecordStruct ( RealTimeRunData_Debug ) ; // choose the record structure
rec - > ts = mPayload [ iv - > id ] . ts ;
mPayload [ iv - > id ] . gotFragment = true ;
mPayload [ iv - > id ] . fragments + + ;
mPayload [ iv - > id ] . txId = p - > packet [ 0 ] ;
miStsConsolidate ( iv , stschan , rec , p - > packet [ 10 ] , p - > packet [ 12 ] , p - > packet [ 9 ] , p - > packet [ 11 ] ) ;
mPayload [ iv - > id ] . stsAB [ stschan ] = true ;
@ -639,6 +665,7 @@ const byteAssign_t InfoAssignment[] = {
record_t < > * rec = iv - > getRecordStruct ( RealTimeRunData_Debug ) ; // choose the parser
rec - > ts = mPayload [ iv - > id ] . ts ;
mPayload [ iv - > id ] . gotFragment = true ;
mPayload [ iv - > id ] . fragments + + ;
uint8_t datachan = ( p - > packet [ 0 ] = = 0x89 | | p - > packet [ 0 ] = = ( 0x36 + ALL_FRAMES ) ) ? CH1 :
( p - > packet [ 0 ] = = 0x91 | | p - > packet [ 0 ] = = ( 0x37 + ALL_FRAMES ) ) ? CH2 :
@ -685,7 +712,8 @@ const byteAssign_t InfoAssignment[] = {
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 ) ;
mSys - > Radio . prepareDevInformCmd ( iv - > radioId . u64 ,
iv - > getNextTxChanIndex ( ) , 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
@ -765,7 +793,7 @@ const byteAssign_t InfoAssignment[] = {
uint8_t txCmd = mPayload [ id ] . txCmd ;
if ( ! * complete ) {
DPRINTLN ( DBG_VERBOSE , F ( " incomlete, txCmd is 0x " ) + String ( txCmd , HEX ) ) ;
DPRINTLN ( DBG_VERBOSE , F ( " incomp lete, txCmd is 0x " ) + String ( txCmd , HEX ) ) ;
//DBGHEXLN(txCmd);
if ( txCmd = = 0x09 | | txCmd = = 0x11 | | ( txCmd > = 0x36 & & txCmd < = 0x39 ) )
return false ;
@ -800,6 +828,8 @@ const byteAssign_t InfoAssignment[] = {
DBGPRINTLN ( F ( " resetPayload " ) ) ;
memset ( mPayload [ id ] . len , 0 , MAX_PAYLOAD_ENTRIES ) ;
mPayload [ id ] . gotFragment = false ;
mPayload [ id ] . fragments = 0 ;
mPayload [ id ] . lastFragments = 0 ;
/*mPayload[id].maxPackId = MAX_PAYLOAD_ENTRIES;
mPayload [ id ] . lastFound = false ; */
mPayload [ id ] . retransmits = 0 ;