Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 -r05b4d416b6bd5e7af4347f112a20f9f81a257064 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 05b4d416b6bd5e7af4347f112a20f9f81a257064) @@ -844,16 +844,17 @@ *************************************************************************/ static void checkTooManyBadMsgCRCs( U16 msgID ) { - U32 listTimeInMS = calcTimeSince( badCRCTimeStamps[ badCRCListIdx ] ); + U32 listTimeInMS; // replace oldest bad CRC in list with this new one badCRCTimeStamps[ badCRCListIdx ] = getMSTimerCount(); // move list index to next position (may wrap) - badCRCListIdx = INC_WRAP( badCRCListIdx, 0, MAX_COMM_CRC_FAILURES ); + badCRCListIdx = INC_WRAP( badCRCListIdx, 0, MAX_COMM_CRC_FAILURES - 1 ); // update list count badCRCListCount = INC_CAP( badCRCListCount, MAX_COMM_CRC_FAILURES ); // check if too many bad CRCs in window of time - if ( listTimeInMS >= MAX_COMM_CRC_FAILURE_WINDOW_MS ) + listTimeInMS = calcTimeSince( badCRCTimeStamps[ badCRCListIdx ] ); + if ( listTimeInMS <= MAX_COMM_CRC_FAILURE_WINDOW_MS ) { SET_ALARM_WITH_1_U32_DATA( ALARM_ID_COMM_TOO_MANY_BAD_CRCS, (U32)msgID ); } @@ -884,14 +885,10 @@ _disable_IRQ(); // slot selection needs interrupt protection if ( FALSE == pendingAckList[ i ].used ) { - S16 seqNo = msg->hdr.seqNo; + S16 seqNo = msg->hdr.seqNo * -1; // remove ACK bit from seq # pendingAckList[ i ].used = TRUE; _enable_IRQ(); - if ( seqNo < 0 ) - { - seqNo *= -1; - } pendingAckList[ i ].seqNo = seqNo; pendingAckList[ i ].channel = channel; pendingAckList[ i ].timeStamp = getMSTimerCount();