Index: firmware/App/Drivers/SafetyShutdown.c =================================================================== diff -u -ra7675f3c917b632cf16207fc7ccfc1f38eb83f9b -r0f9838d6b8606a6a9853ccb6157e4c25d70ddd02 --- firmware/App/Drivers/SafetyShutdown.c (.../SafetyShutdown.c) (revision a7675f3c917b632cf16207fc7ccfc1f38eb83f9b) +++ firmware/App/Drivers/SafetyShutdown.c (.../SafetyShutdown.c) (revision 0f9838d6b8606a6a9853ccb6157e4c25d70ddd02) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2023 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file SafetyShutdown.c * * @author (last) Dara Navaei -* @date (last) 04-Jan-2022 +* @date (last) 18-Jan-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -46,6 +46,7 @@ #define MIN_BACKUP_ALARM_CURRENT_MA 200.0F ///< Minimum backup alarm audio current (in mA) detected when safety shutdown asserted. #define MAX_BACKUP_ALARM_CURRENT_MA 10.0F ///< Maximum backup alarm audio current (in mA) detected when safety shutdown is recovered. +#define SAFETY_POST_24V_INITIAL 0 ///< Safety shutdown POST failed because 24V was out before safety line pulled. #define SAFETY_POST_24V_NOT_CUT 1 ///< Safety shutdown POST failed because 24V was not cut when safety line pulled. #define SAFETY_POST_NO_24V_RESTORE 2 ///< Safety shutdown POST failed because 24V was not restored when safety line reset. @@ -77,10 +78,10 @@ *************************************************************************/ void initSafetyShutdown( void ) { - safetyShutdownActivated = FALSE; + safetyShutdownActivated = FALSE; safetyShutdownOverrideResetState = FALSE; - safetyShutdownSelfTestState = SAFETY_SHUTDOWN_SELF_TEST_STATE_START; - safetyShutdownSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; + safetyShutdownSelfTestState = SAFETY_SHUTDOWN_SELF_TEST_STATE_START; + safetyShutdownSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; safetyShutdownSelfTestTimerCount = 0; CLR_SAFETY_SHUTDOWN(); } @@ -127,25 +128,34 @@ switch ( safetyShutdownSelfTestState ) { case SAFETY_SHUTDOWN_SELF_TEST_STATE_START: + { + F32 v24 = getIntADCVoltageConverted( INT_ADC_24V_ACTUATORS ); + safetyShutdownSelfTestState = SAFETY_SHUTDOWN_SELF_TEST_STATE_IN_PROGRESS; + + // Verify 24V is up + if ( v24 < MIN_24V_LEVEL_ON_SAFETY_RECOVER ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED, (F32)SAFETY_POST_24V_INITIAL, v24 ) + safetyShutdownSelfTestStatus = SELF_TEST_STATUS_FAILED; + } safetyShutdownSelfTestTimerCount = getMSTimerCount(); activateSafetyShutdown(); - break; + } + break; case SAFETY_SHUTDOWN_SELF_TEST_STATE_IN_PROGRESS: if ( TRUE == didTimeout( safetyShutdownSelfTestTimerCount, SAFETY_SHUTDOWN_POST_TIMEOUT_MS ) ) { F32 v24 = getIntADCVoltageConverted( INT_ADC_24V_ACTUATORS ); F32 audioCurrent = getFPGABackupAlarmAudioCurrent(); -#ifndef DISABLE_WD_AND_SFTY_POST_TESTS // 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, (F32)SAFETY_POST_24V_NOT_CUT, 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; } -#endif safetyShutdownSelfTestTimerCount = getMSTimerCount(); CLR_SAFETY_SHUTDOWN(); safetyShutdownActivated = FALSE; @@ -159,15 +169,13 @@ F32 v24 = getIntADCVoltageConverted( INT_ADC_24V_ACTUATORS ); F32 audioCurrent = getFPGABackupAlarmAudioCurrent(); -#ifndef DISABLE_WD_AND_SFTY_POST_TESTS // 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, (F32)SAFETY_POST_NO_24V_RESTORE, 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; } else -#endif { safetyShutdownSelfTestStatus = SELF_TEST_STATUS_PASSED; } @@ -191,6 +199,18 @@ return result; } +/*********************************************************************//** + * @brief + * The resetSafetyShutdownPOSTState function resets safety shutdown POST state. + * @details Inputs: none + * @details Outputs: safetyShutdownSelfTestState + * @return none + *************************************************************************/ +void resetSafetyShutdownPOSTState( void ) +{ + safetyShutdownSelfTestState = SAFETY_SHUTDOWN_SELF_TEST_STATE_START; +} + /*********************************************************************//** * @brief * The testSetSafetyShutdownOverride function overrides the HD safety