Index: firmware/App/Services/AlarmMgmtDD.c =================================================================== diff -u -r52ded7b22d4b413aa8182f1343e4fbb78e8c3b0a -r090cfb22a7c0b4738299c3fb411ca77aaba8d968 --- firmware/App/Services/AlarmMgmtDD.c (.../AlarmMgmtDD.c) (revision 52ded7b22d4b413aa8182f1343e4fbb78e8c3b0a) +++ firmware/App/Services/AlarmMgmtDD.c (.../AlarmMgmtDD.c) (revision 090cfb22a7c0b4738299c3fb411ca77aaba8d968) @@ -20,7 +20,7 @@ #include "OperationModes.h" #include "PersistentAlarm.h" //#include "Reservoirs.h" -//#include "SafetyShutdown.h" +#include "SafetyShutdown.h" #include "TaskGeneral.h" #include "Timers.h" #include "Messaging.h" @@ -48,8 +48,6 @@ // ********** private data ********** -//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 isAFaultAlarmActive; ///< Boolean flag to indicate whether a DG fault alarm is active. /// Interval (in task intervals) at which to publish alarm information to CAN bus. @@ -64,32 +62,26 @@ /*********************************************************************//** * @brief * The initAlarmMgmtDD function initializes the AlarmMgmt module. - * @details Inputs: none - * @details Outputs: alarmInfoPublicationTimerCounter, alarmLEDTimer, + * @details \b Inputs: none + * @details \b Outputs: alarmInfoPublicationTimerCounter, alarmLEDTimer, * isAFaultAlarmActive, alarmIsActive, alarmIsDetected * @return none *************************************************************************/ void initAlarmMgmtDD( void ) { - ALARM_ID_T alrm; - alarmInfoPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; alarmLEDTimer = 0; - isAFaultAlarmActive = FALSE; - - // initialize alarm states and start time stamps - for ( alrm = ALARM_ID_NO_ALARM; alrm < NUM_OF_ALARM_IDS; alrm++ ) - { - setAlarmActive( alrm, FALSE ); - setAlarmConditionDetected( alrm, FALSE ); - } + isAFaultAlarmActive = FALSE; + + // Initialize common alarm mgmt unit + initAlarmMgmt(); } /*********************************************************************//** * @brief * The execAlarmMgmt function executes the alarm management module. - * @details Inputs: none - * @details Outputs: none + * @details \b Inputs: none + * @details \b Outputs: none * @return none *************************************************************************/ void execAlarmMgmt( void ) @@ -100,9 +92,11 @@ /*********************************************************************//** * @brief - * The activateAlarmDD function activates a given alarm. - * @details Inputs: none - * @details Outputs: alarmIsActive[], isAFaultAlarmActive + * The activateAlarmDD function activates a given alarm. if the alarm is + * DD fault, transition fault operation mode immediately. + * @details \b Inputs: none + * @details \b Outputs: alarmIsActive[], isAFaultAlarmActive + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT when invalid alarm asked to activate. * @param alarm ID of alarm to activate * @return none *************************************************************************/ @@ -141,9 +135,10 @@ /*********************************************************************//** * @brief * The activateAlarmNoData function activates a given alarm. An alarm message - * is broadcast to the rest of the system. - * @details Inputs: none - * @details Outputs: alarm triggered message sent, alarm activated + * is broadcast to the rest of the system.it doesn't contain any parameters + * associated to alarm. + * @details \b Inputs: none + * @details \b Outputs: alarm triggered message sent, alarm activated * @param alarm ID of alarm to activate * @return none *************************************************************************/ @@ -157,8 +152,8 @@ * The activateAlarm1Data function activates a given alarm. An alarm message * is broadcast to the rest of the system. This function will include given * data in the broadcast message for logging. - * @details Inputs: none - * @details Outputs: alarm triggered message sent, alarm activated + * @details \b Inputs: none + * @details \b Outputs: alarm triggered message sent, alarm activated * @param alarm ID of alarm to activate * @param alarmData supporting data to include in alarm message * @return none @@ -173,8 +168,8 @@ * The activateAlarm2Data function activates a given alarm. An alarm message * is broadcast to the rest of the system. This function will include * two given data in the broadcast message for logging. - * @details Inputs: none - * @details Outputs: alarm triggered message sent, alarm activated + * @details \b Inputs: none + * @details \b Outputs: alarm triggered message sent, alarm activated * @param alarm ID of alarm to activate * @param alarmData1 supporting data to include in alarm message * @param alarmData2 supporting data to include in alarm message @@ -183,30 +178,32 @@ *************************************************************************/ void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2, BOOL outside ) { -// HD_MODE_SUB_MODE_T hdModes; + TD_MODE_SUB_MODE_T tdModes; ALARM_T props = getAlarmProperties( alarm ); - //getHDOperationMode( &hdModes ); + getTDOperationMode( &tdModes ); // prevent alarm trigger if property blocks in current mode/state -// if ( ( ( props.alarmBlockRinseback != TRUE ) || ( hdModes.hdMode != MODE_TREA ) || ( hdModes.hdSubMode != TREATMENT_RINSEBACK_STATE ) ) && -// ( ( props.alarmBlockEndTx != TRUE ) || ( hdModes.hdMode != MODE_POST ) ) ) -// { + if ( ( ( props.alarmBlockRinseback != TRUE ) || ( tdModes.tdMode != MODE_TREA ) || ( tdModes.tdSubMode != TREATMENT_RINSEBACK_STATE ) ) && + ( ( props.alarmBlockEndTx != TRUE ) || ( tdModes.tdMode != MODE_POST ) ) ) + { // broadcast alarm and data if alarm not already active if ( ( FALSE == isAlarmActive( alarm ) ) && ( TRUE == isTDCommunicating() ) ) { broadcastAlarmTriggered( alarm, alarmData1, alarmData2 ); } activateAlarmDD( alarm ); -// } + } } /*********************************************************************//** * @brief * The clearAlarmDD function clears a given alarm if it is recoverable. * An alarm message is broadcast to the rest of the system. - * @details Inputs: none - * @details Outputs: AlarmStatusTable[] + * @details \b Inputs: none + * @details \b Outputs: AlarmStatusTable[] + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT when invalid alarm needs + * to be cleared. * @param alarm ID of alarm to clear * @return none *************************************************************************/ @@ -238,8 +235,10 @@ * @brief * The clearAlarmConditionDD function clears a given alarm's condition detected * flag. Also an alarm message is broadcast to the rest of the system. - * @details Inputs: none - * @details Outputs: alarmIsDetected[] + * @details \b Inputs: none + * @details \b Outputs: alarmIsDetected[] + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT when invalid alarm conditioned + * needs to be cleared * @param alarm ID of alarm to clear condition for * @return none *************************************************************************/ @@ -268,8 +267,8 @@ * @brief * The isDGFaultAlarmActive function determines whether a fault alarm is currently * active. - * @details Inputs: alarmStatus - * @details Outputs: none + * @details \b Inputs: alarmStatus + * @details \b Outputs: none * @return TRUE if any alarm is active, FALSE if not *************************************************************************/ BOOL isDGFaultAlarmActive( void ) @@ -281,20 +280,20 @@ * @brief * The publishAlarmInfo function publishes alarm information at the set * interval. - * @details Inputs: - * @details Outputs: alarm information are published to CAN bus. + * @details \b Inputs: + * @details \b Outputs: alarm information are published to CAN bus. * @return none *************************************************************************/ static void publishAlarmInfo( void ) { // Publish voltages monitor data on interval if ( ++alarmInfoPublicationTimerCounter >= getU32OverrideValue( &alarmInfoPublishInterval ) ) { - //SAFETY_SHUTDOWN_ACTIVATION_DATA_T data; + SAFETY_SHUTDOWN_ACTIVATION_DATA_T data; - //data.safetyShutdownStatus = (U32)isSafetyShutdownActivated(); + data.safetyShutdownStatus = (U32)isSafetyShutdownActivated(); - //broadcastData( MSG_ID_DG_ALARM_INFO_DATA, COMM_BUFFER_OUT_CAN_DD_ALARM, (U08*)&data, sizeof( SAFETY_SHUTDOWN_ACTIVATION_DATA_T ) ); + broadcastData( MSG_ID_DD_ALARM_INFO_DATA, COMM_BUFFER_OUT_CAN_DD_ALARM, (U08*)&data, sizeof( SAFETY_SHUTDOWN_ACTIVATION_DATA_T ) ); //broadcastCPLDStatus(); alarmInfoPublicationTimerCounter = 0; } @@ -304,8 +303,8 @@ * @brief * The handleResendActiveAlarmsRequest function processes the request to re-send * all active alarms. -* @details Inputs: alarmIsActive[] -* @details Outputs: re-send active alarms to UI +* @details \b Inputs: alarmIsActive[] +* @details \b Outputs: re-send active alarms to UI * @return none *************************************************************************/ void handleResendActiveAlarmsRequest( void ) @@ -325,8 +324,8 @@ * @brief * The isAnyCleaningModeInletWaterConditionActive function returns the status * of any of the inlet water conditions is active or not in a cleaning mode -* @details Inputs: none -* @details Outputs: none +* @details \b Inputs: none +* @details \b Outputs: none * @return TRUE if any of the inlet water conditions is active otherwise, FALSE *************************************************************************/ BOOL isAnyCleaningModeInletWaterConditionActive( void ) @@ -348,8 +347,8 @@ * @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 + * @details \b Inputs: none + * @details \b Outputs: none * @return TRUE if transition to fault is required otherwise, FALSE *************************************************************************/ static BOOL isTransitionToFaultRequired( void ) @@ -386,8 +385,8 @@ * The testClearAllAlarms function clears all active alarms, even if they * are non-recoverable or faults. The caller of this function must provide * the correct 32-bit key. A Dialin user must also be logged into DG. - * @details Inputs: none - * @details Outputs: alarmIsActive[], alarmStartedAt[] + * @details \b Inputs: none + * @details \b Outputs: alarmIsActive[], alarmStartedAt[] * @param key 32-bit supervisor alarm key required to perform this function * @return TRUE if override reset successful, FALSE if not *************************************************************************/ @@ -427,8 +426,8 @@ * @brief * The testSetAlarmInfoPublishIntervalOverride function sets the override of the * alarm information publication interval. - * @details Inputs: none - * @details Outputs: alarmInfoPublishInterval + * @details \b Inputs: none + * @details \b Outputs: alarmInfoPublishInterval * @param ms milliseconds between alarm info broadcasts * @return TRUE if override set successful, FALSE if not *************************************************************************/ @@ -452,8 +451,8 @@ * @brief * The testResetAlarmInfoPublishIntervalOverride function resets the override of the * alarm information publication interval. - * @details Inputs: none - * @details Outputs: alarmInfoPublishInterval + * @details \b Inputs: none + * @details \b Outputs: alarmInfoPublishInterval * @return TRUE if override reset successful, FALSE if not *************************************************************************/ BOOL testResetAlarmInfoPublishIntervalOverride( void )