Index: firmware/App/Drivers/SafetyShutdown.c =================================================================== diff -u -r8e50cc04fb92d9b4ee9045e445ca8451abe951ab -r6ddc5298786a4b5055f75330c49b62c6ae7adeb0 --- firmware/App/Drivers/SafetyShutdown.c (.../SafetyShutdown.c) (revision 8e50cc04fb92d9b4ee9045e445ca8451abe951ab) +++ firmware/App/Drivers/SafetyShutdown.c (.../SafetyShutdown.c) (revision 6ddc5298786a4b5055f75330c49b62c6ae7adeb0) @@ -46,6 +46,11 @@ #define MIN_BACKUP_ALARM_CURRENT_MA 200.0 ///< Minimum backup alarm audio current (in mA) detected when safety shutdown asserted. #define MAX_BACKUP_ALARM_CURRENT_MA 10.0 ///< Maximum backup alarm audio current (in mA) detected when safety shutdown is recovered. +#define SAFETY_POST_24V_NOT_CUT 1 ///< Safety shutdown POST failed because 24V was not cut when safety line pulled. +#define SAFETY_POST_NO_BUZZER 2 ///< Safety shutdown POST failed because buzzer was not detected when safety line pulled. +#define SAFETY_POST_NO_24V_RESTORE 3 ///< Safety shutdown POST failed because 24V was not restored when safety line reset. +#define SAFETY_POST_NO_BUZZER_OFF 4 ///< Safety shutdown POST failed because buzzer was not turned off when safety line reset. + /// Enumeration of safety shutdown self-test states. typedef enum Safety_Shutdown_Self_Test_States { @@ -138,13 +143,13 @@ // Verify 24V is down when w.d. expired if ( v24 > MAX_24V_LEVEL_ON_SAFETY_SHUTDOWN ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, 1.0, v24 ); + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, (F32)SAFETY_POST_24V_NOT_CUT, v24 ); safetyShutdownSelfTestStatus = SELF_TEST_STATUS_FAILED; } // Verify backup alarm audio is on when w.d. expired else if ( audioCurrent < MIN_BACKUP_ALARM_CURRENT_MA ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, 2.0, audioCurrent ); + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, (F32)SAFETY_POST_NO_BUZZER, audioCurrent ); safetyShutdownSelfTestStatus = SELF_TEST_STATUS_FAILED; } safetyShutdownSelfTestTimerCount = getMSTimerCount(); @@ -163,13 +168,13 @@ // Verify 24V is down when w.d. recovered if ( v24 < MIN_24V_LEVEL_ON_SAFETY_RECOVER ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, 3.0, v24 ); + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, (F32)SAFETY_POST_NO_24V_RESTORE, v24 ); safetyShutdownSelfTestStatus = SELF_TEST_STATUS_FAILED; } // Verify backup alarm audio is on when w.d. recovered else if ( audioCurrent > MAX_BACKUP_ALARM_CURRENT_MA ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, 4.0, audioCurrent ); + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, (F32)SAFETY_POST_NO_BUZZER_OFF, audioCurrent ); safetyShutdownSelfTestStatus = SELF_TEST_STATUS_FAILED; } else Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r7a7bf19d0cf16745566956f45cef57f8eb5df445 -r6ddc5298786a4b5055f75330c49b62c6ae7adeb0 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 7a7bf19d0cf16745566956f45cef57f8eb5df445) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 6ddc5298786a4b5055f75330c49b62c6ae7adeb0) @@ -62,6 +62,8 @@ #define ALARM_AUDIO_CURRENT_HG_MIN_MA 20.0 ///< Minimum audio current (high gain) during test tone self-test (in mA). // TODO - Why is HG so low? S/B same as LG I think. #define ALARM_AUDIO_CURRENT_LG_MIN_MA 60.0 ///< Minimum audio current (low gain) during test tone self-test (in mA). #define ALARM_AUDIO_MAX_TEST_TIME_MS 1000 ///< Maximum time for audio current to reach threshold in test. +#define MAX_ALARM_AUDIO_VOLUME_INDEX (MAX_ALARM_VOLUME_LEVEL - 1 ) ///< Index for maximum alarm audio volume. +#define MIN_ALARM_AUDIO_VOLUME_INDEX 0 ///< Index for minimum alarm audio volume. /// Alarm priority ranking record. typedef struct @@ -838,8 +840,8 @@ if ( TRUE == alarmAudioTestToneRequested ) { // Play test tone at min volume setAlarmAudioState( ALARM_AUDIO_TEST_TONE, - ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[0][ALARM_AUDIO_VOLUME_GAIN], - ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[0][ALARM_AUDIO_VOLUME_DIVIDER] ); + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[MIN_ALARM_AUDIO_VOLUME_INDEX][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[MIN_ALARM_AUDIO_VOLUME_INDEX][ALARM_AUDIO_VOLUME_DIVIDER] ); // If we're in Fault mode, ensure audio test tone request is cancelled. if ( MODE_FAUL == getCurrentOperationMode() ) { Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -rc65ad0538ff99c3e13d7d7866ac15e38a1ef6002 -r6ddc5298786a4b5055f75330c49b62c6ae7adeb0 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision c65ad0538ff99c3e13d7d7866ac15e38a1ef6002) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 6ddc5298786a4b5055f75330c49b62c6ae7adeb0) @@ -264,6 +264,9 @@ SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE, SW_FAULT_ID_POST_TREATMENT_RESERVOIR_MGMT_INVALID_STATE, SW_FAULT_ID_SAFETY_SHUTDOWN_INVALID_SELF_TEST_STATE, + SW_FAULT_ID_PHANTOM_INTERRUPT, // 120 + SW_FAULT_ID_UNEXPECTED_RTI_INTERRUPT, + SW_FAULT_ID_UNEXPECTED_DMA_INTERRUPT, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/Interrupts.c =================================================================== diff -u -r39dd0b7734331c784b8410f2bbd481e0f792892e -r6ddc5298786a4b5055f75330c49b62c6ae7adeb0 --- firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision 39dd0b7734331c784b8410f2bbd481e0f792892e) +++ firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision 6ddc5298786a4b5055f75330c49b62c6ae7adeb0) @@ -85,7 +85,7 @@ *************************************************************************/ void phantomInterrupt(void) { - // TODO - what to do with phantom interrupts? + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_PHANTOM_INTERRUPT ) } /*********************************************************************//** @@ -117,7 +117,7 @@ break; default: - // TODO - s/w fault? + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_UNEXPECTED_RTI_INTERRUPT, notification ) break; } } @@ -180,7 +180,7 @@ } else { - // Ignore - other notifications - unhandled + // Ignore other notifications - unhandled } } } @@ -264,7 +264,7 @@ break; #endif default: - // TODO - s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_UNEXPECTED_DMA_INTERRUPT, channel ) break; } }