Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -rb3e53e10da033307b084161e6008fa5ed7710ccf -receb190a5d66fdbee779478ac8bb50a846ed9241 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision b3e53e10da033307b084161e6008fa5ed7710ccf) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision eceb190a5d66fdbee779478ac8bb50a846ed9241) @@ -7,8 +7,8 @@ * * @file AlarmMgmt.c * -* @author (last) Dong Nguyen -* @date (last) 27-Sep-2022 +* @author (last) Darren Cox +* @date (last) 28-Nov-2022 * * @author (original) Sean * @date (original) 04-Feb-2020 @@ -18,14 +18,14 @@ #define __ALARM_MGMT_C__ #include "AlarmMgmt.h" +#include "CPLD.h" #include "OperationModes.h" #include "PersistentAlarm.h" #include "SafetyShutdown.h" #include "SystemComm.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Timers.h" -#include "CPLD.h" /** * @addtogroup AlarmManagement @@ -65,6 +65,7 @@ static void activateAlarm( ALARM_ID_T alarm ); static void publishAlarmInfo( void ); static void alarmUserNotify( void ); +static BOOL isTransitionToFaultRequired( void ); /*********************************************************************//** * @brief @@ -125,7 +126,7 @@ alarmConditionIsActive[ alarm ] = TRUE; // If alarm is a DG fault, request transition to fault mode - if ( ( TRUE == ALARM_TABLE[ alarm ].alarmIsDGFault ) && ( getCurrentOperationMode() != DG_MODE_SERV ) ) + if ( ( TRUE == ALARM_TABLE[ alarm ].alarmIsDGFault ) && ( TRUE == isTransitionToFaultRequired() ) ) { requestNewOperationMode( DG_MODE_FAUL ); } @@ -286,6 +287,7 @@ data.safetyShutdownStatus = (U32)isSafetyShutdownActivated(); broadcastData( MSG_ID_DG_ALARM_INFO, COMM_BUFFER_OUT_CAN_DG_ALARM, (U08*)&data, sizeof( SAFETY_SHUTDOWN_ACTIVATION_DATA_T ) ); + broadcastCPLDStatus(); alarmInfoPublicationTimerCounter = 0; } } @@ -327,11 +329,11 @@ // Flash Fault LED if ( alarmLEDTimer <= ALARM_DG_FAULT_LED_ON_INTERVAL ) { - setCPLDFaultLED( PIN_SIGNAL_HIGH ); // Set Fault LED + setCPLDFaultLED( PIN_SIGNAL_HIGH, TRUE ); // Set Fault LED } else if ( alarmLEDTimer <= ALARM_DG_FAULT_LED_OFF_INTERVAL ) { - setCPLDFaultLED( PIN_SIGNAL_LOW ); // Clear Fault LED + setCPLDFaultLED( PIN_SIGNAL_LOW, TRUE ); // Clear Fault LED } else { @@ -341,16 +343,51 @@ // If HD COM has failed, sound alarm if ( FALSE == isHDCommunicating() ) { - setCPLDFaultAudio( PIN_SIGNAL_HIGH ); // Set Fault Audio + setCPLDFaultAudio( PIN_SIGNAL_HIGH ); // Set Fault Audio } + else + { + setCPLDFaultAudio( PIN_SIGNAL_LOW ); // Clear Fault Audio + } } else { // No FAULTs - setCPLDFaultLED( PIN_SIGNAL_LOW ); // Clear Fault LED - setCPLDFaultAudio( PIN_SIGNAL_LOW ); // Clear Fault Audio + setCPLDFaultLED( PIN_SIGNAL_LOW, FALSE ); // Clear Fault LED + setCPLDFaultAudio( PIN_SIGNAL_LOW ); // Clear Fault Audio } } + +/************************************************************************* + * @brief + * The isTransitionToFaultRequired function checks whether the alarm management + * should request a transition to fault mode immediately or it should be deferred + * @details Inputs: none + * @details Outputs: none + * @param none + * @return TRUE if transition to fault is required otherwise, FALSE + *************************************************************************/ +static BOOL isTransitionToFaultRequired( void ) +{ + BOOL status = TRUE; + DG_OP_MODE_T opMode = getCurrentOperationMode(); + + switch( opMode ) + { + case DG_MODE_FLUS: + case DG_MODE_HEAT: + case DG_MODE_CHEM: + case DG_MODE_SERV: + status = FALSE; + break; + + default: + // NOTE: Do nothing for the other modes + break; + } + + return status; +} /************************************************************************* * TEST SUPPORT FUNCTIONS