Index: firmware/App/Common.h =================================================================== diff -u -r9a9d04b84f4345fca87fb14d26f09d497b08aae8 -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 --- firmware/App/Common.h (.../Common.h) (revision 9a9d04b84f4345fca87fb14d26f09d497b08aae8) +++ firmware/App/Common.h (.../Common.h) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) @@ -25,15 +25,14 @@ // #define RM46_EVAL_BOARD_TARGET 1 // #define SIMULATE_UI 1 // #define DEBUG_ENABLED 1 +// #define ACK_NOT_IMPLEMENTED 1 #ifdef DEBUG_ENABLED #include #include #endif #endif -#define ACK_IMPLEMENTED 1 - // ********** public definitions ********** // **** Types **** Index: firmware/App/Services/MsgQueues.h =================================================================== diff -u -r9a9d04b84f4345fca87fb14d26f09d497b08aae8 -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 --- firmware/App/Services/MsgQueues.h (.../MsgQueues.h) (revision 9a9d04b84f4345fca87fb14d26f09d497b08aae8) +++ firmware/App/Services/MsgQueues.h (.../MsgQueues.h) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) @@ -32,7 +32,7 @@ #pragma pack(push,1) typedef struct { -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED S16 seqNo; // sequence # (and ACK required bit) of message #endif U16 msgID; // ID of message 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 ); } Index: firmware/App/Services/SystemComm.h =================================================================== diff -u -r9864b14f76782f1e68bf266dcd843451748715a0 -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 --- firmware/App/Services/SystemComm.h (.../SystemComm.h) (revision 9864b14f76782f1e68bf266dcd843451748715a0) +++ firmware/App/Services/SystemComm.h (.../SystemComm.h) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) @@ -49,7 +49,7 @@ BOOL isDGCommunicating( void ); BOOL isUICommunicating( void ); BOOL uiCommunicated( void ); -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED BOOL addMsgToPendingACKList( MESSAGE_T *msg, COMM_BUFFER_T channel, U08 *msgData, U32 len ); #endif Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r9a9d04b84f4345fca87fb14d26f09d497b08aae8 -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 9a9d04b84f4345fca87fb14d26f09d497b08aae8) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) @@ -110,7 +110,7 @@ data[ msgSize++ ] = MESSAGE_SYNC_BYTE; // set sequence # and ACK bit -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED // thread protect next sequence # access & increment _disable_IRQ(); msg.hdr.seqNo = nextSeqNo; @@ -144,7 +144,7 @@ data[ msgSize++ ] = 0; } -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED // if ACK required, add to pending ACK list if ( TRUE == ackReq ) { @@ -161,7 +161,7 @@ return result; } -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED /************************************************************************* * @brief sendACKMsg * The sendACKMsg function constructs and queues for transmit an ACK message \n @@ -180,11 +180,13 @@ // create a message record blankMessage( &msg ); // send ACK back with same seq. #, but w/o ACK bit - msg.hdr.seqNo = ( message->hdr.seqNo < 0 ? message->hdr.seqNo * -1 : message->hdr.seqNo ); + msg.hdr.seqNo = message->hdr.seqNo * -1; // ACK messages always have this ID msg.hdr.msgID = MSG_ID_ACK; + // ACK messages always have no payload + msg.hdr.payloadLen = 0; - // serialize the message (w/ sync, CRC, and appropriate CAN padding) + // serialize and queue the message for transmit on broadcast channel result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED ); return result; Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r07a5add2dff254f7be3699e4efac2b99d3554847 -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 07a5add2dff254f7be3699e4efac2b99d3554847) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) @@ -72,7 +72,7 @@ // ********** public function prototypes ********** -#ifdef ACK_IMPLEMENTED +#ifndef ACK_NOT_IMPLEMENTED // ACK MSG BOOL sendACKMsg( MESSAGE_T *message ); #endif