Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r0f6b35ef8da4d30793a181750d0a6d5898118120 -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 0f6b35ef8da4d30793a181750d0a6d5898118120) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -25,6 +25,7 @@ #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Timers.h" +#include "CPLD.h" /** * @addtogroup AlarmManagement @@ -36,12 +37,16 @@ /// Interval (ms/task time) at which the alarm information is published on the CAN bus. #define ALARM_INFO_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) #define DATA_PUBLISH_COUNTER_START_COUNT 12 ///< Data publish counter start count. +#define ALARM_DG_FAULT_LED_ON_INTERVAL ( MS_PER_SECOND / 4 / TASK_GENERAL_INTERVAL ) ///< LED Flash ON time interval time +#define ALARM_DG_FAULT_LED_OFF_INTERVAL ( ALARM_DG_FAULT_LED_ON_INTERVAL * 2 ) ///< LED Flash OFF time interval time // *** This declaration will cause a compiler error if ALARM_TABLE does not have same # of alarms as the Alarm_List enumeration. U08 alarmTableSizeAssertion[ ( ( sizeof( ALARM_TABLE ) / sizeof( ALARM_T ) ) == NUM_OF_ALARM_IDS ? 1 : -1 ) ]; // *** This declaration will cause a compiler error if ALARM_RANK_TABLE does not have same # of alarms as the Alarm_List enumeration. U08 alarmRankTableSizeAssertion[ ( ( sizeof( ALARM_RANK_TABLE ) / sizeof( ALARM_RANK_T ) ) == NUM_OF_ALARM_IDS ? 1 : -1 ) ]; + +U32 alarmLEDTimer; 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. @@ -59,6 +64,7 @@ static void activateAlarm( ALARM_ID_T alarm ); static void publishAlarmInfo( void ); +static void alarmUserNotify( void ); /*********************************************************************//** * @brief @@ -71,7 +77,8 @@ { ALARM_ID_T alrm; - alarmInfoPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + alarmInfoPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + alarmLEDTimer = 0; // initialize alarm states and start time stamps for ( alrm = ALARM_ID_NO_ALARM; alrm < NUM_OF_ALARM_IDS; alrm++ ) @@ -90,7 +97,8 @@ *************************************************************************/ void execAlarmMgmt( void ) { - // TODO - any alarm audio or LED/lamp management for DG? + // Alarm audio and LED/lamp management for DG + alarmUserNotify(); // Publish alarm information at interval publishAlarmInfo(); @@ -284,36 +292,6 @@ /*********************************************************************//** * @brief - * The checkPersistentAlarm function triggers/clears an alarm if an alarm condition - * has persisted/cleared over given time limit. - * @details Inputs: none - * @details Outputs: checks whether an alarm is triggered or an alarm condition is cleared - * @param alarmID ID of alarm to check - * @param isErrorOccured Flag indicates alarm condition is active or not - * @param data alarm data - * @param limit alarm condition limit - * @return TRUE if given alarm is active, FALSE if not - *************************************************************************/ -BOOL checkPersistentAlarm( ALARM_ID_T alarm, BOOL const isErrorOccured, F32 const data, F32 const limit ) -{ - BOOL status = FALSE; - - if ( TRUE == isPersistentAlarmTriggered( alarm, isErrorOccured ) ) - { - SET_ALARM_WITH_2_F32_DATA( alarm, data, limit ); - } - - if ( TRUE == isPersistentAlarmConditionCleared( alarm, isErrorOccured ) ) - { - clearAlarmCondition( alarm ); - status = TRUE; - } - - return status; -} - -/*********************************************************************//** - * @brief * The handleResendActiveAlarmsRequest function processes the request to re-send * all active alarms. * @details Inputs: alarmIsActive[] @@ -333,6 +311,46 @@ } } +/************************************************************************* + * @brief + * The alarmUserNotify function activates Fault LED and Audio if FAULT exists. + * @details Inputs: none + * @details Outputs: LED and Audio control + * @param none + * @return none + *************************************************************************/ +static void alarmUserNotify( void ) +{ + if ( getCurrentOperationMode() == DG_MODE_FAUL ) + { + alarmLEDTimer++; + // Flash Fault LED + if ( alarmLEDTimer <= ALARM_DG_FAULT_LED_ON_INTERVAL ) + { + setCPLDFaultLED( PIN_SIGNAL_HIGH ); // Set Fault LED + } + else if ( alarmLEDTimer <= ALARM_DG_FAULT_LED_OFF_INTERVAL ) + { + setCPLDFaultLED( PIN_SIGNAL_LOW ); // Clear Fault LED + } + else + { + alarmLEDTimer = 0; // restart timer + } + + // If HD COM has failed, sound alarm + if ( FALSE == isHDCommunicating() ) + { + setCPLDFaultAudio( PIN_SIGNAL_HIGH ); // Set Fault Audio + } + } + else + { + // No FAULTs + setCPLDFaultLED( PIN_SIGNAL_LOW ); // Clear Fault LED + setCPLDFaultAudio( PIN_SIGNAL_LOW ); // Clear Fault Audio + } +} /************************************************************************* * TEST SUPPORT FUNCTIONS