Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rb90c3887b95a6eee7f8014ff478f204ed8a5211c -raa1367aa813db6acc52013795a8c6e58405bb10e --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision b90c3887b95a6eee7f8014ff478f204ed8a5211c) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision aa1367aa813db6acc52013795a8c6e58405bb10e) @@ -56,6 +56,7 @@ #define MAX_FPGA_CLOCK_SPEED_ERRORS 3 ///< maximum number of FPGA clock speed errors within window period before alarm #define MAX_FPGA_CLOCK_SPEED_ERROR_WINDOW_MS (10 * SEC_PER_MIN * MS_PER_SECOND) ///< FPGA clock speed error window +#define PENDING_ACK_LIST_OVERRIDE_HD_CHANNEL 1 ///< Value for determining UI or DG channel when Pending ACKs are overriden. #pragma pack(push, 1) /// Record for transmitted message that is pending acknowledgement from receiver. @@ -106,6 +107,7 @@ static U32 canXmitRetryCtr = 0; ///< counter for CAN transmit retries. static OVERRIDE_U32_T hdCommunicationStatus = {0, 0, 0, 0}; ///< has HD sent a message since last check static volatile U32 timeOfLastHDCheckIn = 0; ///< last time we received an HD broadcast +static OVERRIDE_U32_T pendingACKOverride = { 0, 0, 0, 0 }; ///< Pending ACK override data structure. // ********** private function prototypes ********** @@ -780,7 +782,8 @@ { for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) { // pending ACK expired? - if ( ( TRUE == pendingAckList[ i ].used ) && ( TRUE == didTimeout( pendingAckList[ i ].timeStamp, MSG_NOT_ACKED_TIMEOUT_MS ) ) ) + if ( ( ( TRUE == pendingAckList[ i ].used ) && ( TRUE == didTimeout( pendingAckList[ i ].timeStamp, MSG_NOT_ACKED_TIMEOUT_MS ) ) ) || + ( getU32OverrideValue( &pendingACKOverride ) > 0 ) ) { // if retries left, reset and resend pending message. Do not retry when in POST since the UI might not still be responsive if ( pendingAckList[ i ].retries > 0 ) { @@ -1368,6 +1371,10 @@ handleTestDGRAMStatusOverrideRequest( message ); break; + case MSG_ID_DG_CAN_RECEIVE_ACK_MESSAGE_OVERRIDE: + handleTestDGPendingACKOverrideRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; @@ -1425,4 +1432,48 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetPendingACKOverride function overrides the + * pendingACKOverride variable. + * @details Inputs: none + * @details Outputs: pendingACKOverride + * @param value override for pendingACKOverride + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetPendingACKOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + pendingACKOverride.ovData = value; + pendingACKOverride.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetPendingACKOverride function resets the override + * of the pendingACKOverride variable. + * @details Inputs: none + * @details Outputs: pendingACKOverride + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetPendingACKOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + pendingACKOverride.override = OVERRIDE_RESET; + pendingACKOverride.ovData = pendingACKOverride.ovInitData; + } + + return result; +} /**@}*/ Index: firmware/App/Services/SystemComm.h =================================================================== diff -u -r6499ea25921fcf67826fa0c35bb03caf411ba542 -raa1367aa813db6acc52013795a8c6e58405bb10e --- firmware/App/Services/SystemComm.h (.../SystemComm.h) (revision 6499ea25921fcf67826fa0c35bb03caf411ba542) +++ firmware/App/Services/SystemComm.h (.../SystemComm.h) (revision aa1367aa813db6acc52013795a8c6e58405bb10e) @@ -57,6 +57,8 @@ BOOL addMsgToPendingACKList( MESSAGE_T *msg, COMM_BUFFER_T channel, U08 *msgData, U32 len ); BOOL testSetHDCommunicationStatus( U32 value ); BOOL testResetHDCommuncationStatus( void ); +BOOL testSetPendingACKOverride( U32 value ); +BOOL testResetPendingACKOverride( void ); /**@}*/ Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r3d8da969460b0a8d118cd1f4ccc4883b5436f730 -raa1367aa813db6acc52013795a8c6e58405bb10e --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3d8da969460b0a8d118cd1f4ccc4883b5436f730) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision aa1367aa813db6acc52013795a8c6e58405bb10e) @@ -4980,4 +4980,36 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleTestDGPendingACKOverrideRequest function handles a + * request to override pending ACKs. + * @details Inputs: none + * @details Outputs: message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestDGPendingACKOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // Verify payload length + if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) + { + result = testSetPendingACKOverride( payload.state.u32 ); + } + else + { + result = testResetPendingACKOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r3d8da969460b0a8d118cd1f4ccc4883b5436f730 -raa1367aa813db6acc52013795a8c6e58405bb10e --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 3d8da969460b0a8d118cd1f4ccc4883b5436f730) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision aa1367aa813db6acc52013795a8c6e58405bb10e) @@ -523,6 +523,9 @@ // MSG_ID_DG_RAM_STATUS_OVERRIDE void handleTestDGRAMStatusOverrideRequest( MESSAGE_T* message ); +// MSG_ID_DG_CAN_RECEIVE_ACK_MESSAGE_OVERRIDE +void handleTestDGPendingACKOverrideRequest( MESSAGE_T* message ); + /**@}*/ #endif