Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r5b6e7cedbfced5d5ceff8d49fca6aacd04d7e037 -r44a100f8e5210a02c23b8fcc4527d8e96d577381 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 5b6e7cedbfced5d5ceff8d49fca6aacd04d7e037) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 44a100f8e5210a02c23b8fcc4527d8e96d577381) @@ -32,7 +32,8 @@ // ********** public definitions ********** -#include "AlarmDefs.h" +#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 @@ -51,7 +52,7 @@ 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 @@ -63,7 +64,7 @@ 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 topAlarmConditionnDetected; ///< Condition for top alarm is still being detected + 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 @@ -73,6 +74,7 @@ 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; @@ -115,6 +117,17 @@ 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; + #pragma pack(pop) #pragma pack(push, 2) @@ -129,129 +142,6 @@ } ALARM_COMP_STATUS_PAYLOAD_T; #pragma pack(pop) -/// Listing of specific software faults for logging purposes. -typedef enum -{ - SW_FAULT_ID_NONE = 0, - SW_FAULT_ID_ALARM_LAMP_INVALID_PATTERN_REQUESTED, - SW_FAULT_ID_ALARM_LAMP_INVALID_SELF_TEST_STATE, - SW_FAULT_ID_BLOOD_FLOW_SET_TOO_HIGH, - SW_FAULT_ID_BLOOD_FLOW_INVALID_BLOOD_PUMP_STATE, - SW_FAULT_ID_BLOOD_FLOW_INVALID_BLOOD_PUMP_DIRECTION, // 5 - SW_FAULT_ID_BUTTONS_INVALID_SELF_TEST_STATE, - SW_FAULT_ID_BUTTONS_STOP_BUTTON_NOT_CONSUMED, - SW_FAULT_ID_INT_ADC_DATA_OVERRUN, - SW_FAULT_ID_INT_ADC_INVALID_CHANNEL_REQUESTED, - SW_FAULT_ID_MODE_INIT_POST_INVALID_POST_STATE, // 10 - SW_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, - SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, - SW_FAULT_ID_OP_MODES_INVALID_MODE_REQUESTED, - SW_FAULT_ID_OP_MODES_INVALID_MODE_TO_TRANSITION_TO, - SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE, // 15 - SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_CLEAR, - SW_FAULT_ID_ALARM_MGMT_LAMP_INVALID_ALARM_STATE, - SW_FAULT_ID_COMM_BUFFERS_ADD_TOO_MUCH_DATA, - SW_FAULT_ID_COMM_BUFFERS_ADD_INVALID_BUFFER, - SW_FAULT_ID_COMM_BUFFERS_GET_INVALID_BUFFER, // 20 - SW_FAULT_ID_COMM_BUFFERS_PEEK_INVALID_BUFFER, - SW_FAULT_ID_COMM_BUFFERS_COUNT_INVALID_BUFFER, - SW_FAULT_ID_FPGA_INVALID_IN_STATE, - SW_FAULT_ID_FPGA_INVALID_OUT_STATE, - SW_FAULT_ID_FPGA_WRITE_CMD_TOO_MUCH_DATA, // 25 - SW_FAULT_ID_FPGA_WRITE_RSP_TOO_MUCH_DATA, - SW_FAULT_ID_FPGA_READ_CMD_TOO_MUCH_DATA, - SW_FAULT_ID_FPGA_READ_RSP_TOO_MUCH_DATA, - SW_FAULT_ID_MSG_QUEUES_ADD_QUEUE_FULL, - SW_FAULT_ID_MSG_QUEUES_ADD_INVALID_QUEUE, // 30 - SW_FAULT_ID_MSG_QUEUES_GET_INVALID_QUEUE, - SW_FAULT_ID_MSG_QUEUES_IS_EMPTY_INVALID_QUEUE, - SW_FAULT_ID_MSG_QUEUES_IS_FULL_INVALID_QUEUE, - SW_FAULT_ID_WATCHDOG_INVALID_SELF_TEST_STATE, - SW_FAULT_ID_ALARM_MGMT_INVALID_FIFO_TO_RESET, // 35 - SW_FAULT_ID_DIAL_IN_FLOW_INVALID_DIAL_IN_PUMP_DIRECTION, - SW_FAULT_ID_DIAL_IN_FLOW_INVALID_DIAL_IN_PUMP_STATE, - SW_FAULT_ID_DIAL_IN_FLOW_SET_TOO_HIGH, - SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_DIRECTION, - SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_STATE, // 40 - SW_FAULT_ID_DIAL_OUT_FLOW_SET_TOO_HIGH, - SW_FAULT_ID_ALARM_MGMT_AUDIO_INVALID_ALARM_STATE, - SW_FAULT_ID_FPGA_INVALID_ALARM_AUDIO_PARAM, - SW_FAULT_ID_RTC_EXEC_INVALID_STATE, - SW_FAULT_ID_RTC_SELF_TEST_INVALID_STATE, // 45 - SW_FAULT_ID_RTC_TRANSACTION_SERVICE_INVALID_STATE, - SW_FAULT_ID_PRES_OCCL_INVALID_STATE, - SW_FAULT_ID_OP_MODES_INVALID_MODE_TO_SIGNAL_ACTION, - SW_FAULT_ID_ALARM_MGMT_INVALID_USER_ACTION, - SW_FAULT_ID_MSG_PENDING_ACK_LIST_FULL, // 50 - SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER, - SW_FAULT_ID_PI_CTRL_INVALID_SIGNAL, - SW_FAULT_ID_MODE_TREATMENT_INVALID_ALARM_ACTION, - SW_FAULT_ID_MODE_PRE_TREATMENT_RESERVOIR_MGMT_INVALID_STATE, - SW_FAULT_ID_DIALYSIS_INVALID_STATE, // 55 - SW_FAULT_ID_DIALYSIS_INVALID_UF_STATE, - SW_FAULT_ID_NVDATAMGMT_INVALID_SELF_TEST_STATE, - SW_FAULT_ID_NVDATAMGMT_EXEC_INVALID_STATE, - SW_FAULT_ID_MODE_TREATMENT_INVALID_STATE, - SW_FAULT_ID_INTERRUPTS_INVALID_EDGE_DETECTED, // 60 - SW_FAULT_ID_INVALID_DG_PRESSURE_ID, - SW_FAULT_ID_CAN_PARITY_ERROR, - SW_FAULT_ID_CAN_PASSIVE_WARNING, - SW_FAULT_ID_CAN_OFF_ERROR, - SW_FAULT_ID_FPGA_UART_FRAME_ERROR, // 65 - SW_FAULT_ID_FPGA_UART_OVERRUN_ERROR, - SW_FAULT_ID_UTIL_TIME_WINDOWED_COUNT_ERROR, - SW_FAULT_ID_ACCEL_INVALID_STATE, - SW_FAULT_ID_ACCEL_GET_INVALID_AXIS, - SW_FAULT_ID_ACCEL_GET_MAX_INVALID_AXIS, // 70 - SW_FAULT_ID_ACCEL_INVALID_SELF_TEST_STATE, - SW_FAULT_ID_UTIL_INVALID_WIN_COUNT, - SW_FAULT_ID_UTIL_INVALID_WIN_MAX_COUNT, - SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_STATE, - SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_PARAM, // 75 - SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_SET_U32_PARAM, - SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_SET_S32_PARAM, - SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_SET_F32_PARAM, - SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_U32_PARAM, - SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_S32_PARAM, // 80 - SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_F32_PARAM, - SW_FAULT_ID_PERSISTENT_ALARM_INVALID_INDEX, - SW_FAULT_ID_HD_VALVES_INVALID_SELF_TEST_STATE, - SW_FAULT_ID_HD_VALVES_INVALID_EXEC_STATE, - SW_FAULT_ID_HD_VALVES_INVALID_VALVE_SELECTED, // 85 - SW_FAULT_ID_HD_VALVES_INVALID_AIR_TRAP_REQUEST, - SW_FAULT_ID_HD_VALVES_INVALID_CONTROL_MODE_SELECTED, - SW_FAULT_ID_HD_VAVLES_INVALID_POSITION_SELECTED, - SW_FAULT_ID_AIR_TRAP_INVALID_STATE, - SW_FAULT_ID_AIR_TRAP_INVALID_LEVEL_SENSOR, // 90 - SW_FAULT_ID_DIALYSIS_INVALID_SALINE_BOLUS_STATE, - SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, - SW_FAULT_ID_MODE_PRE_TREATMENT_PRIME_INVALID_STATE, - SW_FAULT_ID_SYSTEM_COMM_INVALID_FRAME_SIZE, - SW_FAULT_ID_SYSTEM_CMMM_CAN_TRANSMIT_REJECTED, // 95 - SW_FAULT_ID_BLOOD_PRIME_INVALID_STATE, - SW_FAULT_ID_RINSEBACK_INVALID_STATE, - SW_FAULT_ID_TREATMENT_END_INVALID_STATE, - SW_FAULT_ID_TREATMENT_RECIRC_INVALID_STATE, - SW_FAULT_ID_TREATMENT_STOP_INVALID_STATE, // 100 - SW_FAULT_ID_MODE_PRIME_INVALID_ALARM_ACTION, - SW_FAULT_ID_INVALID_NVDATAMGMT_EXEC_CAL_STATE, - SW_FAULT_ID_HD_INVALID_NO_CARTRIDGE_SELF_TEST_STATE, - SW_FAULT_ID_HD_INVALID_DRY_SELF_TEST_STATE, - SW_FAULT_ID_HD_INVALID_WET_SELF_TEST_STATE, // 105 - SW_FAULT_ID_HD_INVALID_PRE_TREATMENT_RECIRC_STATE, - SW_FAULT_ID_HD_INVALID_COMMAND_RESPONSE_ID, - SW_FAULT_ID_HD_INVALID_RESERVOIR_ID, - SW_FAULT_ID_HD_INVALID_VALVE_SETTING_ID, - SW_FAULT_ID_HD_INVALID_BLOOD_LEAK_STATE, // 110 - SW_FAULT_ID_HD_SYRINGE_INVALID_BOLUS_CMD, - SW_FAULT_ID_HD_SYRINGE_INVALID_CONT_CMD, - SW_FAULT_ID_HD_SYRINGE_INVALID_VREF, - SW_FAULT_ID_HD_SYRINGE_INVALID_STATE, - SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE, // 115 - SW_FAULT_ID_POST_TREATMENT_RESERVOIR_MGMT_INVALID_STATE, - NUM_OF_SW_FAULT_IDS -} SW_FAULT_ID_T; - // ********** public function prototypes ********** void initAlarmMgmt( void ); @@ -271,13 +161,32 @@ BOOL doesAlarmStatusIndicateStop( void ); ALARM_PRIORITY_T getCurrentAlarmStatePriority( void ); BOOL isAlarmRecoverable( ALARM_ID_T alarm ); -void setAlarmAudioVolume( U32 volumeLevel ); +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 testClearAllAlarms( U32 key ); +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 ); /**@}*/