Index: dialin/common/msg_ids.py =================================================================== diff -u -r6b8fcf58c046f2177d120544922c3f49449bb88f -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 6b8fcf58c046f2177d120544922c3f49449bb88f) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -8,9 +8,9 @@ # @file msg_ids.py # # @author (last) Peter Lucia -# @date (last) 21-May-2021 +# @date (last) 24-May-2021 # @author (original) Peter Lucia -# @date (original) 21-May-2021 +# @date (original) 24-May-2021 # ############################################################################ from enum import unique Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -r8a13a85045edfcf69bf0e728d294f04b924d732c -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 8a13a85045edfcf69bf0e728d294f04b924d732c) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -23,7 +23,6 @@ from .fans import Fans from .hd_proxy import DGHDProxy from .heaters import Heaters -from .heat_disinfect import HeatDisinfect from .load_cells import DGLoadCells from .pressures import DGPressures from .reservoirs import DGReservoirs @@ -44,6 +43,7 @@ from ..utils.base import _AbstractSubSystem, _publish, _LogManager from ..protocols.CAN import (DenaliCanMessenger, DenaliMessage, DenaliChannels) from ..common.msg_defs import MsgIds, MsgFieldPositions +from .flush import FlushMode class DG(_AbstractSubSystem): @@ -166,6 +166,7 @@ self.service_record = DGServiceNVRecord(self.can_interface, self.logger) self.scheduled_runs_record = DGScheduledRunsNVRecord(self.can_interface, self.logger) self.valves = DGValves(self.can_interface, self.logger) + self.flush = FlushMode(self.can_interface, self.logger) def get_version(self): """ Index: dialin/dg/fluid_leak.py =================================================================== diff -u -r8a13a85045edfcf69bf0e728d294f04b924d732c -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/dg/fluid_leak.py (.../fluid_leak.py) (revision 8a13a85045edfcf69bf0e728d294f04b924d732c) +++ dialin/dg/fluid_leak.py (.../fluid_leak.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -30,8 +30,8 @@ """ # Fluid leak detector state - FLUID_LEAK_DETECTED = 0 # Wet - NO_FLUID_LEAK_DETECTED = 1 # Dry + FLUID_LEAK_DETECTED_STATE = 0 # Wet + NO_FLUID_LEAK_DETECTED_STATE = 1 # Dry def __init__(self, can_interface, logger: Logger): """ @@ -48,7 +48,7 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_fluid_leak_sync) - self.fluid_leak_state = self.NO_FLUID_LEAK_DETECTED + self.fluid_leak_state = self.NO_FLUID_LEAK_DETECTED_STATE def get_fluid_leak_state(self): """ @@ -59,7 +59,7 @@ return self.fluid_leak_state @_publish(["fluid_leak_state"]) - def _handler_fluid_leak_sync(self, message): + def _handler_fluid_leak_sync(self, message: dict) -> None: """ Handles published fluid leak state messages. Fluid leak state is captured for reference. @@ -143,4 +143,4 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Timeout!!!!") - return False + return False \ No newline at end of file Index: dialin/dg/hd_proxy.py =================================================================== diff -u -r7d528c2109af39ed65e9dd3d61162de89ad22d96 -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 7d528c2109af39ed65e9dd3d61162de89ad22d96) +++ dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -39,19 +39,19 @@ self.can_interface = can_interface self.logger = logger - def cmd_switch_reservoirs(self, reservoirID=RESERVOIR1): + def cmd_switch_reservoirs(self, reservoirID: int = RESERVOIR1) -> int: """ Constructs and sends the switch reservoirs command. Constraints: DG must be in re-circulate mode. Given reservoirID must be in the reservoir list below. - @param reservoirID: unsigned int - reservoir to set as active (HD will draw from this reservoir). - @return: 1 if successful, zero otherwise - - \details Reservoir IDs: \n + Reservoir IDs: \n 0 = RESERVOIR 1 \n 1 = RESERVOIR 2 \n + + @param reservoirID: unsigned int - reservoir to set as active (HD will draw from this reservoir). + @return: 1 if successful, zero otherwise """ res = integer_to_bytearray(reservoirID) @@ -74,7 +74,7 @@ self.logger.debug("Timeout!!!!") return False - def cmd_fill(self, volume:int=1500, start:int=1) -> int: + def cmd_fill(self, volume: int = 1500, start: int = 1) -> int: """ Constructs and sends the fill command. Constraints: @@ -105,7 +105,7 @@ self.logger.debug("Timeout!!!!") return False - def cmd_drain(self, volume:int=200, tareLoadCell:bool=False) -> int: + def cmd_drain(self, volume: int = 200, tareLoadCell: bool = False) -> int: """ Constructs and sends the drain command. Constraints: @@ -138,7 +138,7 @@ self.logger.debug("Timeout!!!!") return False - def cmd_start_stop_dg(self, start:bool=True) -> int: + def cmd_start_stop_dg(self, start: bool = True) -> int: """ Constructs and sends the start/stop DG command Constraints: @@ -174,7 +174,7 @@ self.logger.debug("Timeout!!!!") return False - def cmd_start_stop_trimmer_heater(self, start:bool=True) -> int: + def cmd_start_stop_trimmer_heater(self, start: bool = True) -> int: """ Constructs and sends the start/stop DG trimmer heater command @@ -207,7 +207,7 @@ self.logger.debug("Timeout!!!!") return False - def cmd_stop_primary_heater(self): + def cmd_stop_primary_heater(self) -> None: """ Constructs and sends stop heat disinfect command @@ -221,7 +221,7 @@ self.logger.debug("Stopping heat disinfection process") self.can_interface.send(message, 0) - def cmd_sample_water(self, cmd:int) -> None: + def cmd_sample_water(self, cmd: int) -> None: """ Constructs and sends sample water command Index: dialin/dg/heat_disinfect.py =================================================================== diff -u -r01db18a18769df2048346f868412fc8a12631fc0 -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/dg/heat_disinfect.py (.../heat_disinfect.py) (revision 01db18a18769df2048346f868412fc8a12631fc0) +++ dialin/dg/heat_disinfect.py (.../heat_disinfect.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -104,5 +104,3 @@ self.r1_level = r1 self.r2_level = r2 - - Index: dialin/dg/heaters.py =================================================================== diff -u -rac32f68a7fa43d9631d35b07c554b6bcbea63937 -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/dg/heaters.py (.../heaters.py) (revision ac32f68a7fa43d9631d35b07c554b6bcbea63937) +++ dialin/dg/heaters.py (.../heaters.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -126,7 +126,7 @@ self.primary_heaters_target_temperature = primary_heaters_temp self.trimmer_heater_target_temperature = trimmer_heater_temp - def cmd_start_stop_primary_heater(self, state=HeatersStartStop.STOP.name): + def cmd_start_stop_primary_heater(self, state: int = HeatersStartStop.STOP.name) -> None: """ Constructs and sends a start/stop primary heater command Constraints: @@ -149,7 +149,7 @@ self.logger.debug(operation + " the Primary heater") self.can_interface.send(message, 0) - def cmd_start_stop_trimmer_heater(self, state=HeatersStartStop.STOP.name): + def cmd_start_stop_trimmer_heater(self, state: int = HeatersStartStop.STOP.name) -> None: """ Constructs and sends start trimmer heater command Constraints: @@ -172,7 +172,9 @@ self.logger.debug(operation + " the Primary heater") self.can_interface.send(message, 0) - def cmd_set_dialysate_target_temperature(self, primary_target_temp=37.0, trimmer_target_temp=38.0): + def cmd_set_dialysate_target_temperature(self, + primary_target_temp: float = 37.0, + trimmer_target_temp: float = 38.0) -> None: """ Constructs and sends primary and trimmer heater target temperature @@ -190,7 +192,7 @@ trimmer_target_temp)) self.can_interface.send(message, 0) - def cmd_heaters_broadcast_interval_override(self, ms, reset=NO_RESET): + def cmd_heaters_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends broadcast time interval. Constraints: Index: dialin/dg/ro_pump.py =================================================================== diff -u -r79b47911f0ea424cd8dc10c1e1f150b84d4dfa54 -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/dg/ro_pump.py (.../ro_pump.py) (revision 79b47911f0ea424cd8dc10c1e1f150b84d4dfa54) +++ dialin/dg/ro_pump.py (.../ro_pump.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -118,7 +118,7 @@ self.ro_pump_state = ROPumpStates(ro_state).name if ROPumpStates.has_value(ro_state) else 'State Unknown' self.target_flow_lpm = tgt_flow - def cmd_ro_pump_set_point_override(self, pressure, reset=NO_RESET): + def cmd_ro_pump_set_point_override(self, pressure: int, reset: int = NO_RESET) -> int: """ Constructs and sends the RO pump set point override command. Constraints: @@ -158,8 +158,15 @@ self.logger.debug("Timeout!!!!") return False - def cmd_ro_pump_duty_cycle_pct(self, duty): - # TODO add comments + def cmd_ro_pump_duty_cycle_pct(self, duty: float) -> int: + """ + Constructs and sends the set RO pump duty cycle message + Constraints: + Must be logged into DG. + + @param duty: integer - 1 percentage for duty cycle between 0 and 100 + @return: 1 if successful, zero otherwise + """ dc = float_to_bytearray(duty/100) payload = dc @@ -184,7 +191,7 @@ self.logger.debug("Timeout!!!!") return False - def cmd_ro_flow_rate_override(self, flow, reset=NO_RESET): + def cmd_ro_flow_rate_override(self, flow: float, reset: int = NO_RESET) -> int: """ Constructs and sends the RO rate override command. Constraints: @@ -224,7 +231,7 @@ self.logger.debug("Timeout!!!!") return False - def cmd_ro_pump_data_broadcast_interval_override(self, ms, reset=NO_RESET): + def cmd_ro_pump_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the RO pump set point override command Constraints: Index: dialin/dg/temperature_sensors.py =================================================================== diff -u -r8a13a85045edfcf69bf0e728d294f04b924d732c -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/dg/temperature_sensors.py (.../temperature_sensors.py) (revision 8a13a85045edfcf69bf0e728d294f04b924d732c) +++ dialin/dg/temperature_sensors.py (.../temperature_sensors.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -74,6 +74,13 @@ TemperatureSensorsNames.INTERNAL_TDI_RTD.name: {}, TemperatureSensorsNames.INTERNAL_COND_TEMP_SENSOR.name: {}} + self.primary_raw_thermo_couple = 0 + self.primary_raw_cold_junc = 0 + self.trimmer_raw_thermo_couple = 0 + self.trimmer_raw_cold_junc = 0 + self.conductivity_1_raw = 0 + self.conductivity_2_raw = 0 + if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id msg_id = MsgIds.MSG_ID_DG_TEMPERATURE_DATA.value @@ -89,7 +96,8 @@ """ return self.temperature_sensors[sensor] - @_publish(['temperature_sensors']) + @_publish(["temperature_sensors", "primary_raw_thermo_couple", "primary_raw_cold_junc", + "trimmer_raw_thermo_couple", "trimmer_raw_cold_junc", "conductivity_1_raw", "conductivity_2_raw"]) def _handler_temperature_sensors_sync(self, message): """ Handles published temperature sensors message @@ -169,6 +177,30 @@ message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] self.temperature_sensors[TemperatureSensorsNames.INTERNAL_COND_TEMP_SENSOR.name] = sensors_data + sensors_data = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19]))[0] + self.primary_raw_thermo_couple = sensors_data + + sensors_data = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20]))[0] + self.primary_raw_cold_junc = sensors_data + + sensors_data = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_21:MsgFieldPositions.END_POS_FIELD_21]))[0] + self.trimmer_raw_thermo_couple = sensors_data + + sensors_data = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_22:MsgFieldPositions.END_POS_FIELD_22]))[0] + self.trimmer_raw_cold_junc = sensors_data + + sensors_data = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_23:MsgFieldPositions.END_POS_FIELD_23]))[0] + self.conductivity_1_raw = sensors_data + + sensors_data = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_24:MsgFieldPositions.END_POS_FIELD_24]))[0] + self.conductivity_2_raw = sensors_data + def cmd_temperature_sensors_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends broadcast time interval. Index: dialin/dg/uv_reactors.py =================================================================== diff -u -r8a13a85045edfcf69bf0e728d294f04b924d732c -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/dg/uv_reactors.py (.../uv_reactors.py) (revision 8a13a85045edfcf69bf0e728d294f04b924d732c) +++ dialin/dg/uv_reactors.py (.../uv_reactors.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -92,13 +92,13 @@ @param message: published thermistors message @return: none """ - inlet_health = struct.unpack('f', bytearray( + inlet_health = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - outlet_health = struct.unpack('f', bytearray( + outlet_health = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - inlet_state = struct.unpack('f', bytearray( + inlet_state = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - outlet_state = struct.unpack('f', bytearray( + outlet_state = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] self.inlet_uv_reactor_health = inlet_health @@ -189,11 +189,13 @@ @param: state: (int) the state of the inlet UV reactor. 0 for Off (default) and 1 for On. @return: 1 if successful, zero otherwise """ + rst = integer_to_bytearray(0) + inlet_uv_reactor_index = integer_to_bytearray(0) if state == ReactorsStates.UV_REACTOR_STATE_ON.value: - payload = integer_to_bytearray(1) + payload = rst + integer_to_bytearray(1) + inlet_uv_reactor_index operation = 'Turning on ' else: - payload = integer_to_bytearray(0) + payload = rst + integer_to_bytearray(0) + inlet_uv_reactor_index operation = 'Turning off ' message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, Index: dialin/hd/fluid_leak.py =================================================================== diff -u -r38667968d909c5991b9cf2f6c4d9c10c17e7ea4f -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/hd/fluid_leak.py (.../fluid_leak.py) (revision 38667968d909c5991b9cf2f6c4d9c10c17e7ea4f) +++ dialin/hd/fluid_leak.py (.../fluid_leak.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -30,8 +30,8 @@ """ # Fluid leak detector state - FLUID_LEAK_DETECTED = 0 # Wet - NO_FLUID_LEAK_DETECTED = 1 # Dry + FLUID_LEAK_DETECTED_STATE = 0 # Wet + NO_FLUID_LEAK_DETECTED_STATE = 1 # Dry def __init__(self, can_interface, logger: Logger): """ @@ -48,7 +48,7 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_fluid_leak_sync) - self.fluid_leak_state = self.NO_FLUID_LEAK_DETECTED + self.fluid_leak_state = self.NO_FLUID_LEAK_DETECTED_STATE def get_fluid_leak_state(self): """ @@ -90,7 +90,7 @@ payload = rst + det message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=MsgIdsDialin.MSG_DIALIN_ID_HD_FLUID_LEAK_STATE_DETECTOR_OVERRIDE.value, + message_id=MsgIds.MSG_ID_HD_FLUID_LEAK_STATE_OVERRIDE.value, payload=payload) self.logger.debug("Override fluid leak detector state value") @@ -143,4 +143,4 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Timeout!!!!") - return False + return False \ No newline at end of file Index: dialin/hd/ui_proxy.py =================================================================== diff -u -r8467193f215e910947bc4d352d12f0884334e38a -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision 8467193f215e910947bc4d352d12f0884334e38a) +++ dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -1019,11 +1019,11 @@ if RequestRejectReasons.has_value(rea[0]): self.treatment_end_cmd_reject_reason = RequestRejectReasons(rea[0]) - def cmd_ui_checkin_with_hd(self) -> int: + def cmd_ui_checkin_with_hd(self) -> None: """ Constructs and sends the ui check-in message - @return: 0 + @return: None """ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, @@ -1033,8 +1033,6 @@ self.can_interface.send(message, 0) - return 0 - def cmd_ui_request_hd_version(self) -> None: """ Constructs and sends the ui request for version message @@ -1327,17 +1325,25 @@ self.can_interface.send(message, 0) - def cmd_ui_confirm_treatment_parameters(self) -> None: + def cmd_ui_confirm_treatment_parameters(self, cmd: int = 0) -> None: """ Constructs and sends a ui confirm treatment parameters message + Constraints: + Command must be one of the following: + REJECT = 0 (user rejects treatment parameters) + CONFIRM = 1 (uesr confirms treatment parameters) + @param cmd: (int) confirm treatment parameters command code + @return: None """ + payload = integer_to_bytearray(cmd) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=MsgIds.MSG_ID_UI_USER_CONFIRM_TREATMENT_PARAMS.value) + message_id=MsgIds.MSG_ID_UI_USER_CONFIRM_TREATMENT_PARAMS.value, + payload=payload) - self.logger.debug("Sending confirm treatment parameters messge.") + self.logger.debug("Sending confirm treatment parameters message.") self.can_interface.send(message, 0) Index: dialin/ui/hd_simulator.py =================================================================== diff -u -r6b8fcf58c046f2177d120544922c3f49449bb88f -r0514a69831286e4727429f57e046f71e73e78110 --- dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 6b8fcf58c046f2177d120544922c3f49449bb88f) +++ dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -360,17 +360,21 @@ self.can_interface.send(message, 0) - def cmd_send_hd_operation_mode(self, mode): + def cmd_send_hd_operation_mode(self, opMode, subMode): """ Broadcasts the current HD operation mode - @param: (int) mode + @param: (int) opMode + @param: (int) subMode @return: None """ - if not isinstance(mode, int): + if not isinstance(opMode, int): raise ValueError("Provided mode is not of type 'int'") + if not isinstance(subMode, int): + raise ValueError("Provided mode is not of type 'int'") - payload = integer_to_bytearray(mode) + payload = integer_to_bytearray(opMode) + payload += integer_to_bytearray(subMode) message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_HD_OP_MODE.value, @@ -702,7 +706,7 @@ :param dialysate_flow_rate: (int) Dialysate Flow Rate :return: None """ - + if not isinstance(accepted, int): accepted = int(accepted) if not isinstance(reason, int): @@ -1171,7 +1175,6 @@ self.can_interface.send(message, 0) - def cmd_send_treatment_adjust_pressures_limit_response(self, vAccepted, vReason, vArterialLow, vArterialHigh, vVenousLow, vVenousHigh): """ @@ -1461,3 +1464,273 @@ @return: (HDAlarmsSimulator) the alarms simulator """ return self.alarms_simulator + + def cmd_send_pre_treatment_state_data(self, + sub_mode, + water_sample_state, + consumables_self_test_state, + no_cartridge_self_test_state, + installation_state, + dry_self_test_state, + prime_state, + recirculate_state, + patient_connection_state): + """ + sends the broadcast message of the pre-treatment states + :param sub_mode : (U32) the main pre treatment state + :param water_sample_state : (U32) water sample state + :param consumables_self_test_state : (U32) consumables self test state + :param no_cartridge_self_test_state : (U32) no cartridge self-test state + :param installation_state : (U32) installation state + :param dry_self_test_state : (U32) dry self-test state + :param prime_state : (U32) prime state + :param recirculate_state : (U32) recirculate state + :param patient_connection_state : (U32) patient connection state + :return: + """ + payload = integer_to_bytearray(sub_mode) + payload += integer_to_bytearray(water_sample_state) + payload += integer_to_bytearray(consumables_self_test_state) + payload += integer_to_bytearray(no_cartridge_self_test_state) + payload += integer_to_bytearray(installation_state) + payload += integer_to_bytearray(dry_self_test_state) + payload += integer_to_bytearray(prime_state) + payload += integer_to_bytearray(recirculate_state) + payload += integer_to_bytearray(patient_connection_state) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, + message_id=MsgIds.MSG_ID_PRE_TREATMENT_STATE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_general_response(self, message_id, accepted, reason, fromHD = True): + """ + :param message_id: (int) the message id + :param accepted: (int) boolean accept/reject response + :param reason: (int) rejection reason + :return: none + """ + payload = integer_to_bytearray(accepted) + payload += integer_to_bytearray(reason) + + message = DenaliMessage.build_message(channel_id= DenaliChannels.hd_to_ui_ch_id if fromHD else DenaliChannels.dg_to_ui_ch_id, + message_id=message_id, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_general_progress_data(self, message_id, total, countdown, fromHD = True): + """ + send the pretreatment filter flush progress data + :param accepted: (U32) Total time in second + :param reason: (U32) count down time in second + :return: None + """ + payload = integer_to_bytearray(total) + payload += integer_to_bytearray(countdown) + + message = DenaliMessage.build_message(channel_id= DenaliChannels.hd_to_ui_ch_id if fromHD else DenaliChannels.dg_to_ui_ch_id, + message_id=message_id, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_pre_treatment_filter_flush_progress_data(self, total, countdown): + """ + send the pretreatment filter flush progress data + :param accepted: (U32) Total time in second + :param reason: (U32) count down time in second + :return: None + """ + payload = integer_to_bytearray(total) + payload += integer_to_bytearray(countdown) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_to_ui_ch_id, + message_id=MsgIds.MSG_ID_DG_FILTER_FLUSH_PROGRESS.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_pre_treatment_water_sample_response(self, accepted, reason ): + """ + send the pretreatment water sample response + :param accepted: (U32) accept or reject + :param reason: (U32) rejection reason + :return: None + """ + payload = integer_to_bytearray(accepted) + payload += integer_to_bytearray(reason) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_SAMPLE_WATER_CMD_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_pre_treatment_self_test_no_cartridge_progress_data(self, total, countdown): + """ + send the pretreatment no cartridge self-tests progress data + :param accepted: (U32) Total time in second + :param reason: (U32) count down time in second + :return: None + """ + payload = integer_to_bytearray(total) + payload += integer_to_bytearray(countdown) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_NO_CART_SELF_TEST_PROGRESS.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_pre_treatment_self_test_dry_progress_data(self, total, countdown): + """ + send the pretreatment dry self-tests progress data + :param accepted: (U32) Total time in second + :param reason: (U32) count down time in second + :return: None + """ + payload = integer_to_bytearray(total) + payload += integer_to_bytearray(countdown) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_DRY_SELF_TEST_PROGRESS.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_pre_treatment_disposables_prime_progress_data(self, timeout, countdown): + """ + Broadcasts the progress time data of pre-treatment disposables priming to the UI + :param timeout : (int) the total progress time timeout in seconds + :param countdown: (int) the remaining time in seconds + :return: None + """ + payload = bytearray() + payload += integer_to_bytearray(timeout) + payload += integer_to_bytearray(countdown) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, + message_id=MsgIds.MSG_ID_HD_PRIMING_STATUS_DATA.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_pre_treatment_prime_start_response(self, accepted, reason ): + """ + send the pretreatment prime start response + :param accepted: (U32) accept or reject + :param reason: (U32) rejection reason + :return: None + """ + payload = integer_to_bytearray(accepted) + payload += integer_to_bytearray(reason) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_START_PRIME_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_pre_treatment_continue_to_treament_response(self, accepted, reason ): + """ + send the pretreatment continue to treatment response + :param accepted: (U32) accept or reject + :param reason: (U32) rejection reason + :return: None + """ + payload = integer_to_bytearray(accepted) + payload += integer_to_bytearray(reason) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_START_TREATMENT_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_pre_treatment_patient_connection_confirm_response(self, accepted, reason ): + """ + send the pretreatment patient connection confirm response + :param accepted: (U32) accept or reject + :param reason: (U32) rejection reason + :return: None + """ + payload = integer_to_bytearray(accepted) + payload += integer_to_bytearray(reason) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_PATIENT_CONNECTION_CONFIRM_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_post_treatment_disposable_removal_confirm_response(self, accepted, reason ): + """ + send post treatment disposable removal confirm response + :param accepted: (U32) accept or reject + :param reason: (U32) rejection reason + :return: None + """ + payload = integer_to_bytearray(accepted) + payload += integer_to_bytearray(reason) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_DISPOSABLE_REMOVAL_CONFIRM_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_post_treatment_disposable_removal_confirm_response(self, accepted, reason ): + """ + send post treatment disposable removal confirm response + :param accepted: (U32) accept or reject + :param reason: (U32) rejection reason + :return: None + """ + payload = integer_to_bytearray(accepted) + payload += integer_to_bytearray(reason) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_DISPOSABLE_REMOVAL_CONFIRM_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_post_treatment_log_response(self, accepted, reason, parameters): + """ + send post treatment log response + :param accepted: (U32) accept or reject + :param reason: (U32) rejection reason + :param parameters: (array of values) + :return: None + """ + payload = integer_to_bytearray(accepted) + payload += integer_to_bytearray(reason) + for parameter in parameters: + payload += parameter + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, + message_id=MsgIds.MSG_ID_HD_TREATMENT_LOG_DATA_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_dg_disinfection_state(self, subMode, flushMode, heatMode, chemicalMode): + """ + Broadcasts the current DG disinfection mode + :param subMode (int): disinfect states + :param flushMode (int): flush states + :param heatMode (int): heat states + :param ChemicalMode (int): chemical states + :return: + """ + payload = integer_to_bytearray(subMode) + payload += integer_to_bytearray(flushMode) + payload += integer_to_bytearray(heatMode) + payload += integer_to_bytearray(chemicalMode) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_sync_broadcast_ch_id, + message_id=MsgIdsDialin.MSG_DIALIN_ID_HD_DISINFECT_STATE.value, + payload=payload) + self.can_interface.send(message, 0) \ No newline at end of file Index: tools/build_common_defs.py =================================================================== diff -u -rb6566527169163c6500c50891a501052288d7a7b -r0514a69831286e4727429f57e046f71e73e78110 --- tools/build_common_defs.py (.../build_common_defs.py) (revision b6566527169163c6500c50891a501052288d7a7b) +++ tools/build_common_defs.py (.../build_common_defs.py) (revision 0514a69831286e4727429f57e046f71e73e78110) @@ -71,7 +71,7 @@ print("Error reading in txt file: {0}".format(e)) return False - heapq.heapify(enums) + # TODO: match fw order current_time = datetime.now() code_header = \ @@ -103,8 +103,7 @@ # pop the enums from the min heap until its empty code = "" - while enums: - enum = heapq.heappop(enums) + for enum in enums: code += " {0} = {1}\n".format(enum[1], enum[0]) code_result += code