Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r8592c629e9e6e212c1325239a21ceb641f9dc1fe -r90f6438e80dbe0a32472a076a0d1bc54db65d15a --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 8592c629e9e6e212c1325239a21ceb641f9dc1fe) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 90f6438e80dbe0a32472a076a0d1bc54db65d15a) @@ -18,6 +18,7 @@ #include "Common.h" #include "AlarmLamp.h" +#include "OperationModes.h" #include "SystemCommMessages.h" #include "Timers.h" @@ -77,6 +78,8 @@ // ********** private function prototypes ********** +static void activateAlarm( ALARM_ID_T alarm ); + static void updateAlarmsState( void ); static void setAlarmLampAndAudio( void ); static void updateAlarmsSilenceStatus( void ); @@ -159,97 +162,98 @@ /************************************************************************* * @brief activateAlarm - * The activateAlarm function activates a given alarm. Also, an alarm \n - * message is broadcast to the rest of the system. + * The activateAlarm function activates a given alarm. * @details * Inputs : none - * Outputs : AlarmStatusTable[] + * Outputs : alarmIsActive[], alarmStartedAt[] * @param alarm : ID of alarm to activate * @return none *************************************************************************/ -void activateAlarm( ALARM_ID_T alarm ) +static void activateAlarm( ALARM_ID_T alarm ) { // verify given alarm if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - // broadcast alarm if not already active - if ( TRUE == alarmIsActive[alarm].data ) + // if alarm is a fault and not already triggered, request transition to fault mode + if ( ( FALSE == getAlarmActive(alarm) ) && ( TRUE == alarmTable[alarm].alarmIsFault ) ) { - broadcastAlarmTriggered( alarm, blankAlarmData, blankAlarmData ); +// requestNewOperationMode( MODE_FAUL ); } // activate alarm alarmIsActive[alarm].data = TRUE; alarmStartedAt[alarm].data = getMSTimerCount(); } else { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE_NO_DATA, alarm ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE, alarm ) } } /************************************************************************* + * @brief activateAlarmNoData + * The activateAlarmNoData function activates a given alarm. Also, an alarm \n + * message is broadcast to the rest of the system. This function will \n + * include given data in the broadcast message for logging. + * @details + * Inputs : none + * Outputs : alarm triggered message sent, alarm activated + * @param alarm : ID of alarm to activate + * @param alarmData : supporting data to include in alarm msg + * @return none + *************************************************************************/ +void activateAlarmNoData( ALARM_ID_T alarm ) +{ + // broadcast alarm and data if alarm not already active + if ( FALSE == alarmIsActive[alarm].data ) + { + broadcastAlarmTriggered( alarm, blankAlarmData, blankAlarmData ); + } + activateAlarm( alarm ); +} + +/************************************************************************* * @brief activateAlarm1Data - * The activateAlarm function activates a given alarm. Also, an alarm \n + * The activateAlarm1Data function activates a given alarm. Also, an alarm \n * message is broadcast to the rest of the system. This function will \n * include given data in the broadcast message for logging. * @details * Inputs : none - * Outputs : AlarmStatusTable[] + * Outputs : alarm triggered message sent, alarm activated * @param alarm : ID of alarm to activate * @param alarmData : supporting data to include in alarm msg * @return none *************************************************************************/ void activateAlarm1Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData ) { - // verify given alarm - if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) + // broadcast alarm and data if alarm not already active + if ( FALSE == alarmIsActive[alarm].data ) { - // broadcast alarm if not already active - if ( TRUE == alarmIsActive[alarm].data ) - { - broadcastAlarmTriggered( alarm, alarmData, blankAlarmData ); - } - // activate alarm - alarmIsActive[alarm].data = TRUE; - alarmStartedAt[alarm].data = getMSTimerCount(); + broadcastAlarmTriggered( alarm, alarmData, blankAlarmData ); } - else - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE_1_DATA, alarm ) - } + activateAlarm( alarm ); } /************************************************************************* * @brief activateAlarm1Data - * The activateAlarm function activates a given alarm. Also, an alarm \n + * The activateAlarm2Data function activates a given alarm. Also, an alarm \n * message is broadcast to the rest of the system. This function will \n * include two given data in the broadcast message for logging. * @details * Inputs : none - * Outputs : AlarmStatusTable[] + * Outputs : alarm triggered message sent, alarm activated * @param alarm : ID of alarm to activate * @param alarmData1 : supporting data to include in alarm msg * @param alarmData2 : supporting data to include in alarm msg * @return none *************************************************************************/ void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2 ) { - // verify given alarm - if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) + // broadcast alarm and data if alarm not already active + if ( FALSE == alarmIsActive[alarm].data ) { - // broadcast alarm if not already active - if ( TRUE == alarmIsActive[alarm].data ) - { - broadcastAlarmTriggered( alarm, alarmData1, alarmData2 ); - } - // activate alarm - alarmIsActive[alarm].data = TRUE; - alarmStartedAt[alarm].data = getMSTimerCount(); + broadcastAlarmTriggered( alarm, alarmData1, alarmData2 ); } - else - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE_2_DATA, alarm ) - } + activateAlarm( alarm ); } /************************************************************************* @@ -270,14 +274,18 @@ // verify alarm can be cleared if ( FALSE == alarmTable[alarm].alarmNoClear ) { + // broadcast alarm clear if not already cleared + if ( TRUE == alarmIsActive[alarm].data ) + { + broadcastAlarmCleared( alarm ); + } alarmIsActive[alarm].data = FALSE; alarmStartedAt[alarm].data = 0; // clear FIFO if this alarm was in it if ( alarmPriorityFIFO[alarmTable[alarm].alarmPriority] == alarm ) { resetAlarmPriorityFIFO( alarmTable[alarm].alarmPriority ); } - broadcastAlarmCleared( alarm ); } } else @@ -337,31 +345,25 @@ *************************************************************************/ static void updateAlarmsState( void ) { - ALARM_ID_T tempDisp = ALARM_ID_NO_ALARM; ALARM_PRIORITY_T tempState = ALARM_PRIORITY_NONE; ALARM_ID_T a; - ALARM_PRIORITY_T p; // update FIFOs per alarm status table for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) { if ( TRUE == getAlarmActive(a) ) { - if ( ALARM_ID_NO_ALARM == alarmPriorityFIFO[alarmTable[a].alarmPriority] ) + tempState = alarmTable[a].alarmPriority; + if ( ALARM_ID_NO_ALARM == alarmPriorityFIFO[tempState] ) { - alarmPriorityFIFO[alarmTable[a].alarmPriority] = a; + alarmPriorityFIFO[tempState] = a; } } } - // update alarms status and alarm to display per highest priority FIFO - for ( p = ALARM_PRIORITY_LOW; p < NUM_OF_ALARM_PRIORITIES; p++ ) - { - tempState = p; - tempDisp = alarmPriorityFIFO[p]; - } + // update alarm to display per highest priority FIFO alarmStatus.alarmsState = tempState; - alarmStatus.alarmTop = tempDisp; + alarmStatus.alarmTop = alarmPriorityFIFO[tempState]; } /*************************************************************************