Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r224b86c0847207c168d38fa1713a1e9116642267 -r4786d484e3350453b1cda83d2fed2611d7ee3c26 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 224b86c0847207c168d38fa1713a1e9116642267) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 4786d484e3350453b1cda83d2fed2611d7ee3c26) @@ -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(); @@ -312,6 +320,46 @@ return status; } +/************************************************************************* + * @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