########################################################################### # # Copyright (c) 2020-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 test_alarms.py # # @author (last) Peter Lucia # @date (last) 02-Oct-2020 # @author (original) Peter Lucia # @date (original) 05-Jun-2020 # ############################################################################ import sys sys.path.append("..") from dialin.hd.hemodialysis_device import HD from dialin.utils.base import AbstractObserver from dialin.ui.hd_simulator import HDSimulator from dialin.common.alarm_defs import AlarmList from time import time, sleep class Observer(AbstractObserver): def __init__(self): pass def update(self, result): pass # Store the state def check_something(self): pass def test_disable_all_hd_alarms(): """ Disables all hd alarms \returns None """ hd = HD() if hd.cmd_log_in_to_hd(): hd.ui.cmd_ui_request_hd_version() sleep(0.5) print(f"Current HD version: {hd.ui.hd_version}") for desc, val in hd.alarms.ids.items(): hd.alarms.cmd_alarm_state_override(0, val) sleep(0.5) def test_hd_alarms(): """ Simulates all HD alarms \returns None """ hd = HD() alarm_faults = [ 'ALARM_ID_NO_ALARM', 'ALARM_ID_SOFTWARE_FAULT', 'ALARM_ID_STUCK_BUTTON_TEST_FAILED', 'ALARM_ID_FPGA_POST_TEST_FAILED', 'ALARM_ID_WATCHDOG_POST_TEST_FAILED', 'ALARM_ID_UI_COMM_POST_FAILED', 'ALARM_ID_WATCHDOG_EXPIRED', 'ALARM_ID_RTC_COMM_ERROR', 'ALARM_ID_DG_COMM_TIMEOUT', 'ALARM_ID_UI_COMM_TIMEOUT', 'ALARM_ID_COMM_TOO_MANY_BAD_CRCS', 'ALARM_ID_CAN_MESSAGE_NOT_ACKED', 'ALARM_ID_UF_RATE_TOO_HIGH_ERROR', 'ALARM_ID_UF_VOLUME_ACCURACY_ERROR', 'ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE', 'ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR', 'ALARM_ID_NVDATA_DISINFECTION_DATE_CRC_ERROR', 'ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR', 'ALARM_ID_RO_PUMP_OUT_PRESSURE_OUT_OF_RANGE', 'ALARM_ID_TEMPERATURE_SENSORS_OUT_OF_RANGE', 'ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT', 'ALARM_ID_VALVE_CONTROL_FAILURE' ] alarms_observer = Observer() hd.alarms.attach(alarms_observer) if hd.cmd_log_in_to_hd(): hd.ui.cmd_ui_request_hd_version() sleep(0.5) print(f"Current HD version: {hd.ui.hd_version}") for desc, val in hd.alarms.ids.items(): if desc in alarm_faults: print("Skipping {0}".format(desc)) continue print("Testing {0} = {1}".format(val.name, val.value)) success = hd.alarms.cmd_alarm_state_override(1, val.value) sleep(3) if not success: raise ValueError("Failed to activate alarm {0} = {1}".format(desc, val)) success = hd.alarms.cmd_alarm_state_override(0, val.value) if not success: raise ValueError("Failed to deactivate alarm {0} = {1}".format(desc, val)) sleep(2) def test_clear_alarms(): hd_sim = HDSimulator() hd_sim.alarms_simulator.cmd_send_clear_alarms() sleep(3) hd_sim.alarms_simulator.cmd_activate_alarm(alarm=AlarmList.ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK) sleep(3) hd_sim.alarms_simulator.cmd_send_clear_alarms() sleep(1) def test_repeated_alarm(): hd_sim = HDSimulator(log_level="DEBUG") hd_sim.alarms_simulator.cmd_send_clear_alarms() sleep(2) flags = hd_sim.alarms_simulator.cmd_make_alarm_flags(alarms_silenced=0, user_acknowledge=0) hd_sim.alarms_simulator.set_flags(flags) hd_sim.alarms_simulator.cmd_repeat_broadcast_alarm(alarm=AlarmList.ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK, state=1, timeout=20) def test_activate_alarm(): hd_sim = HDSimulator() hd_sim.alarms_simulator.cmd_send_clear_alarms() hd_sim.alarms_simulator.cmd_activate_alarm(alarm=AlarmList.ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK) if __name__ == '__main__': test_activate_alarm() # test_repeated_alarm()