Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -rb8f298547eb578000b3ff3cf55732fda7a689ce0 -re8f6f5fda0c67cd09a0a7968e3cf305691e75101 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision b8f298547eb578000b3ff3cf55732fda7a689ce0) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision e8f6f5fda0c67cd09a0a7968e3cf305691e75101) @@ -46,7 +46,7 @@ // *** 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; +U32 alarmLEDTimer; ///< Alarm LED timer 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. @@ -57,6 +57,7 @@ static BOOL alarmIsActive[ NUM_OF_ALARM_IDS ]; ///< Array of current state of each alarm static BOOL alarmConditionIsActive[ NUM_OF_ALARM_IDS ]; ///< Array of flag indicates if an alarm condition is active static U32 alarmInfoPublicationTimerCounter; ///< Used to schedule alarm information publication to CAN bus. +static BOOL isAFlaultAlarmActive; ///< Boolean flag to indicate whether a DG fault alarm is active. /// Interval (in task intervals) at which to publish alarm information to CAN bus. static OVERRIDE_U32_T alarmInfoPublishInterval = { ALARM_INFO_PUB_INTERVAL, ALARM_INFO_PUB_INTERVAL, ALARM_INFO_PUB_INTERVAL, 0 }; @@ -71,20 +72,22 @@ * @brief * The initAlarmMgmt function initializes the AlarmMgmt module. * @details Inputs: none - * @details Outputs: AlarmMgmt module initialized. + * @details Outputs: alarmInfoPublicationTimerCounter, alarmLEDTimer, + * isAFlaultAlarmActive, alarmIsActive, alarmConditionIsActive * @return none *************************************************************************/ void initAlarmMgmt( void ) { ALARM_ID_T alrm; alarmInfoPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; - alarmLEDTimer = 0; + alarmLEDTimer = 0; + isAFlaultAlarmActive = FALSE; // initialize alarm states and start time stamps for ( alrm = ALARM_ID_NO_ALARM; alrm < NUM_OF_ALARM_IDS; alrm++ ) { - alarmIsActive[ alrm ] = FALSE; + alarmIsActive[ alrm ] = FALSE; alarmConditionIsActive[ alrm ] = FALSE; } } @@ -122,13 +125,19 @@ if ( FALSE == alarmIsActive[ alarm ] ) { // activate alarm - alarmIsActive[ alarm ] = TRUE; + alarmIsActive[ alarm ] = TRUE; alarmConditionIsActive[ alarm ] = TRUE; - // If alarm is a DG fault, request transition to fault mode - if ( ( TRUE == ALARM_TABLE[ alarm ].alarmIsDGFault ) && ( TRUE == isTransitionToFaultRequired() ) ) + if ( TRUE == ALARM_TABLE[ alarm ].alarmIsDGFault ) { - requestNewOperationMode( DG_MODE_FAUL ); + // There is a DG fault alarm. + isAFlaultAlarmActive = TRUE; + + if ( TRUE == isTransitionToFaultRequired() ) + { + // If alarm is a DG fault and the alarm manager can transition to fault immediately, go to fault mode + requestNewOperationMode( DG_MODE_FAUL ); + } } // If alarm has clear condition immediately property, clear condition now if ( TRUE == ALARM_TABLE[ alarm ].alarmConditionClearImmed ) @@ -267,6 +276,20 @@ BOOL isAlarmActive( ALARM_ID_T alarm ) { return alarmIsActive[ alarm ]; +} + +/*********************************************************************//** + * @brief + * The isDGFaultAlarmActive function determines whether a fault alarm is currently + * active. + * @details Inputs: alarmStatus + * @details Outputs: none + * @return TRUE if any alarm is active, FALSE if not + *************************************************************************/ +BOOL isDGFaultAlarmActive( void ) +{ + + return isAFlaultAlarmActive; } /*********************************************************************//**