Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r9b76d1db3897adf5fec100526a8987d43483401e -r8c57a53173c14be72f6f24426632654551cfe8d0 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 9b76d1db3897adf5fec100526a8987d43483401e) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 8c57a53173c14be72f6f24426632654551cfe8d0) @@ -48,7 +48,7 @@ #define SUPERVISOR_ALARM_KEY 0xD2C3B4A5 ///< 32-bit key required for clear all alarms request. #define LOWEST_ALARM_SUB_RANK 999 ///< Lowest alarm sub-rank that can be set. -#define ALARM_BLOCKED_LIMIT_AC_RECOVERY 10 ///< Alarm rank limit, alarms at and above this limit are blocked by alarmStatus.alarmsBlockedTimer +#define ALARM_BLOCKED_LIMIT_AC_RECOVERY 0 ///< Alarm rank limit, alarms at and above this limit are blocked by alarmStatus.alarmsBlockedTimer (all alarms blocked == 0) #define ALARM_NOT_BLOCKED 0 ///< Alarm blocked timer value that indicates no alarm block // *** This declaration will cause a compiler error if ALARM_TABLE does not have same # of alarms as the Alarm_List enumeration. @@ -260,52 +260,43 @@ // Verify valid alarm index if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - // Block if new alarms are occur during loss of AC power - if ( ( TRUE == alarmIsActive[ ALARM_ID_HD_AC_POWER_LOST ] ) || ( TRUE == alarmIsActive[ ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT ] ) ) + // No need to do anything if alarm is already active, but if condition was cleared then re-trigger alarm + if ( ( FALSE == alarmIsActive[ alarm ] ) || + ( ( FALSE == alarmIsDetected[ alarm ] ) && ( FALSE == ALARM_TABLE[ alarm ].alarmConditionClearImmed ) ) ) { - alarmStatus.alarmsBlockedTimer = ALARM_BLOCK_COUNT_AFTER_AC_RETURN; - } - // if the block timer is 0 OR we have an unblockable alarm - if (( ALARM_NOT_BLOCKED == alarmStatus.alarmsBlockedTimer ) || ( ALARM_TABLE[ alarm ].alarmSubRank < ALARM_BLOCKED_LIMIT_AC_RECOVERY ) ) - { - // No need to do anything if alarm is already active, but if condition was cleared then re-trigger alarm - if ( ( FALSE == alarmIsActive[ alarm ] ) || - ( ( FALSE == alarmIsDetected[ alarm ] ) && ( FALSE == ALARM_TABLE[ alarm ].alarmConditionClearImmed ) ) ) + // If alarm status was that no alarms currently active, set this alarm as top alarm until status formally updated later + if ( ALARM_ID_NO_ALARM == alarmStatus.alarmTop ) { - // If alarm status was that no alarms currently active, set this alarm as top alarm until status formally updated later - if ( ALARM_ID_NO_ALARM == alarmStatus.alarmTop ) - { - alarmStatus.alarmTop = alarm; - } - // If alarm stops, set that status immediately (don't wait for status update function) - if ( TRUE == ALARM_TABLE[ alarm ].alarmStops ) - { - alarmStatus.stop = TRUE; - } - // If alarms silenced, end silence due to new alarm - alarmStatus.alarmsSilenced = FALSE; - // If alarm is a fault (and not in service mode), request transition to fault mode - if ( ( TRUE == ALARM_TABLE[ alarm ].alarmIsFault ) && ( getCurrentOperationMode() != MODE_SERV ) ) - { - requestNewOperationMode( MODE_FAUL ); - } - // Activate alarm - alarmIsActive[ alarm ] = TRUE; - alarmStartedAt[ alarm ].data = getMSTimerCount(); - alarmIsDetected[ alarm ] = TRUE; + alarmStatus.alarmTop = alarm; + } + // If alarm stops, set that status immediately (don't wait for status update function) + if ( TRUE == ALARM_TABLE[ alarm ].alarmStops ) + { + alarmStatus.stop = TRUE; + } + // If alarms silenced, end silence due to new alarm + alarmStatus.alarmsSilenced = FALSE; + // If alarm is a fault (and not in service mode), request transition to fault mode + if ( ( TRUE == ALARM_TABLE[ alarm ].alarmIsFault ) && ( getCurrentOperationMode() != MODE_SERV ) ) + { + requestNewOperationMode( MODE_FAUL ); + } + // Activate alarm + alarmIsActive[ alarm ] = TRUE; + alarmStartedAt[ alarm ].data = getMSTimerCount(); + alarmIsDetected[ alarm ] = TRUE; - // If alarm has clear condition immediately property, clear condition now - if ( TRUE == ALARM_TABLE[ alarm ].alarmConditionClearImmed ) - { - clearAlarmCondition( alarm ); - } - // If alarm has stop property, signal stop now - if ( TRUE == ALARM_TABLE[ alarm ].alarmStops ) - { - initiateAlarmAction( ALARM_ACTION_STOP ); - } + // If alarm has clear condition immediately property, clear condition now + if ( TRUE == ALARM_TABLE[ alarm ].alarmConditionClearImmed ) + { + clearAlarmCondition( alarm ); + } + // If alarm has stop property, signal stop now + if ( TRUE == ALARM_TABLE[ alarm ].alarmStops ) + { + initiateAlarmAction( ALARM_ACTION_STOP ); } - } + } } else { @@ -358,28 +349,45 @@ *************************************************************************/ void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2 ) { - // Broadcast alarm and data if alarm not already active - if ( FALSE == alarmIsActive[ alarm ] ) + // Verify valid alarm index + if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - ALARM_TRIGGERED_PAYLOAD_T data; + // Block if new alarms are occur during loss of AC power + if ( ( TRUE == alarmIsActive[ ALARM_ID_HD_AC_POWER_LOST ] ) || ( TRUE == alarmIsActive[ ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT ] ) ) + { + alarmStatus.alarmsBlockedTimer = ALARM_BLOCK_COUNT_AFTER_AC_RETURN; + } + // if the block timer is 0 OR we have an unblockable alarm + if (( ALARM_NOT_BLOCKED == alarmStatus.alarmsBlockedTimer ) || ( ALARM_TABLE[ alarm ].alarmSubRank < ALARM_BLOCKED_LIMIT_AC_RECOVERY ) ) + { + // Broadcast alarm and data if alarm not already active + if ( FALSE == alarmIsActive[ alarm ] ) + { + ALARM_TRIGGERED_PAYLOAD_T data; - data.alarm = (U32)alarm; - data.almDataType1 = (U32)alarmData1.dataType; - data.almData1 = alarmData1.data.uInt.data; - data.almDataType2 = (U32)alarmData2.dataType; - data.almData2 = alarmData2.data.uInt.data; - data.almPriority = ALARM_TABLE[ alarm ].alarmPriority; - data.almRank = ALARM_TABLE[ alarm ].alarmSubRank; - data.almClrTopOnly = ALARM_TABLE[ alarm ].alarmClearOnly; + data.alarm = (U32)alarm; + data.almDataType1 = (U32)alarmData1.dataType; + data.almData1 = alarmData1.data.uInt.data; + data.almDataType2 = (U32)alarmData2.dataType; + data.almData2 = alarmData2.data.uInt.data; + data.almPriority = ALARM_TABLE[ alarm ].alarmPriority; + data.almRank = ALARM_TABLE[ alarm ].alarmSubRank; + data.almClrTopOnly = ALARM_TABLE[ alarm ].alarmClearOnly; - broadcastData( MSG_ID_ALARM_TRIGGERED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_TRIGGERED_PAYLOAD_T ) ); - // Send information for UI to log to treatment log - if ( ( TRUE == ALARM_TABLE[ alarm ].alarmTreatmentLog ) && ( MODE_TREA == getCurrentOperationMode() ) ) - { - sendTreatmentLogAlarmEventData( alarm, alarmData1, alarmData2 ); - } + broadcastData( MSG_ID_ALARM_TRIGGERED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_TRIGGERED_PAYLOAD_T ) ); + // Send information for UI to log to treatment log + if ( ( TRUE == ALARM_TABLE[ alarm ].alarmTreatmentLog ) && ( MODE_TREA == getCurrentOperationMode() ) ) + { + sendTreatmentLogAlarmEventData( alarm, alarmData1, alarmData2 ); + } + } + activateAlarm( alarm ); + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE, alarm ) } - activateAlarm( alarm ); } /*********************************************************************//**