Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r5d82009d1baa2b52122065934481745bf4de223b -r92d1230313c92c7480b9ae80a37b7a594232f59d --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 5d82009d1baa2b52122065934481745bf4de223b) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 92d1230313c92c7480b9ae80a37b7a594232f59d) @@ -40,6 +40,8 @@ const ALARM_DATA_T BLANK_ALARM_DATA = { ALARM_DATA_TYPE_NONE, 0 }; ///< A blank alarm data record for alarms that do not include alarm data when triggered. +#define SUPERVISOR_ALARM_KEY 0xD2C3B4A5 ///< 32-bit key required for clear all alarms request. + // ********** private data ********** static BOOL alarmIsActive[ NUM_OF_ALARM_IDS ]; ///< Array of current state of each alarm @@ -333,4 +335,44 @@ return result; } +/*********************************************************************//** + * @brief + * The testClearAllAlarms function clears all active alarms, even if they + * are non-recoverable or faults. The caller of this function must provide + * the correct 32-bit key. A Dialin user must also be logged into DG. + * @details Inputs: none + * @details Outputs: alarmIsActive[], alarmStartedAt[] + * @param key 32-bit supervior alarm key required to perform this function + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testClearAllAlarms( U32 key ) +{ + BOOL result = FALSE; + + // Verify key + if ( SUPERVISOR_ALARM_KEY == key ) + { + // Verify tester has logged in with HD + if ( TRUE == isTestingActivated() ) + { + ALARM_ID_T a; + + // Clear all active alarms + for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) + { + if ( TRUE == alarmIsActive[ a ] ) + { + U32 al = (U32)a; + + broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_DG_ALARM, (U08*)&al, sizeof( U32 ) ); + alarmIsActive[ a ] = FALSE; + } + } + result = TRUE; + } + } + + return result; +} + /**@}*/ Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r47c41046beba8affaaaa13a4f222a7b99bd193f1 -r92d1230313c92c7480b9ae80a37b7a594232f59d --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 47c41046beba8affaaaa13a4f222a7b99bd193f1) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 92d1230313c92c7480b9ae80a37b7a594232f59d) @@ -92,6 +92,7 @@ BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value ); BOOL testResetAlarmStateOverride( U32 alarmID ); +BOOL testClearAllAlarms( U32 key ); /**@}*/ Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r59543c15efd37e0e23269768df9a1cb9b6a3d296 -r92d1230313c92c7480b9ae80a37b7a594232f59d --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 59543c15efd37e0e23269768df9a1cb9b6a3d296) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 92d1230313c92c7480b9ae80a37b7a594232f59d) @@ -1288,6 +1288,10 @@ handleTestBlockMessagesRequest( message ); break; + case MSG_ID_DG_SUPER_CLEAR_ALARMS_CMD: + handleTestSuperClearAlarmsRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rc816a28448cd1c4d2c66a8d1ed8630e8bd4d2912 -r92d1230313c92c7480b9ae80a37b7a594232f59d --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision c816a28448cd1c4d2c66a8d1ed8630e8bd4d2912) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 92d1230313c92c7480b9ae80a37b7a594232f59d) @@ -3822,4 +3822,29 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleTestSuperClearAlarmsRequest function handles a request to clear + * all active alarms on DG. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestSuperClearAlarmsRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 key; + + memcpy( &key, message->payload, sizeof(U32) ); + result = testClearAllAlarms( key ); + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r1c2f96bf994157b11c0c32ddaf96fc91a9a1da1d -r92d1230313c92c7480b9ae80a37b7a594232f59d --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 1c2f96bf994157b11c0c32ddaf96fc91a9a1da1d) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 92d1230313c92c7480b9ae80a37b7a594232f59d) @@ -413,6 +413,9 @@ // MSG_ID_DG_BLOCK_MESSAGE_TRANSMISSION void handleTestBlockMessagesRequest( MESSAGE_T *message ); +// MSG_ID_DG_SUPER_CLEAR_ALARMS_CMD +void handleTestSuperClearAlarmsRequest( MESSAGE_T *message ); + /**@}*/ #endif