Index: dialin/common/msg_defs.py =================================================================== diff -u -r8c066d92317217d5ae5e3993609a804930f7531a -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/common/msg_defs.py (.../msg_defs.py) (revision 8c066d92317217d5ae5e3993609a804930f7531a) +++ dialin/common/msg_defs.py (.../msg_defs.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -195,12 +195,17 @@ MSG_ID_HEAT_DISINFECT_PUBLISH_INTERVAL_OVERRIDE = 0xA021 # Heat disinfection data publish interval override request MSG_ID_DG_SOFTWARE_RESET_REQUEST = 0xA022 # DG reset request MSG_ID_DG_OPERATION_MODE_REQUEST = 0xA023 # DG operation mode request - MSG_ID_CONCENTRATE_PUMP_TARGET_SPEED_OVERRIDE = 0xA024 # Concentrate pumps' target speed override request + MSG_ID_CONCENTRATE_PUMP_TARGET_SPEED_OVERRIDE = 0xA024 MSG_ID_UV_REACTORS_DATA_PUBLISH_INTERVAL_OVERRIDE = 0xA025 # UV reactors data publish interval override MSG_ID_CONCENTRATE_PUMP_STATE_CHANGE_REQUEST = 0xA026 # Concentrate pumps' state change request (on / off) MSG_ID_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE = 0xA027 # Concentrate pumps' data publish interval override request - MSG_ID_DG_START_STOP_UV_REACTORS_OVERRIDE = 0xA028 # DG start/stop UV reactors override request + MSG_ID_DG_START_STOP_INLET_UV_REACTOR = 0xA028 # DG start/stop inlet UV reactor MSG_ID_DG_REQUEST_CALIBRATION_DATA = 0xA029 # Requests calibration data from DG + MSG_ID_DG_FANS_DATA_PUBLISH_OVERRIDE = 0xA02A # Fans data publish interval override request + MSG_ID_DG_START_STOP_OUTLET_UV_REACTOR = 0xA02B # DG start/stop outlet UV reactor + MSG_ID_DG_UV_REACTORS_HEALTH_OVERRIDE = 0xA02C # DG UV reactors health override request + MSG_ID_DG_THERMISTORS_DATA_PUBLISH_INTERVAL_OVERRIDE = 0xA02D # DG thermistors data publish interval override + MSG_ID_DG_THERMISTORS_VALUE_OVERRIDE = 0xA02E # DG thermistors value override MSG_ID_HD_DEBUG_EVENT = 0xFFF1 # HD debug event text to be logged in event log MSG_ID_DG_DEBUG_EVENT = 0xFFF2 # DG debug event text to be logged in event log Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -r812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3 -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -26,6 +26,10 @@ from .heaters import Heaters from .temperature_sensors import TemperatureSensors from .conductivity_sensors import ConductivitySensors +from .heat_disinfection import HeatDisinfection +from .thermistors import Thermistors +from .fans import Fans +from .uv_reactors import UVReactors from .concentrate_pumps import ConcentratePumps from ..utils.conversions import integer_to_bytearray from ..protocols.CAN import (DenaliCanMessenger, DenaliMessage, DenaliChannels) @@ -140,6 +144,10 @@ self.conductivity_sensors = ConductivitySensors(self.can_interface, self.logger) self.concentrate_pumps = ConcentratePumps(self.can_interface, self.logger) self.alarms = DGAlarms(self.can_interface, self.logger) + self.heat_disinfect = HeatDisinfection(self.can_interface, self.logger) + self.thermistors = Thermistors(self.can_interface, self.logger) + self.fans = Fans(self.can_interface, self.logger) + self.uv_reactors = UVReactors(self.can_interface, self.logger) def get_version(self): """ Index: dialin/dg/drain_pump.py =================================================================== diff -u -r812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3 -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/dg/drain_pump.py (.../drain_pump.py) (revision 812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3) +++ dialin/dg/drain_pump.py (.../drain_pump.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -17,17 +17,41 @@ from ..utils.conversions import integer_to_bytearray from ..common.msg_defs import MsgIds, MsgFieldPositions from .constants import RESET, NO_RESET -from ..protocols.CAN import (DenaliMessage, - DenaliChannels) +from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish from logging import Logger +import enum +class DrainPumpStates(enum.Enum): + DRAIN_PUMP_OFF_STATE = 0 + DRAIN_PUMP_CONTROL_TO_TARGET_STATE = 1 + DRAIN_PUMP_OPEN_LOOP_STATE = 2 + + @classmethod + def has_value(cls, value): + return value in cls._value2member_map_ + class DGDrainPump(_AbstractSubSystem): """ Dialysate Generator (DG) Dialin API sub-class for drain pump related commands. """ + # Drain pump message IDs + MSG_ID_DG_DRAIN_PUMP_PUBLISHED_DATA = 0x0024 + MSG_ID_DG_DRAIN_PUMP_SET_SPEED_OVERRIDE = 0xA00B + MSG_ID_DG_DRAIN_PUMP_BROADAST_INTERVAL_OVERRIDE = 0xA00C + + # Drain pump broadcast message field positions + START_POS_SET_SPD = DenaliMessage.PAYLOAD_START_INDEX + END_POS_SET_SPD = START_POS_SET_SPD + 4 + START_POS_DAC = END_POS_SET_SPD + END_POS_DAC = START_POS_DAC + 4 + START_POS_PRESS_DIFF = END_POS_DAC + END_POS_PRESS_DIFF = START_POS_PRESS_DIFF + 4 + START_POS_PUMP_STATE = END_POS_PRESS_DIFF + END_POS_PUMP_STATE = START_POS_PUMP_STATE + 4 + def __init__(self, can_interface, logger: Logger): """ DGDrainPump constructor @@ -43,16 +67,18 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_drain_pump_sync) - self.target_drain_pump_speed_RPM = 0 + self.target_drain_pump_RPM = 0 self.dac_value = 0 + self.pressure_difference = 0 + self.drain_pump_state = 0 def get_target_drain_pump_speed(self): """ Gets the target drain pump speed @return: The target drain pump speed (RPM) """ - return self.target_drain_pump_speed_RPM + return self.target_drain_pump_RPM def get_dac_value(self): """ @@ -61,7 +87,7 @@ """ return self.dac_value - @_publish(["target_drain_pump_speed_RPM", "dac_value"]) + @_publish(["target_drain_pump_RPM", "dac_value", "pressure_difference", "drain_pump_state"]) def _handler_drain_pump_sync(self, message): """ Handles published drain pump data messages. Drain pump data are captured @@ -72,12 +98,18 @@ """ tgt = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) + message['message'][self.START_POS_SET_SPD:self.END_POS_SET_SPD]))[0] dac = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) + message['message'][self.START_POS_DAC:self.END_POS_DAC]))[0] + diff = struct.unpack('f', bytearray( + message['message'][self.START_POS_PRESS_DIFF:self.END_POS_PRESS_DIFF]))[0] + state = struct.unpack('i', bytearray( + message['message'][self.START_POS_PUMP_STATE:self.END_POS_PUMP_STATE]))[0] - self.target_drain_pump_speed_RPM = tgt[0] - self.dac_value = dac[0] + self.target_drain_pump_RPM = tgt + self.dac_value = dac + self.pressure_difference = diff + self.drain_pump_state = state def cmd_drain_pump_speed_set_point_override(self, speed, reset=NO_RESET): """ Index: dialin/dg/hd_proxy.py =================================================================== diff -u -r3a4a3ca071c818acd40918e5d7a2400461e7cedb -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 3a4a3ca071c818acd40918e5d7a2400461e7cedb) +++ dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -27,6 +27,12 @@ \brief Dialysate Generator (DG) Dialin API sub-class for HD proxy commands. """ + # Pressure/Occlusion message IDs + MSG_ID_HD_SWITCH_RESERVOIRS_CMD = 0x0021 + MSG_ID_HD_FILL_CMD = 0x0022 + MSG_ID_HD_DRAIN_CMD = 0x0023 + MSG_ID_HD_START_STOP_DG_CMD = 0x0026 + MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER = 0x002B # Reservoir IDs RESERVOIR1 = 0 Index: dialin/dg/ro_pump.py =================================================================== diff -u -r812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3 -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/dg/ro_pump.py (.../ro_pump.py) (revision 812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3) +++ dialin/dg/ro_pump.py (.../ro_pump.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -17,22 +17,47 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray from ..common.msg_defs import MsgIds, MsgFieldPositions from .constants import RESET, NO_RESET -from ..protocols.CAN import (DenaliMessage, - DenaliChannels) +from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish from logging import Logger +import enum +class ROPumpStates(enum.Enum): + RO_PUMP_OFF_STATE = 0 + RO_PUMP_RAMP_UP_STATE = 1 + RO_PUMP_VERIFY_FLOW_STATE = 2 + RO_PUMP_CONTROL_TO_TARGET_STATE = 3 + RO_PUMP_OPEN_LOOP_STATE = 4 + + @classmethod + def has_value(cls, value): + return value in cls._value2member_map_ + + class DGROPump(_AbstractSubSystem): """ DGROPump Dialysate Generator (DG) Dialin API sub-class for RO pump related commands. """ - #Enums - RAMP_UP_STATE = 0 + # RO pump message IDs + MSG_ID_DG_RO_PUMP_PUBLISHED_DATA = 0x1F + MSG_ID_DG_RO_PUMP_PRESSURE_SET_PT_OVERRIDE = 0xA008 + #MSG_ID_DG_RO_FLOW_RATE_OVERRIDE = 0xA009 + MSG_ID_DG_RO_PUMP_BROADCAST_INTERVAL_OVERRIDE = 0xA00A + MSG_ID_RO_PUMP_SET_PT_OVERRIDE = 0xA008 + # RO pump broadcast message field positions + START_POS_PRES_SET_PT = DenaliMessage.PAYLOAD_START_INDEX + END_POS_PRES_SET_PT = START_POS_PRES_SET_PT + 4 + START_POS_MEAS_FLOW = END_POS_PRES_SET_PT + END_POS_MEAS_FLOW = START_POS_MEAS_FLOW + 4 + START_POS_PWM = END_POS_MEAS_FLOW + END_POS_PWM = START_POS_PWM + 4 + START_POS_STATE = END_POS_PWM + END_POS_STATE = START_POS_STATE + 4 def __init__(self, can_interface, logger: Logger): """ @@ -45,11 +70,11 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id + msg_id = MsgIds.MSG_ID_RO_PUMP_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, msg_id, - self._handler_ro_pump_sync) + self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_ro_pump_sync) - self.target_pressure_psi = 0 + self.target_pressure_psi = 0.0 self.measured_flow_rate_lpm = 0.0 self.pwm_duty_cycle_pct = 0.0 self.ro_pump_state = 0.0 @@ -75,48 +100,26 @@ """ return self.pwm_duty_cycle_pct - @_publish([ - "target_pressure_psi", - "measured_flow_rate_lpm", - "pwm_duty_cycle_pct", - "ro_pump_state" - ]) + @_publish(["target_pressure_psi", "measured_flow_rate_lpm", "pwm_duty_cycle_pct", "ro_pump_state"]) def _handler_ro_pump_sync(self, message): """ Handles published ro pump data messages. RO pump data are captured for reference. @param message: published RO pump data message + @return: None """ + tgt = struct.unpack('f', bytearray(message['message'][self.START_POS_PRES_SET_PT:self.END_POS_PRES_SET_PT]))[0] + flow = struct.unpack('f', bytearray(message['message'][self.START_POS_MEAS_FLOW:self.END_POS_MEAS_FLOW]))[0] + pwm = struct.unpack('f', bytearray(message['message'][self.START_POS_PWM:self.END_POS_PWM]))[0] + ro_state = struct.unpack('i', bytearray(message['message'][self.START_POS_STATE:self.END_POS_STATE]))[0] - tgt = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - flow = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - pwm = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) - ro_state = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) + self.target_pressure_psi = tgt + self.measured_flow_rate_lpm = flow + self.pwm_duty_cycle_pct = pwm + self.ro_pump_state = ROPumpStates(ro_state).name if ROPumpStates.has_value(ro_state) else 'State Unknown' - self.target_pressure_psi = tgt[0] - self.measured_flow_rate_lpm = flow[0] - self.pwm_duty_cycle_pct = pwm[0] - raw_ro_pump_state = ro_state[0] - - #self.ro_pump_state = self.ro_pump_states.get("RO_PUMP_OFF_STATE", -1) - - if raw_ro_pump_state == 0: - self.ro_pump_state = "RO_PUMP_OFF_STATE" - elif raw_ro_pump_state == 1: - self.ro_pump_state = "RO_PUMP_RAMP_UP_STATE" - elif raw_ro_pump_state == 2: - self.ro_pump_state = "RO_PUMP_VERIFY_FLOW_STATE" - elif raw_ro_pump_state == 3: - self.ro_pump_state = "RO_PUMP_CONTROL_TO_TARGET_STATE" - elif raw_ro_pump_state == 4: - self.ro_pump_state = "RO_PUMP_OPEN_LOOP_STATE" - def cmd_ro_pump_set_point_override(self, pressure, reset=NO_RESET): """ Constructs and sends the RO pump set point override command. @@ -237,4 +240,3 @@ else: self.logger.debug("Timeout!!!!") return False - Index: dialin/hd/alarms.py =================================================================== diff -u -r812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3 -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/hd/alarms.py (.../alarms.py) (revision 812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3) +++ dialin/hd/alarms.py (.../alarms.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -153,6 +153,14 @@ """ return self.alarms_flags + def get_alarm_ids(self): + """ + Returns a dictionary of the alarm short name and the corresponding id + + @return: OrderedDict of the alarm ids + """ + return self.ids + @_publish(["alarms_state", "alarm_top", "alarms_silence_expires_in", "alarms_escalates_in", "alarms_flags"]) def _handler_alarms_status_sync(self, message): """ Index: dialin/hd/blood_flow.py =================================================================== diff -u -r812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3 -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/hd/blood_flow.py (.../blood_flow.py) (revision 812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3) +++ dialin/hd/blood_flow.py (.../blood_flow.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -191,12 +191,14 @@ str_res = "reset back to normal" else: str_res = str(flow) + if mode == PUMP_CONTROL_MODE_OPEN_LOOP: str_mode = " (open loop): " else: str_mode = " (closed loop): " self.logger.debug( "Blood flow set point overridden to " + str_res + " mL/min" + str_mode + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] Index: dialin/hd/dialysate_inlet_flow.py =================================================================== diff -u -r812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3 -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/hd/dialysate_inlet_flow.py (.../dialysate_inlet_flow.py) (revision 812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3) +++ dialin/hd/dialysate_inlet_flow.py (.../dialysate_inlet_flow.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -196,12 +196,14 @@ str_res = "reset back to normal" else: str_res = str(flow) + if mode == PUMP_CONTROL_MODE_OPEN_LOOP: str_mode = " (open loop): " else: str_mode = " (closed loop): " self.logger.debug( "Dialysate flow set point overridden to " + str_res + " mL/min" + str_mode + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -r8c066d92317217d5ae5e3993609a804930f7531a -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 8c066d92317217d5ae5e3993609a804930f7531a) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -30,6 +30,7 @@ from ..protocols.CAN import (DenaliMessage, DenaliCanMessenger, DenaliChannels) + from ..utils.conversions import integer_to_bytearray from ..utils.base import _AbstractSubSystem, _publish, _LogManager from .constants import NO_RESET @@ -104,6 +105,7 @@ "DialysateFlowOffset":0.0} # Create command groups + self.accel = HDAccelerometer(self.can_interface, self.logger) self.air_trap = HDAirTrap(self.can_interface, self.logger) self.alarms = HDAlarms(self.can_interface, self.logger) Index: dialin/hd/treatment.py =================================================================== diff -u -r3a4a3ca071c818acd40918e5d7a2400461e7cedb -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/hd/treatment.py (.../treatment.py) (revision 3a4a3ca071c818acd40918e5d7a2400461e7cedb) +++ dialin/hd/treatment.py (.../treatment.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -20,8 +20,8 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray from ..common.msg_defs import MsgIds, MsgFieldPositions from logging import Logger +from ..utils.conversions import integer_to_bytearray, float_to_bytearray - class HDTreatment(_AbstractSubSystem): """ @@ -913,3 +913,4 @@ else: self.logger.debug("Timeout!!!!") return False + Index: dialin/hd/ui_proxy.py =================================================================== diff -u -r18cb5700a5a453ebe26d51c1ef742085deec139d -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision 18cb5700a5a453ebe26d51c1ef742085deec139d) +++ dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -133,6 +133,7 @@ # initialize variables that will be populated by HD version response self.hd_version = None self.fpga_version = None + # initialize treatment parameters that are seen from UI or that Dialin user sets self.treatment_parameters = [0.0] * self.TreatmentParameters.NUM_OF_TREATMENT_PARAMS.value # initialize variables that will be populated by treatment parameters response message @@ -796,6 +797,48 @@ "min_dialysate_flow_rate_ml_min", "max_dialysate_flow_rate_ml_min" ]) + def _handler_treatment_param_settings(self, message): + """ + Handler for response from HD regarding validation of treatment parameters. + + @param message: response message from HD regarding validity of provided treatment parameters.\n + U32 Minimum treatment duration setting (in min.). \n + U32 Maximum treatment duration setting (in min.). \n + F32 Minimum ultrafiltration volume (in mL). \n + F32 Maximum ultrafiltration volume (in mL). \n + U32 Minimum dialysate flow rate (in mL/min). \n + U32 Maximum dialysate flow rate (in mL/min). + + @return: none + """ + mintime = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) + maxtime = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) + minufvol = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) + maxufvol = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) + mindialrt = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) + maxdialrt = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) + + self.min_treatment_duration_min = mintime[0] + self.max_treatment_duration_min = maxtime[0] + self.min_uf_volume_ml = minufvol[0] + self.max_uf_volume_ml = maxufvol[0] + self.min_dialysate_flow_rate_ml_min = mindialrt[0] + self.max_dialysate_flow_rate_ml_min = maxdialrt[0] + + @_publish([ + "min_treatment_duration_min", + "max_treatment_duration_min", + "min_uf_volume_ml", + "max_uf_volume_ml", + "min_dialysate_flow_rate_ml_min", + "max_dialysate_flow_rate_ml_min" + ]) def _handler_treatment_param_ranges(self, message): """ Handler for response from HD regarding valid treatment parameter ranges. @@ -1146,6 +1189,7 @@ self.can_interface.send(message, 0) def cmd_ui_blood_and_dialysate_flow_settings_change_request(self, blood_flow, dial_flow): + """ Constructs and sends a ui blood & dialysate flow settings change request by user message @@ -1158,6 +1202,7 @@ bld = integer_to_bytearray(blood_flow) dial = integer_to_bytearray(dial_flow) payload = bld + dial + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, message_id=MsgIds.MSG_ID_USER_BLOOD_DIAL_RATE_CHANGE_REQUEST.value, payload=payload) @@ -1167,6 +1212,7 @@ self.can_interface.send(message, 0) def cmd_ui_start_treatment_request(self, cmnd=START_TREATMENT_CMD_INITIATE_TREATMENT_WORKFLOW): + """ Constructs and sends a ui start treatment command message Constraints: @@ -1350,5 +1396,4 @@ payload=payload) self.logger.debug("Sending request to " + str + " a saline bolus.") - - self.can_interface.send(message, 0) \ No newline at end of file + self.can_interface.send(message, 0) Index: dialin/squish/denaliMessages.py =================================================================== diff -u -rfbe3580dfcda2338d9fa33d09bee85099ea7b801 -r363867c876456821000c189f86fbb55b4d583c50 --- dialin/squish/denaliMessages.py (.../denaliMessages.py) (revision fbe3580dfcda2338d9fa33d09bee85099ea7b801) +++ dialin/squish/denaliMessages.py (.../denaliMessages.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -15,7 +15,6 @@ # ############################################################################ - import time import subprocess Index: tests/dg_heat_disinfect_test.py =================================================================== diff -u -r6b7fe9b82f599b521d8e5d53922bc59841acd899 -r363867c876456821000c189f86fbb55b4d583c50 --- tests/dg_heat_disinfect_test.py (.../dg_heat_disinfect_test.py) (revision 6b7fe9b82f599b521d8e5d53922bc59841acd899) +++ tests/dg_heat_disinfect_test.py (.../dg_heat_disinfect_test.py) (revision 363867c876456821000c189f86fbb55b4d583c50) @@ -7,7 +7,6 @@ from dialin.dg.heat_disinfection import HeatDisinfectionInternalStates from dialin.dg.drain_pump import DrainPumpStates from dialin.dg.thermistors import Thermistors -from dialin.dg.uv_reactors import UVReactors from dialin.dg.uv_reactors import ReactorsStates from time import sleep