/************************************************************************** * * Copyright (c) 2024-2024 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 AlarmMgmtTD.h * * @author (last) Sean * @date (last) 30-Jul-2024 * * @author (original) Sean * @date (original) 30-Jul-2024 * ***************************************************************************/ #ifndef __ALARM_MGMT_TD_H__ #define __ALARM_MGMT_TD_H__ #include "TDCommon.h" #include "AlarmDefs.h" #include "AlarmAudio.h" #include "AlarmLamp.h" #include "AlarmMgmtSWFaults.h" #include "TestSupport.h" /** * @defgroup AlarmManagementTD AlarmManagementTD * @brief Alarm Management service unit for TD firmware. Provides alarm * management functionality including support functions for triggering * and clearing specific alarms. * * @addtogroup AlarmManagementTD * @{ */ #define ALARM_LAMP_AND_AUDIO_CONTROL_INTERVAL_MS 250 ///< Interval (in ms) at which alarm lamp and audio control will be executed. #define MAX_ALARM_LIST_SIZE 10 ///< Maximum number of active alarms inside alarm list. /// 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) 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 noBloodRecirc; ///< No blood re-circulation allowed at this time BOOL noDialRecirc; ///< No dialysate re-circulation allowed at this time BOOL ok; ///< Display OK button instead of other options BOOL noMinimize; ///< Prevent user from minimizing the alarm window BOOL lampOn; ///< The alarm lamp is on BOOL unused; ///< Flag not used - available } COMP_ALARM_STATUS_T; #pragma pack(pop) /// Enumeration of alarm button blockers. typedef enum Alarm_Button_Blockers { ALARM_BUTTON_TABLE_BLOCK_RESUME = 0, ///< Alarm table properties are blocking alarm resume button ALARM_BUTTON_TABLE_BLOCK_RINSEBACK, ///< Alarm table properties are blocking alarm rinseback button ALARM_BUTTON_TABLE_BLOCK_END_TREATMENT, ///< Alarm table properties are blocking alarm end treatment button ALARM_BUTTON_STATE_BLOCK_RESUME, ///< State properties are blocking alarm resume button ALARM_BUTTON_STATE_BLOCK_RINSEBACK, ///< State properties are blocking alarm rinseback button ALARM_BUTTON_STATE_BLOCK_END_TREATMENT, ///< State properties are blocking alarm end treatment button NUM_OF_ALARM_BUTTON_BLOCKERS ///< Number of alarm actions } ALARM_BUTTON_BLOCKER_T; #pragma pack(push, 1) /// 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) BOOL acPowerLost; ///< Has A/C power been lost? (T/F) U08 uiAlarmButtonBlocks[ NUM_OF_ALARM_BUTTON_BLOCKERS ]; ///< Flags indicating UI alarm buttons blocked by alarm table or state } ALARM_INFO_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 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) /// Alarm list request response payload record structure. typedef struct { BOOL accepted; ///< Accepted/Rejected. U32 rejectionReason; ///< Rejection reason if not accepted. U32 activeAlarmList[ MAX_ALARM_LIST_SIZE ]; ///< Active Alarm List array. } ACTIVE_ALARM_LIST_RESPONSE_PAYLOAD_T; // ********** public function prototypes ********** void initAlarmMgmtTD( void ); void execAlarmMgmt( void ); void clearAlarmTD( ALARM_ID_T alarm ); 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, BOOL outside ); void setAlarmUserActionEnabled( ALARM_USER_ACTION_T action, BOOL enabled ); void signalAlarmSilence( ALARM_SILENCE_CMD_T cmd ); void signalAlarmUserActionInitiated( ALARM_USER_ACTION_T action ); BOOL isAnyAlarmActive( void ); BOOL areAlarmsSilenced( void ); BOOL isBloodRecircBlocked( void ); BOOL isDialysateRecircBlocked( void ); BOOL doesAlarmStatusIndicateStop( void ); BOOL doesAlarmIndicateNoResume( void ); BOOL doesAlarmStatusIndicateEndTxOnly( void ); ALARM_PRIORITY_T getCurrentAlarmStatePriority( void ); BOOL handleAlarmTriggered( MESSAGE_T *message ); BOOL handleAlarmConditionCleared( MESSAGE_T *message ); BOOL handleAlarmUserAction( MESSAGE_T *message ); BOOL handleActiveAlarmListRequest( MESSAGE_T *message ); void handleResendActiveAlarmsRequest( void ); void handleAutoResumeAlarm( ALARM_ID_T alarm ); BOOL testSetAlarmStartTimeOverride( MESSAGE_T *message ); BOOL testClearAllAlarms( MESSAGE_T *message ); BOOL testAlarmStatusPublishIntervalOverride( MESSAGE_T *message ); BOOL testAlarmInfoPublishIntervalOverride( MESSAGE_T *message ); /**@}*/ #endif