Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r9a9d04b84f4345fca87fb14d26f09d497b08aae8 -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 9a9d04b84f4345fca87fb14d26f09d497b08aae8) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) @@ -93,7 +93,7 @@ static U08 pcXmitPacket[ PC_MESSAGE_PACKET_SIZE ] = { 0, 0, 0, 0, 0, 0, 0, 0 }; static U08 pcRecvPacket[ PC_MESSAGE_PACKET_SIZE ] = { 0, 0, 0, 0, 0, 0, 0, 0 }; -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED static PENDING_ACK_RECORD_T pendingAckList[ PENDING_ACK_LIST_SIZE ]; // list of outgoing messages that are awaiting an ACK #endif @@ -130,8 +130,8 @@ static void checkForCommTimeouts( void ); static void checkTooManyBadMsgCRCs( U16 msgID ); -#ifdef ACK_IMPLEMENTED -static BOOL matchACKtoPendingACKList( U16 seqNo ); +#ifndef ACK_NOT_IMPLEMENTED +static BOOL matchACKtoPendingACKList( S16 seqNo ); static void checkPendingACKList( void ); #endif @@ -157,7 +157,7 @@ badCRCTimeStamps[ i ] = 0; } -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED // initialize pending ACK list for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) { @@ -271,7 +271,7 @@ // check for sub-system comm timeouts checkForCommTimeouts(); -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED // check ACK list for messages that need to be re-sent because they haven't been ACK'd checkPendingACKList(); #endif @@ -787,7 +787,7 @@ // TODO - check CRC before processing a message if ( message.crc == crc8( (U08*)(&message), sizeof(MESSAGE_HEADER_T) + message.msg.hdr.payloadLen ) ) { -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED // if ACK, if ( MSG_ID_ACK == message.msg.hdr.msgID ) { @@ -859,7 +859,7 @@ } } -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED /************************************************************************* * @brief addMsgToPendingACKList * The addMsgToPendingACKList function adds a given message to the pending \n @@ -884,13 +884,15 @@ _disable_IRQ(); // slot selection needs interrupt protection if ( FALSE == pendingAckList[ i ].used ) { + S16 seqNo = msg->hdr.seqNo; + pendingAckList[ i ].used = TRUE; _enable_IRQ(); - if ( msg->hdr.seqNo < 0 ) + if ( seqNo < 0 ) { - msg->hdr.seqNo *= -1; + seqNo *= -1; } - pendingAckList[ i ].seqNo = msg->hdr.seqNo; + pendingAckList[ i ].seqNo = seqNo; pendingAckList[ i ].channel = channel; pendingAckList[ i ].timeStamp = getMSTimerCount(); pendingAckList[ i ].retries = MSG_NOT_ACKED_MAX_RETRIES; @@ -919,7 +921,7 @@ * @param seqNo : sequence # to match to an entry in the list * @return TRUE if a match was found, FALSE if not *************************************************************************/ -static BOOL matchACKtoPendingACKList( U16 seqNo ) +static BOOL matchACKtoPendingACKList( S16 seqNo ) { BOOL result = FALSE; U32 i; @@ -928,7 +930,7 @@ for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) { if ( ( TRUE == pendingAckList[ i ].used ) && ( pendingAckList[ i ].seqNo == seqNo ) ) - { + { // remove message pending ACK from list pendingAckList[ i ].used = FALSE; result = TRUE; break; @@ -989,9 +991,9 @@ { U16 msgID = message->hdr.msgID; -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED // if received message requires ACK, queue one up - if ( ( message->hdr.seqNo & MSG_ACK_BIT ) != 0 ) + if ( message->hdr.seqNo < 0 ) { sendACKMsg( message ); }