/************************************************************************** * * Copyright (c) 2019-2021 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file AlarmMgmt.h * * @author (last) Sean Nash * @date (last) 12-Nov-2021 * * @author (original) Sean Nash * @date (original) 07-Nov-2019 * ***************************************************************************/ #ifndef __ALARM_MGMT_H__ #define __ALARM_MGMT_H__ #include "HDCommon.h" /** * @defgroup AlarmManagement AlarmManagement * @brief Alarm Management service module. Provides general alarm management * functionality including support functions for triggering and clearing * specific alarms. * * @addtogroup AlarmManagement * @{ */ // ********** public definitions ********** #include "AlarmDefs.h" #include "AlarmMgmtSWFaults.h" /// Interval (in ms) at which alarm lamp and audio control will be executed. #define ALARM_LAMP_AND_AUDIO_CONTROL_INTERVAL_MS 250 #define MAX_ALARM_VOLUME_LEVEL 5 #define MAX_ALARM_VOLUME_ATTENUATION 4 #define MIN_ALARM_VOLUME_ATTENUATION 0 /// Enumeration of alarm actions. typedef enum Alarm_Actions { ALARM_ACTION_STOP = 0, ///< Alarm state requests HD in safe state (pumps stopped, heater off, valves in safe state) ALARM_ACTION_RESUME, ///< User selected resume from alarm recovery options ALARM_ACTION_RINSEBACK, ///< User selected rinseback from alarm recovery options ALARM_ACTION_END_TREATMENT, ///< User selected end treatment from alarm recovery options ALARM_ACTION_ACK, ///< User selected Ack from alarm recovery options NUMBER_OF_ALARM_ACTIONS ///< Number of alarm actions } ALARM_ACTION_T; #pragma pack(push, 4) /// Record structure for detailing the properties of the current composite alarm status. typedef struct { ALARM_PRIORITY_T alarmsState; ///< Current alarm priority level BOOL alarmsSilenced; ///< Alarms are currently silenced? U32 alarmsSilenceStart; ///< Time stamp for when alarms were silenced (ms) U32 alarmsSilenceExpiresIn; ///< Time until alarm silence expires (seconds) BOOL alarmsToEscalate; ///< Are any active alarms due to escalate (should UI show count down timer?) U32 alarmsEscalatesIn; ///< Time until alarm will escalate (seconds) ALARM_ID_T alarmTop; ///< ID of current top alarm that will drive lamp/audio and UI should be displaying right now BOOL topAlarmConditionDetected; ///< Condition for top alarm is still being detected BOOL systemFault; ///< A system fault is active? BOOL stop; ///< We should be in controlled stop right now BOOL noClear; ///< No recovery will be possible BOOL noResume; ///< Treatment may not be resumed at this time BOOL noRinseback; ///< Rinseback may not be initiated at this time BOOL noEndTreatment; ///< Ending the treatment is not an option at this time BOOL noNewTreatment; ///< No new treatments may be started even if current treatment is ended BOOL noDialRecirc; ///< No dialysate re-circulation allowed at this time BOOL usrACKRequired; ///< The user must acknowledge top alarm BOOL noMinimize; ///< Prevent user from minimizing the alarm window BOOL lampOn; ///< The alarm lamp is on } COMP_ALARM_STATUS_T; /// Record structure for unsigned integer alarm data. typedef struct { U32 data; ///< Alarm data of unsigned integer type. } ALARM_DATA_U32_T; /// Record structure for signed integer alarm data. typedef struct { S32 data; ///< Alarm data of signed integer type. } ALARM_DATA_S32_T; /// Record structure for floating point alarm data. typedef struct { F32 data; ///< Alarm data of floating point type. } ALARM_DATA_F32_T; /// Record structure for boolean alarm data. typedef struct { BOOL data; ///< Alarm data of boolean type. } ALARM_DATA_BOOL_T; /// Record structure for alarm data of any supported type. typedef union { ALARM_DATA_U32_T uInt; ///< Alarm data of unsigned integer type. ALARM_DATA_S32_T sInt; ///< Alarm data of signed integer type. ALARM_DATA_F32_T flt; ///< Alarm data of floating point type. ALARM_DATA_BOOL_T bln; ///< Alarm data of boolean type. } ALARM_DATAS_T; /// Record structure for alarm data including the data type to aid in interpretation. typedef struct { ALARM_DATA_TYPES_T dataType; ///< The type of alarm data provided. ALARM_DATAS_T data; ///< The alarm data of specified type. } ALARM_DATA_T; /// Payload record structure for the alarm info message. typedef struct { U32 audioVolume; ///< Audio volume level (1..5) F32 audioCurrHG; ///< Primary alarm audio current - high gain (mA) F32 audioCurrLG; ///< Primary alarm audio current - low gain (mA) F32 backupAudioCurr; ///< Backup alarm audio current (mA) BOOL safetyShutdown; ///< Safety shutdown activated? (T/F) } ALARM_INFO_PAYLOAD_T; /// Payload record structure for the alarm triggered message. typedef struct { U32 alarm; ///< ID of alarm that was triggered U32 almDataType1; ///< Supporting data type #1 U32 almData1; ///< Supporting data #1 U32 almDataType2; ///< Supporting data type #2 U32 almData2; ///< Supporting data #2 } ALARM_TRIGGERED_PAYLOAD_T; #pragma pack(pop) #pragma pack(push, 2) /// Payload record structure for an alarm status message. typedef struct { U32 alarmState; ///< Alarm state: 0 = no alarms, 1 = low priority, 2 = medium priority, 3 = high priority U32 alarmTop; ///< ID of top active alarm U32 escalatesIn; ///< Top active alarm escalates in this many seconds U32 silenceExpiresIn; ///< Silencing of alarms expires in this many seconds U16 alarmsFlags; ///< Bit flags: 1 = true, 0 = false for each bit flag } ALARM_COMP_STATUS_PAYLOAD_T; #pragma pack(pop) // ********** public function prototypes ********** void initAlarmMgmt( void ); void execAlarmMgmt( void ); void activateAlarmNoData( ALARM_ID_T alarm ); void activateAlarm1Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData ); void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2 ); void clearAlarm( ALARM_ID_T alarm ); void clearAlarmCondition( ALARM_ID_T alarm ); void setAlarmUserActionEnabled( ALARM_USER_ACTION_T action, BOOL enabled ); void signalAlarmSilence( ALARM_SILENCE_CMD_T cmd ); void signalAlarmUserActionInitiated( ALARM_USER_ACTION_T action ); BOOL isAlarmActive( ALARM_ID_T alarm ); BOOL isAnyAlarmActive( void ); BOOL isDialysateRecircBlocked( void ); BOOL doesAlarmStatusIndicateStop( void ); ALARM_PRIORITY_T getCurrentAlarmStatePriority( void ); BOOL isAlarmRecoverable( ALARM_ID_T alarm ); void setAlarmAudioVolume( U32 volumeLevel ); BOOL getNoNewTreatmentStatus( void ); void handleActiveAlarmListRequest( void ); U32 getAlarmAudioVolume( void ); F32 getAlarmAudioPrimaryHighGainCurrent( void ); F32 getAlarmAudioPrimaryLowGainCurrent( void ); F32 getAlarmAudioBackupCurrent( void ); SELF_TEST_STATUS_T execAlarmAudioSelfTest( void ); BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value ); BOOL testResetAlarmStateOverride( U32 alarmID ); BOOL testSetAlarmStartOverride( U32 alarmID, U32 value ); BOOL testResetAlarmStartOverride( U32 alarmID ); BOOL testClearAllAlarms( U32 key ); BOOL testSetAlarmStatusPublishIntervalOverride( U32 ms ); BOOL testResetAlarmStatusPublishIntervalOverride( void ); BOOL testSetAlarmInfoPublishIntervalOverride( U32 ms ); BOOL testResetAlarmInfoPublishIntervalOverride( void ); BOOL testSetAlarmAudioVolumeLevelOverride( U32 volume ); BOOL testResetAlarmAudioVolumeLevelOverride( void ); BOOL testSetPrimaryAlarmAudioCurrentHGOverride( F32 mA ); BOOL testResetPrimaryAlarmAudioCurrentHGOverride( void ); BOOL testSetPrimaryAlarmAudioCurrentLGOverride( F32 mA ); BOOL testResetPrimaryAlarmAudioCurrentLGOverride( void ); BOOL testSetBackupAlarmAudioCurrentOverride( F32 mA ); BOOL testResetBackupAlarmAudioCurrentOverride( void ); /**@}*/ #endif