Index: leahi_dialin/ui/td_messaging.py =================================================================== diff -u -rf4f77dba3569964287c7f479deb93b9c9b44e15d -r1805eef13be34b7e55465a88dee3de18a5955008 --- leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision f4f77dba3569964287c7f479deb93b9c9b44e15d) +++ leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision 1805eef13be34b7e55465a88dee3de18a5955008) @@ -25,7 +25,7 @@ def info(a1, a2): pass - self.can_interface = CAN.DenaliCanMessenger(can_interface=self.can_Channel, logger=fakeLogger() ) + self.can_interface = CAN.CanMessenger(can_interface=self.can_Channel, logger=fakeLogger() ) self.can_interface.start() if self.can_interface is not None: @@ -45,8 +45,8 @@ payload = conversions.integer_to_bytearray(op_mode ) payload += conversions.integer_to_bytearray(sub_mode) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_OP_MODE_DATA.value, payload=payload) @@ -65,8 +65,8 @@ payload = conversions.float_to_bytearray(board_temp) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_TEMPERATURE_DATA.value, payload=payload) @@ -110,21 +110,24 @@ payload += conversions.unsigned_integer_to_bytearray(H4_pres_flow ) payload += conversions.unsigned_integer_to_bytearray(H6_rot_hall_state ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_BLOOD_PUMP_DATA.value, payload=payload) self.can_interface.send(message, 0) def td_air_trap(self, - H17_state : int, - H16_state : int, - H17_raw_state : int, - H16_raw_state : int, - H13_state : int, - H20_State : int, - controlling : int): + H17State : int, + H16State : int, + H17RawState : int, + H16RawState : int, + H13State : int, + H20State : int, + IsAutoControlling : int, + AirTrapState : int, + AirPumpLowerPowerLevel : int, + AirPumpRaisePowerLevel : int): """ Broadcasts the current TD air trap data(Msg ID: 0x2A, 42) Args: @@ -141,16 +144,19 @@ raise ValueError("CAN Interface is not enabled") - payload = conversions.unsigned_integer_to_bytearray(H17_state ) - payload += conversions.unsigned_integer_to_bytearray(H16_state ) - payload += conversions.unsigned_integer_to_bytearray(H17_raw_state ) - payload += conversions.unsigned_integer_to_bytearray(H16_raw_state ) - payload += conversions.unsigned_integer_to_bytearray(H13_state ) - payload += conversions.unsigned_integer_to_bytearray(H20_State ) - payload += conversions.unsigned_integer_to_bytearray(controlling ) + payload = conversions.unsigned_integer_to_bytearray(H17State ) + payload += conversions.unsigned_integer_to_bytearray(H16State ) + payload += conversions.unsigned_integer_to_bytearray(H17RawState ) + payload += conversions.unsigned_integer_to_bytearray(H16RawState ) + payload += conversions.unsigned_integer_to_bytearray(H13State ) + payload += conversions.unsigned_integer_to_bytearray(H20State ) + payload += conversions.unsigned_integer_to_bytearray(IsAutoControlling ) + payload += conversions.unsigned_integer_to_bytearray(AirTrapState ) + payload += conversions.unsigned_integer_to_bytearray(AirPumpLowerPowerLevel ) + payload += conversions.unsigned_integer_to_bytearray(AirPumpRaisePowerLevel ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_AIR_TRAP_DATA.value, payload=payload) @@ -172,15 +178,18 @@ payload = conversions.unsigned_integer_to_bytearray(H18_status ) payload += conversions.unsigned_integer_to_bytearray(H18_state ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_BUBBLES_DATA.value, payload=payload) self.can_interface.send(message, 0) - def td_air_pump(self, H12_state : int, - H12_power : int): + def td_air_pump(self, H12_state : int, + H12_rpm : int, + H12_power : float, + H12_fpga_rpm : int, + H12_scalar_power : int): """ Broadcasts the current TD Air Pump data (Msg ID: 0x20, 32) Args: @@ -192,17 +201,23 @@ raise ValueError("CAN Interface is not enabled") - payload = conversions.unsigned_integer_to_bytearray(H12_state) - payload += conversions.unsigned_integer_to_bytearray(H12_power) + payload = conversions.unsigned_integer_to_bytearray(H12_state ) + payload += conversions.unsigned_integer_to_bytearray(H12_rpm ) + payload += conversions.float_to_bytearray (H12_power ) + payload += conversions.unsigned_integer_to_bytearray(H12_fpga_rpm ) + payload += conversions.unsigned_integer_to_bytearray(H12_scalar_power ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_AIR_PUMP_DATA.value, payload=payload) self.can_interface.send(message, 0) - def td_ejector(self, H5_state: int, H5_set_speed: float): + def td_ejector(self, H5_state: int, + H5_set_speed: float, + Retract_Opt_sensor: int, + Engage_Opt_sensor: int): """ Broadcasts the current TD Ejector data (Msg ID: 0x4E, 78) Args: @@ -213,12 +228,13 @@ if not self.can_enabled: raise ValueError("CAN Interface is not enabled") + payload = conversions.unsigned_integer_to_bytearray (H5_state ) + payload += conversions.float_to_bytearray (H5_set_speed ) + payload += conversions.unsigned_integer_to_bytearray (Retract_Opt_sensor ) + payload += conversions.unsigned_integer_to_bytearray (Engage_Opt_sensor ) - payload = conversions.unsigned_integer_to_bytearray(H5_state ) - payload += conversions.float_to_bytearray (H5_set_speed) - - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_EJECTOR_DATA.value, payload=payload) @@ -237,8 +253,8 @@ payload = conversions.unsigned_integer_to_bytearray(H9_door ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_SWITCHES_DATA.value, payload=payload) @@ -260,14 +276,23 @@ payload = conversions.unsigned_integer_to_bytearray(capacity) payload += conversions.unsigned_integer_to_bytearray(ac_power) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_BATTERY_DATA.value, payload=payload) self.can_interface.send(message, 0) - def td_valves(self, valve_id: int, state: int, pos_name: int, pos_count: int, next_pos: int): + def td_valves(self, valve_id : int, + state : int, + currPosID : int, + currPos : int, + cmdPos : int, + posA : int, + posB : int, + posC : int, + posD : int, + maxHomingPos: int): """ Broadcasts the current TD Valves Data (Msg ID: 0x2B, 43) Args: @@ -285,32 +310,38 @@ payload = conversions.unsigned_integer_to_bytearray(valve_id ) payload += conversions.unsigned_integer_to_bytearray(state ) - payload += conversions.unsigned_integer_to_bytearray(pos_name ) - payload += conversions.short_to_bytearray (pos_count ) - payload += conversions.short_to_bytearray (next_pos ) + payload += conversions.unsigned_integer_to_bytearray(currPosID ) + payload += conversions.short_to_bytearray (currPos ) + payload += conversions.short_to_bytearray (cmdPos ) + payload += conversions.short_to_bytearray (posA ) + payload += conversions.short_to_bytearray (posB ) + payload += conversions.short_to_bytearray (posC ) + payload += conversions.short_to_bytearray (posD ) + payload += conversions.short_to_bytearray (maxHomingPos) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_VALVES_DATA.value, payload=payload) self.can_interface.send(message, 0) - def td_voltage(self, line_1_2v: float, line_3_3v: float, line_logic_5v: float, - line_sensors_5v: float, line_24v: float, line_regen_24v: float, - fpga_adc_ref: float, res_ref: float, fpga_vcc: float, - fpga_vaux: float, fpga_vpvn: float): + def td_voltage(self, line_1_2v : float, + line_3_3v : float, + line_logic_5v : float, + line_24v_1 : float, + line_24v_2 : float, + fpga_vcc : float, + fpga_vaux : float, + fpga_vpvn : float): """ Broadcasts the current TD voltage data (Msg ID: 0x1D, 29) Args: @param line_1_2v (float): Processor 1.2V @param line_3_3v (float): Logic voltage (3.3V) @param line_logic_5v (float): Logic voltage (5V) - @param line_sensors_5v (float): Sensors voltage (5V) - @param line_24v (float): Actuators voltage (24V) - @param line_regen_24v (float): Actuators regen voltage (24V) - @param fpga_adc_ref (float): FPGA ADC reference voltage (1V) - @param res_ref (float): PBA ADC reference voltage (3V) + @param line_24v_1 (float): Actuators voltage (24V) + @param line_24v_2 (float): Actuators voltage (24V) @param fpga_vcc (float): FPGA input voltage (3V) @param fpga_vaux (float): FPGA aux. voltage (3V) @param fpga_vpvn (float): FPGA pvn voltage (1V) @@ -319,20 +350,18 @@ if not self.can_enabled: raise ValueError("CAN Interface is not enabled") - payload = conversions.float_to_bytearray(line_1_2v ) - payload += conversions.float_to_bytearray(line_3_3v ) - payload += conversions.float_to_bytearray(line_logic_5v ) - payload += conversions.float_to_bytearray(line_sensors_5v ) - payload += conversions.float_to_bytearray(line_24v ) - payload += conversions.float_to_bytearray(line_regen_24v ) - payload += conversions.float_to_bytearray(fpga_adc_ref ) - payload += conversions.float_to_bytearray(res_ref ) - payload += conversions.float_to_bytearray(fpga_vcc ) - payload += conversions.float_to_bytearray(fpga_vaux ) - payload += conversions.float_to_bytearray(fpga_vpvn ) + payload = conversions.float_to_bytearray(line_1_2v ) + payload += conversions.float_to_bytearray(line_3_3v ) + payload += conversions.float_to_bytearray(line_logic_5v ) + payload += conversions.float_to_bytearray(line_24v_1 ) + payload += conversions.float_to_bytearray(line_24v_2 ) + payload += conversions.float_to_bytearray(fpga_vcc ) + payload += conversions.float_to_bytearray(fpga_vaux ) + payload += conversions.float_to_bytearray(fpga_vpvn ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_VOLTAGES_DATA.value, payload=payload) @@ -349,8 +378,10 @@ H2_arterial_long : float , H14_venous_long : float , tmp_pressure : float , + tmp_long : float , tmp_min : float , - tmp_max : float ): + tmp_max : float , + barometric : float ): """ Broadcasts the current TD Pressures data (Msg ID: 0x24, 36) Args: @@ -364,8 +395,10 @@ @param H2_arterial_long (float) : Arterial Long @param H14_venous_long (float) : Venous Long @param tmp_pressure (float) : TMP pressure + @param tmp_long (float) : TMP long @param tmp_min (float) : TMP minimum @param tmp_max (float) : TMP maximum + @param barometric (float) : barometric @return: None """ if not self.can_enabled: @@ -382,11 +415,13 @@ payload += conversions.float_to_bytearray (H2_arterial_long ) payload += conversions.float_to_bytearray (H14_venous_long ) payload += conversions.float_to_bytearray (tmp_pressure ) + payload += conversions.float_to_bytearray (tmp_long ) payload += conversions.float_to_bytearray (tmp_min ) payload += conversions.float_to_bytearray (tmp_max ) + payload += conversions.float_to_bytearray (barometric ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_PRESSURE_DATA.value, payload=payload) @@ -412,13 +447,37 @@ payload += conversions.float_to_bytearray (cumulative ) payload += conversions.unsigned_integer_to_bytearray(time_remaining ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_HEPARIN_DATA.value, payload=payload) self.can_interface.send(message, 0) + def td_treatment_stop_state( self, + total : int , + countdown : int ): + """ + Broadcasts the current TD Heparin data (Msg ID: 0xXX, XX) + Args: + @param total (int) : Total Timeout of Treatment Blood Stop + @param countdown (int) : Current Timeout count down of Treatment Blood Stop + @return: None + """ + if not self.can_enabled: + raise ValueError("CAN Interface is not enabled") + + + payload = conversions.unsigned_integer_to_bytearray (total ) + payload += conversions.unsigned_integer_to_bytearray (countdown ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_PAUSED_TIMER_DATA.value, + payload=payload) + + self.can_interface.send(message, 0) + def td_vitals( self, systolic : int , diastolic : int , @@ -439,37 +498,37 @@ payload += conversions.unsigned_integer_to_bytearray (diastolic ) payload += conversions.unsigned_integer_to_bytearray (heartRate ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_BLOOD_PRESSURE_DATA.value, payload=payload) self.can_interface.send(message, 0) def td_saline( self, target_volume : int , - cumulative_volume : float , bolus_volume : float , - state : int ): + cumulative_volume : float , + bolusPermitted : int ): """ Broadcasts the current TD Saline data (Msg ID: 0x3D, 61) Args: @param target_volume (int ) : Saline target volume @param cumulative_volume (float) : Saline cumulative volume @param bolus_volume (float) : Saline bolus set volume - @param state (int ) : Saline bolus state + @param bolusPermitted (int ) : Saline bolus permitted state @return: None """ if not self.can_enabled: raise ValueError("CAN Interface is not enabled") payload = conversions.unsigned_integer_to_bytearray(target_volume ) - payload += conversions.float_to_bytearray (cumulative_volume ) payload += conversions.float_to_bytearray (bolus_volume ) - payload += conversions.unsigned_integer_to_bytearray(state ) + payload += conversions.float_to_bytearray (cumulative_volume ) + payload += conversions.unsigned_integer_to_bytearray(bolusPermitted ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_SALINE_BOLUS_DATA.value, payload=payload) @@ -498,8 +557,8 @@ payload += conversions.float_to_bytearray (volume_delivered ) payload += conversions.unsigned_integer_to_bytearray(state ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ULTRAFILTRATION_DATA.value, payload=payload) @@ -526,13 +585,57 @@ payload += conversions.unsigned_integer_to_bytearray(tx_elapsed_s ) payload += conversions.unsigned_integer_to_bytearray(tx_remaining_s ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_TIME_DATA.value, payload=payload) self.can_interface.send(message, 0) + + def td_water_sample( self, valve : int , + timeout : int ): + """ + Broadcasts the current TD Water Sample data (Msg ID: 0xAB) + Args: + @param valve (int) : water sample valve that is openend + @param timeout (int) : water sample timeout + @return: None + """ + if not self.can_enabled: + raise ValueError("CAN Interface is not enabled") + + + payload = conversions.unsigned_integer_to_bytearray (valve ) + payload += conversions.unsigned_integer_to_bytearray (timeout ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_WATER_SAMPLE_DATA.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_water_sample_result_response(self, vAccepted : int , + vRejectionReason : int , + vValue : float ): + """ + the water sample result response message method(Msg ID: 0xXX, XXX) + Args: + None + @return: None + """ + payload = conversions.integer_to_bytearray (vAccepted ) + payload += conversions.integer_to_bytearray (vRejectionReason) + payload += conversions.float_to_bytearray (vValue ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_WATER_SAMPLE_RESULT_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + def td_param_ranges(self, min_tx_time_s : int, max_tx_time_s : int, @@ -562,8 +665,8 @@ payload += conversions.unsigned_integer_to_bytearray (min_dial_rate_mLH ) payload += conversions.unsigned_integer_to_bytearray (max_dial_rate_mLH ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_PARAM_RANGES.value, payload=payload) @@ -589,33 +692,39 @@ payload += conversions.unsigned_integer_to_bytearray(dialysate_flow ) payload += conversions.float_to_bytearray (dialysate_temp ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_SET_POINTS.value, payload=payload) self.can_interface.send(message, 0) def td_blood_prime_progress(self, - target_volume : float , - delivered_volume : float ): + target_volume : float , + delivered_volume : float , + timeout : int , + countdown : int ): """ Broadcasts blood prime data (Msg ID: 0x97, 151) Args: - @param target_volume (float) : Target Volume - @param delivered_volume (float) : Delivered Volume + @param target_volume (float) : Target Volume (mL) + @param delivered_volume (float) : Delivered Volume (mL) + @param timeout (int ) : Pause Timeout (s) + @param delivered_volume (float) : Pause Timeout Countdown (s) @return: None """ if not self.can_enabled: raise ValueError("CAN Interface is not enabled") - payload = conversions.float_to_bytearray (target_volume ) - payload += conversions.float_to_bytearray (delivered_volume ) + payload = conversions.float_to_bytearray ( target_volume ) + payload += conversions.float_to_bytearray ( delivered_volume ) + payload += conversions.unsigned_integer_to_bytearray ( timeout ) + payload += conversions.unsigned_integer_to_bytearray ( countdown ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_BLOOD_PRIME_PROGRESS_DATA.value, payload=payload) @@ -632,14 +741,51 @@ payload = conversions.integer_to_bytearray(vAccepted) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_BLOOD_PRIME_CMD_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) + def td_recirculate_progress(self, vTimeout: int, + vCountdown: int): + """ + rinseback progress message (Msg ID: 0x8F, 143) + Args: + @param vTimeout : (int) Total Timeout of Recirculate delivery + @param vCountdown : (int) Current Timeout count down of Recirculate delivery + @return: None + """ + payload = conversions.unsigned_integer_to_bytearray (vTimeout ) + payload += conversions.unsigned_integer_to_bytearray (vCountdown ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_RECIRCULATE_DATA.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_recirculate_cmd_response(self, vAccepted: int, vRejectionReason: int): + """ + rinseback command response message (Msg ID: 0x99, 145) + Args: + @param vRejectionReason : (int) rejection reason + @return: None + """ + payload = conversions.integer_to_bytearray(vAccepted) + payload += conversions.integer_to_bytearray(vRejectionReason) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_RECIRCULATE_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + def td_isolated_uf( self, duration : int , set_volume : int , @@ -662,8 +808,8 @@ payload += conversions.unsigned_integer_to_bytearray(volume_delivered ) payload += conversions.unsigned_integer_to_bytearray(rate ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ISOLATED_UF_DATA.value, payload=payload) @@ -700,8 +846,8 @@ payload += conversions.unsigned_byte_to_bytearray (fpga_lab ) payload += conversions.unsigned_integer_to_bytearray(compatibility_rev) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_VERSION_RESPONSE.value, payload=payload) @@ -717,8 +863,8 @@ """ payload = bytes(serial, 'ascii') + b'\x00' - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_SERIAL_RESPONSE.value, payload=payload) @@ -731,8 +877,8 @@ None @return: None """ - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_UI_VERSION_INFO_REQUEST.value) self.can_interface.send(message, 0) @@ -748,13 +894,30 @@ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_BLOOD_PRESSURE_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) + def td_pressures_widen_adjustment_response(self,vRejectionReason: int): + """ + the blood set auto eject response message method(Msg ID: 0xXX, XXX) + Args: + None + @return: None + """ + payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) + payload += conversions.integer_to_bytearray(vRejectionReason) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_PRESSURE_LIMIT_WIDEN_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + def td_date_time_response(self,vRejectionReason: int): """ the TD Date/ Time response message method(Msg ID: 0x6D, 100) @@ -765,8 +928,8 @@ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_DATE_AND_TIME_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -781,8 +944,8 @@ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_HEPARIN_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -797,12 +960,13 @@ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_END_TREATMENT_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) + def td_institutional_response(self, vRejectionReason : int, vBloodFlowMin : int, vBloodFlowMax : int, @@ -929,8 +1093,8 @@ payload += conversions.float_to_bytearray(vSubstitutionVolumeMax) payload += conversions.float_to_bytearray(vSubstitutionVolumeDef) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_INSTITUTIONAL_RECORD_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1116,8 +1280,8 @@ payload += conversions.integer_to_bytearray(vSubVolumeMinReason ) payload += conversions.integer_to_bytearray(vSubVolumeMaxReason ) payload += conversions.integer_to_bytearray(vSubVolumeDefReason ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ADJUST_INSTITUTIONAL_RECORD_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1177,8 +1341,8 @@ payload += conversions.integer_to_bytearray(vWaterSampleTestResultRequiredDef ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ADVANCED_INSTITUTIONAL_RECORD_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1256,32 +1420,38 @@ payload += conversions.integer_to_bytearray(vChlorineWaterSampleCheckDefRejectionReason ) payload += conversions.integer_to_bytearray(vWaterSampleTestResultRequiredDefRejectionReason ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ADVANCED_ADJUST_INSTITUTIONAL_RECORD_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) - def td_duration_validate_response(self, vRejectionReason: int, vDuration: int, vUFVolume: float, vUFRate: float): + def td_duration_validate_response(self, vRejectionReason: int, + vDuration: int, + vHeparinDuration: int, + vUFVolume: float, + vUFRate: float): """ the duration validate response message method(Msg ID: 0x84, 132) Args: @param vRejectionReason (int) : response rejection reason, if rejection reason is 0, then accepted (0) will be sent, otherwise rejected (1) @param vDuration (int) : treatment duration (min) - @param vUFVolume (float) : UF volume goal (mL) - @param vUFRate (float) : UF rate (L/hr) + @param vHeparinDuration (int) : heparin duration (min) + @param vUFVolume (float) : UF volume goal (L) + @param vUFRate (float) : UF rate (L/hr) @return: None """ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0 ) payload += conversions.integer_to_bytearray(vRejectionReason ) payload += conversions.integer_to_bytearray(vDuration ) + payload += conversions.integer_to_bytearray(vHeparinDuration ) payload += conversions.float_to_bytearray(vUFVolume ) payload += conversions.float_to_bytearray(vUFRate ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_DURATION_VALIDATE_RESPONSE .value, payload=payload) self.can_interface.send(message, 0) @@ -1307,8 +1477,8 @@ payload += conversions.unsigned_integer_to_bytearray (vCountdown ) payload += conversions.integer_to_bytearray (vIsCompleted ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_RINSEBACK_PROGRESS.value, payload=payload) self.can_interface.send(message, 0) @@ -1324,8 +1494,8 @@ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_RINSEBACK_CMD_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1345,8 +1515,8 @@ payload += conversions.integer_to_bytearray(vRejectionReason ) payload += conversions.integer_to_bytearray(vVolumeMax ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ISOLATED_UF_DURATION_CHANGE_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1370,8 +1540,8 @@ payload += conversions.integer_to_bytearray(vDuration ) payload += conversions.integer_to_bytearray(vRate ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ISOLATED_UF_VOLUME_GOAL_CHANGE_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1389,8 +1559,8 @@ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0 ) payload += conversions.integer_to_bytearray(vRejectionReason ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ISOLATED_UF_CONFIRM_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1406,28 +1576,106 @@ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ADJUST_DISPOSABLES_CONFIRM_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) - def td_blood_set_auto_eject_response(self,vRejectionReason: int): + def td_blood_set_auto_eject_response(self, vAccepted: int, vRejectionReason: int): """ - the heparin adjustment response message method(Msg ID: 0xXX, XXX) + the blood set aito eject response message method(Msg ID: 0xXX, XXX) Args: None @return: None """ - payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) + payload = conversions.integer_to_bytearray(vAccepted) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) + + def td_pressures_adjustment_response(self, vAccepted : int, + vArterialWindowRejectReason : int, + vVenousWindowRejectReason : int, + vVenousAsymmetricRejectReason: int, + vTmpWindowRejectReason : int): + """ + the pressures adjustment response message method(Msg ID: 0x73, 115) + Args: + None + @return: None + """ + payload = conversions.integer_to_bytearray(vAccepted ) + payload += conversions.integer_to_bytearray(vArterialWindowRejectReason ) + payload += conversions.integer_to_bytearray(vVenousWindowRejectReason ) + payload += conversions.integer_to_bytearray(vVenousAsymmetricRejectReason ) + payload += conversions.integer_to_bytearray(vTmpWindowRejectReason ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_PRESSURE_LIMITS_CHANGE_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_set_points_adjustment_response(self, vAccepted : int, + vBloodFlowRejectReason : int, + vDialysateFlowRateRejectReason : int, + vspnDialysateTempRejectReason : int, + vAcidConcentrateRejectReason : int, + vAcidConcentrateFactorRejectReason: int, + vBicarbConcentrateRejectReason : int, + vTreatmentModalityRejectReason : int, + vHepatitisRejectReason : int, + vSodiumRejectReason : int, + vBicarbonateRejectReason : int): + """ + the set points adjustment response message method(Msg ID: 0x7B, 123) + Args: + None + @return: None + """ + payload = conversions.integer_to_bytearray(vAccepted ) + payload += conversions.integer_to_bytearray(vBloodFlowRejectReason ) + payload += conversions.integer_to_bytearray(vDialysateFlowRateRejectReason ) + payload += conversions.integer_to_bytearray(vspnDialysateTempRejectReason ) + payload += conversions.integer_to_bytearray(vAcidConcentrateRejectReason ) + payload += conversions.integer_to_bytearray(vAcidConcentrateFactorRejectReason ) + payload += conversions.integer_to_bytearray(vBicarbConcentrateRejectReason ) + payload += conversions.integer_to_bytearray(vTreatmentModalityRejectReason ) + payload += conversions.integer_to_bytearray(vHepatitisRejectReason ) + payload += conversions.integer_to_bytearray(vSodiumRejectReason ) + payload += conversions.integer_to_bytearray(vBicarbonateRejectReason ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_SET_POINTS_CHANGE_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_patient_disconnect_confirm_response(self, vAccepted: int, vRejectionReason: int): + """ + the patient disconnect confirm response message method(Msg ID: 0xXX, XXX) + Args: + None + @return: None + """ + payload = conversions.integer_to_bytearray(vAccepted) + payload += conversions.integer_to_bytearray(vRejectionReason) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_ADJUST_PATIENT_DISCONNECT_CONFIRM_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + def td_Treatment_Parameters_CreateRx(self, vRejectionReason: int): """ TD response to in initiate Treatment and enter Create Rx (Msg ID: 0x46, 70) @@ -1441,84 +1689,242 @@ payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0) payload += conversions.integer_to_bytearray(vRejectionReason) + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_RESP_INITIATE_TREATMENT_WORKFLOW.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_post_tx_logs_response( self, + vAccepted : int, + vRejectionReason : int, + vBloodFlowRate : int, + vBloodFlowRateActual : int, + vDialysateFlowRate : int, + vDialysateFlowRateActual : int, + vTreatmentDuration : int, + vTreatmentDurationActual : int, + vAcidConcentrateType : int, + vAcidConcentrateTypeActual : int, + vBicarbonateCartridgeSize : int, + vBicarbonateCartridgeSizeActual : int, + vPotassiumConcentration : int, + vPotassiumConcentrationActual : int, + vCalciumConcentration : int, + vCalciumConcentrationActual : int, + vBicarbonateConcentration : int, + vBicarbonateConcentrationActual : int, + vSodiumConcentration : int, + vSodiumConcentrationActual : int, + vVitalsInterval : int, + vVitalsIntervalActual : int, + vDialyzerType : int, + vTreatmentStartEpoch : int, + vTreatmentEndEpoch : int, + vFluidBolusVolume : int, + vFluidBolusVolumeActual : int, + vHeparinType : int, + vHeparinDeliveryDuration : int, + vHeparinDeliveryDurationActual : int, + vTreatmentModality : int, + vTreatmentModalityActual : int, + vHDFOperatingMode : int, + vHDFOperatingModeActual : int, + vHepatitisStatus : int, + vDialysateTemperature : float, + vDialysateTemperatureActual : float, + vDialysateVolumeUsed : float, + vHeparinBolusVolume : float, + vHeparinBolusVolumeActual : float, + vHeparinDispenseRate : float, + vHeparinDispenseRateActual : float, + vHeparinDeliveredVolume : float, + vUFVolume : float, + vUFVolumeActual : float, + vUFVolumeTarget : float, + vUFRate : float, + vUFRateActual : float, + vUFRateTarget : float, + vSubstitutionVolume : float, + vSubstitutionVolumeActual : float, + vSubstitutionVolumeTarget : float, + vSubstitutionRate : float, + vSubstitutionRateActual : float, + vSubstitutionRateTarget : float, + vIsoUfVolume : float, + vIsoUfVolumeActual : float, + vIsoUfVolumeTarget : float, + vIsoUfRate : float, + vIsoUfRateActual : float, + vIsoUfRateTarget : float, + vWaterSampleTestResult : float + ): + # """ + # the Post Treatment logs records response message method(Msg ID: 0xXX, XXX) + # Args: + # None + # @return: None + # """ + # if not self.can_enabled: + # raise ValueError("CAN Interface is not enabled") + + payload = conversions.integer_to_bytearray(vAccepted ) + payload += conversions.integer_to_bytearray(vRejectionReason ) + payload += conversions.integer_to_bytearray(vBloodFlowRate ) + payload += conversions.integer_to_bytearray(vBloodFlowRateActual ) + payload += conversions.integer_to_bytearray(vDialysateFlowRate ) + payload += conversions.integer_to_bytearray(vDialysateFlowRateActual ) + payload += conversions.integer_to_bytearray(vTreatmentDuration ) + payload += conversions.integer_to_bytearray(vTreatmentDurationActual ) + payload += conversions.integer_to_bytearray(vAcidConcentrateType ) + payload += conversions.integer_to_bytearray(vAcidConcentrateTypeActual ) + payload += conversions.integer_to_bytearray(vBicarbonateCartridgeSize ) + payload += conversions.integer_to_bytearray(vBicarbonateCartridgeSizeActual ) + payload += conversions.integer_to_bytearray(vPotassiumConcentration ) + payload += conversions.integer_to_bytearray(vPotassiumConcentrationActual ) + payload += conversions.integer_to_bytearray(vCalciumConcentration ) + payload += conversions.integer_to_bytearray(vCalciumConcentrationActual ) + payload += conversions.integer_to_bytearray(vBicarbonateConcentration ) + payload += conversions.integer_to_bytearray(vBicarbonateConcentrationActual ) + payload += conversions.integer_to_bytearray(vSodiumConcentration ) + payload += conversions.integer_to_bytearray(vSodiumConcentrationActual ) + payload += conversions.integer_to_bytearray(vVitalsInterval ) + payload += conversions.integer_to_bytearray(vVitalsIntervalActual ) + payload += conversions.integer_to_bytearray(vDialyzerType ) + payload += conversions.integer_to_bytearray(vTreatmentStartEpoch ) + payload += conversions.integer_to_bytearray(vTreatmentEndEpoch ) + payload += conversions.integer_to_bytearray(vFluidBolusVolume ) + payload += conversions.integer_to_bytearray(vFluidBolusVolumeActual ) + payload += conversions.integer_to_bytearray(vHeparinType ) + payload += conversions.integer_to_bytearray(vHeparinDeliveryDuration ) + payload += conversions.integer_to_bytearray(vHeparinDeliveryDurationActual ) + payload += conversions.integer_to_bytearray(vTreatmentModality ) + payload += conversions.integer_to_bytearray(vTreatmentModalityActual ) + payload += conversions.integer_to_bytearray(vHDFOperatingMode ) + payload += conversions.integer_to_bytearray(vHDFOperatingModeActual ) + payload += conversions.integer_to_bytearray(vHepatitisStatus ) + payload += conversions.float_to_bytearray( vDialysateTemperature ) + payload += conversions.float_to_bytearray( vDialysateTemperatureActual ) + payload += conversions.float_to_bytearray( vDialysateVolumeUsed ) + payload += conversions.float_to_bytearray( vHeparinBolusVolume ) + payload += conversions.float_to_bytearray( vHeparinBolusVolumeActual ) + payload += conversions.float_to_bytearray( vHeparinDispenseRate ) + payload += conversions.float_to_bytearray( vHeparinDispenseRateActual ) + payload += conversions.float_to_bytearray( vHeparinDeliveredVolume ) + payload += conversions.float_to_bytearray( vUFVolume ) + payload += conversions.float_to_bytearray( vUFVolumeActual ) + payload += conversions.float_to_bytearray( vUFVolumeTarget ) + payload += conversions.float_to_bytearray( vUFRate ) + payload += conversions.float_to_bytearray( vUFRateActual ) + payload += conversions.float_to_bytearray( vUFRateTarget ) + payload += conversions.float_to_bytearray( vSubstitutionVolume ) + payload += conversions.float_to_bytearray( vSubstitutionVolumeActual ) + payload += conversions.float_to_bytearray( vSubstitutionVolumeTarget ) + payload += conversions.float_to_bytearray( vSubstitutionRate ) + payload += conversions.float_to_bytearray( vSubstitutionRateActual ) + payload += conversions.float_to_bytearray( vSubstitutionRateTarget ) + payload += conversions.float_to_bytearray( vIsoUfVolume ) + payload += conversions.float_to_bytearray( vIsoUfVolumeActual ) + payload += conversions.float_to_bytearray( vIsoUfVolumeTarget ) + payload += conversions.float_to_bytearray( vIsoUfRate ) + payload += conversions.float_to_bytearray( vIsoUfRateActual ) + payload += conversions.float_to_bytearray( vIsoUfRateTarget ) + payload += conversions.float_to_bytearray( vWaterSampleTestResult ) + message = CAN.DenaliMessage.build_message( channel_id=CAN.DenaliChannels.td_to_ui_ch_id, - message_id=msg_ids.MsgIds.MSG_ID_TD_RESP_INITIATE_TREATMENT_WORKFLOW.value, + message_id=msg_ids.MsgIds.MSG_ID_TD_ADJUST_TREATMENT_LOGS_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) def td_Treatment_Parameters_Validation( self, - vAccepted : int = 1, - vBloodFlowRateRejectReason : int = 0, - vDialysateFlowRateRejectReason : int = 0, - vTreatmentDurationRejectReason : int = 0, - vSalineBolusVolumeRejectReason : int = 0, - vHeparinStopTimeRejectReason : int = 0, - vHeparinTypeRejectReason : int = 0, - vAcidConcentrateRejectReason : int = 0, - vBicarbonateConcentrateRejectReason : int = 0, - vDialyzerTypeRejectReason : int = 0, - vBloodPressureMeasureIntervalRejectReason : int = 0, - vRinsebackFlowRateRejectReason : int = 0, - vRinsebackVolumeRejectReason : int = 0, - vArterialPressureLimitWindowRejectReason : int = 0, - vVenousPressureLimitWindowRejectReason : int = 0, - vVenousPressureLimitAsymtrcRejectReason : int = 0, - vTransmembranePressureLimitWindowRejectReason : int = 0, - vDialysateTempRejectReason : int = 0, - vHeparinDispensingRateRejectReason : int = 0, - vHeparinBolusVolumeRejectReason : int = 0 + vAccepted : int = 1, + vTreatmentModalityRejectReason : int = 0, + vHDFTreatmentModeRejectReason : int = 0, + vBloodFlowRateRejectReason : int = 0, + vDialysateFlowRateRejectReason : int = 0, + vTreatmentDurationRejectReason : int = 0, + vHeparinDeliveryDurationRejectReason : int = 0, + vHeparinTypeRejectReason : int = 0, + vDryBicarbCartSizeRejectReason : int = 0, + vSodiumRejectReason : int = 0, + vBicarbonateRejectReason : int = 0, + vDialyzerTypeRejectReason : int = 0, + vFluidBolusVolumeRejectReason : int = 0, + vBloodPressureMeasureIntervalRejecteason : int = 0, + vRinsebackVolumeRejectReason : int = 0, + vHepatitusBStatusRejectReason : int = 0, + vAcidConcentrateIndextRejectReason : int = 0, + vSubstitutionFluidVolumeRejecteason : int = 0, + vHeparinBolusVolumeRejectReason : int = 0, + vHeparinDispensingRateRejecteason : int = 0, + vDialysateTempRejectReason : int = 0, + vAcidConcentrateConversionFactorRejectReason : int = 0, + vUFPreWeightRejectReason : int = 0, + vUFEstimatedTargetWeightRejectReason : int = 0, + vUFVolumeRejectReason : int = 0 ): """TD Treatment Parameter Validation Response to the SW validation request with sent values of the same parameters.(Msg ID: 0x40, 64) Args: vAccepted (int, optional): Zero value if rejected. Defaults to 1. + vTreatmentModalityRejectTReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHDFTreatmentModeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. vBloodFlowRateRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. vDialysateFlowRateRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. vTreatmentDurationRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vSalineBolusVolumeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vHeparinStopTimeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHeparinDeliveryDurationRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. vHeparinTypeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vAcidConcentrateRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vBicarbonateConcentrateRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDryBicarbCartSizeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vSodiumRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vBicarbonateRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. vDialyzerTypeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vBloodPressureMeasureIntervalRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vRinsebackFlowRateRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vFluidBolusVolumeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vBloodPressureMeasureIntervalRejecteason (int, optional): None zero value of rejection reason. Defaults to 0. vRinsebackVolumeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vArterialPressureLimitWindowRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vVenousPressureLimitWindowRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vVenousPressureLimitAsymtrcRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vTransmembranePressureLimitWindowRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vDialysateTempRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. - vHeparinDispensingRateRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepatitusBStatusRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vAcidConcentrateIndextRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vSubstitutionFluidVolumeRejecteason (int, optional): None zero value of rejection reason. Defaults to 0. vHeparinBolusVolumeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHeparinDispensingRateRejecteason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateTempRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vAcidConcentrateConversionFactorRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vUFPreWeightRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vUFEstimatedTargetWeightRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vUFVolumeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. """ if not self.can_enabled: raise ValueError("CAN Interface is not enabled") payload = conversions.integer_to_bytearray(vAccepted ) + payload += conversions.integer_to_bytearray(vTreatmentModalityRejectReason ) + payload += conversions.integer_to_bytearray(vHDFTreatmentModeRejectReason ) payload += conversions.integer_to_bytearray(vBloodFlowRateRejectReason ) payload += conversions.integer_to_bytearray(vDialysateFlowRateRejectReason ) payload += conversions.integer_to_bytearray(vTreatmentDurationRejectReason ) - payload += conversions.integer_to_bytearray(vSalineBolusVolumeRejectReason ) - payload += conversions.integer_to_bytearray(vHeparinStopTimeRejectReason ) + payload += conversions.integer_to_bytearray(vHeparinDeliveryDurationRejectReason ) payload += conversions.integer_to_bytearray(vHeparinTypeRejectReason ) - payload += conversions.integer_to_bytearray(vAcidConcentrateRejectReason ) - payload += conversions.integer_to_bytearray(vBicarbonateConcentrateRejectReason ) + payload += conversions.integer_to_bytearray(vDryBicarbCartSizeRejectReason ) + payload += conversions.integer_to_bytearray(vSodiumRejectReason ) + payload += conversions.integer_to_bytearray(vBicarbonateRejectReason ) payload += conversions.integer_to_bytearray(vDialyzerTypeRejectReason ) - payload += conversions.integer_to_bytearray(vBloodPressureMeasureIntervalRejectReason ) - payload += conversions.integer_to_bytearray(vRinsebackFlowRateRejectReason ) + payload += conversions.integer_to_bytearray(vFluidBolusVolumeRejectReason ) + payload += conversions.integer_to_bytearray(vBloodPressureMeasureIntervalRejecteason ) payload += conversions.integer_to_bytearray(vRinsebackVolumeRejectReason ) - payload += conversions.integer_to_bytearray(vArterialPressureLimitWindowRejectReason ) - payload += conversions.integer_to_bytearray(vVenousPressureLimitWindowRejectReason ) - payload += conversions.integer_to_bytearray(vVenousPressureLimitAsymtrcRejectReason ) - payload += conversions.integer_to_bytearray(vTransmembranePressureLimitWindowRejectReason ) - payload += conversions.integer_to_bytearray(vDialysateTempRejectReason ) - payload += conversions.integer_to_bytearray(vHeparinDispensingRateRejectReason ) + payload += conversions.integer_to_bytearray(vHepatitusBStatusRejectReason ) + payload += conversions.integer_to_bytearray(vAcidConcentrateIndextRejectReason ) + payload += conversions.integer_to_bytearray(vSubstitutionFluidVolumeRejecteason ) payload += conversions.integer_to_bytearray(vHeparinBolusVolumeRejectReason ) + payload += conversions.integer_to_bytearray(vHeparinDispensingRateRejecteason ) + payload += conversions.integer_to_bytearray(vDialysateTempRejectReason ) + payload += conversions.integer_to_bytearray(vAcidConcentrateConversionFactorRejectReason ) + payload += conversions.integer_to_bytearray(vUFPreWeightRejectReason ) + payload += conversions.integer_to_bytearray(vUFEstimatedTargetWeightRejectReason ) + payload += conversions.integer_to_bytearray(vUFVolumeRejectReason ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_RESP_TREATMENT_PARAMS_TO_VALIDATE.value, payload=payload) self.can_interface.send(message, 0) @@ -1561,18 +1967,59 @@ payload += conversions.unsigned_integer_to_bytearray(tx_saline_state ) payload += conversions.unsigned_integer_to_bytearray(tx_heparin_state ) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_STATE_DATA.value, payload=payload) self.can_interface.send(message, 0) - + + + def td_treatment_log_alarm(self, alarm_id: int, parameter1: float, parameter2: float) -> None: + """ + send the treatment log data + @param alarm_id: (U32) alarm ID + @param parameter1: (F32) paramter 1 (it's not clear yet how many paramters with what type is required and this is only plceholder) + @param parameter2: (F32) paramter 2 (it's not clear yet how many paramters with what type is required and this is only plceholder) + @return: None + """ + payload = conversions.integer_to_bytearray(alarm_id) + payload += conversions.float_to_bytearray(parameter1) + payload += conversions.float_to_bytearray(parameter2) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_LOG_ALARM_EVENT.value, + payload=payload) + + self.can_interface.send(message, 0) + + + def td_treatment_log_event(self, event_id: int, old_value: float, new_value: float) -> None: + """ + send the treatment log data + @param event_id: (U32) alarm ID + @param old_value: (F32) the old value + @param new_value: (F32) the new value + @return: none + """ + payload = conversions.integer_to_bytearray(event_id) + payload += conversions.float_to_bytearray(old_value) + payload += conversions.float_to_bytearray(new_value) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_LOG_EVENT.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_general_response(self, message_id: int, accepted: int, reason: int, is_pure_data: bool = False, has_parameters: bool = False, parameters_payload: any = 0x00, - channel_id=CAN.DenaliChannels.td_to_ui_ch_id) -> None: + channel_id=CAN.CanChannels.td_to_ui_ch_id) -> None: """A general method to send any standard response message, by it's id and list of parameters. Args: message_id (int ): the id of the message @@ -1581,7 +2028,7 @@ is_pure_data (bool, optional ): The message only has data. Defaults to False. has_parameters (bool, optional ): if the message has parameter this needs to be true. Defaults to False. parameters_payload (any, optional ): the list of parameters pre-converted and ready to be concatenated to the payload. Defaults to 0x00. - channel_id (_type_, optional ): indicates the channel. Defaults to CAN.DenaliChannels.td_to_ui_ch_id. + channel_id (_type_, optional ): indicates the channel. Defaults to CAN.Channels.td_to_ui_ch_id. """ payload = "" if not is_pure_data: @@ -1591,7 +2038,7 @@ if has_parameters: payload = parameters_payload - message = CAN.DenaliMessage.build_message( + message = CAN.CanMessage.build_message( channel_id, message_id, payload