Index: leahi_dialin/ui/td_messaging.py =================================================================== diff -u -ra18704a9e0461edca538e449d33b9ea286385961 -r1805eef13be34b7e55465a88dee3de18a5955008 --- leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision a18704a9e0461edca538e449d33b9ea286385961) +++ 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: @@ -37,7 +37,6 @@ Args: op_mode (int ): operation mode sub_mode (int, optional ): operation sub-mode. Defaults to 0. - """ if not self.can_enabled: raise ValueError("CAN Interface is not enabled") @@ -46,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) @@ -66,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) @@ -97,7 +96,6 @@ @param H6_rot_hall_state : Rotor hall state (1=home, 0=not home) @return: None """ - if not self.can_enabled: raise ValueError("CAN Interface is not enabled") @@ -112,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: @@ -139,21 +140,23 @@ @param controlling : air control @return: None """ - if not self.can_enabled: 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) @@ -175,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: @@ -195,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: @@ -216,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) @@ -240,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) @@ -263,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: @@ -288,55 +310,58 @@ 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) @return: None """ - 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) @@ -353,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: @@ -368,11 +395,12 @@ @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: raise ValueError("CAN Interface is not enabled") @@ -387,48 +415,69 @@ 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) self.can_interface.send(message, 0) - def td_saline( self, - target_volume : int , - cumulative_volume : float , - bolus_volume : float , - state : int ): + def td_heparin( self, + target : float , + cumulative : float , + time_remaining : int ): """ - Broadcasts the current TD Saline data (Msg ID: 0x3D, 61) + Broadcasts the current TD Heparin data (Msg ID: 0xXX, XX) 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 target (float) : Heparin target volume + @param cumulative (float) : Heparin cumulative volume + @param time_remaining (int) : Heparin time remaining @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 (target ) + 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_id=msg_ids.MsgIds.MSG_ID_TD_SALINE_BOLUS_DATA.value, + 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 , @@ -441,7 +490,6 @@ @param heartRate (int ) : heart rate @return: None """ - if not self.can_enabled: raise ValueError("CAN Interface is not enabled") @@ -450,12 +498,42 @@ 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 , + bolus_volume : float , + 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 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 (bolus_volume ) + payload += conversions.float_to_bytearray (cumulative_volume ) + payload += conversions.unsigned_integer_to_bytearray(bolusPermitted ) + + 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) + + self.can_interface.send(message, 0) + def td_ultrafiltration( self, set_volume : float , target_rate : float , @@ -470,7 +548,6 @@ @param state (int ) : UF state @return: None """ - if not self.can_enabled: raise ValueError("CAN Interface is not enabled") @@ -480,13 +557,14 @@ 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) self.can_interface.send(message, 0) - + + def td_treatment_time( self, tx_duration_s : int , tx_elapsed_s : int , @@ -499,7 +577,6 @@ @param tx_remaining_s (int) : Treatment time remaining (s) @return: None """ - if not self.can_enabled: raise ValueError("CAN Interface is not enabled") @@ -508,13 +585,93 @@ 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, + min_uf_volume_mL : float, + max_uf_volume_mL : float, + min_dial_rate_mLH : int, + max_dial_rate_mLH : int): + """ + Broadcasts the current TD Param Ranges Data (Msg ID: 0x43, 67) + Args: + @param min_tx_time_s : Minimum treatement time in secs. + @param max_tx_time_s : Maximum treatement time in secs. + @param min_uf_volume_mL : Minimum UF volume in mL. + @param max_uf_volume_mL : Maximum UF volume in mL. + @param min_dial_rate_mLH : Minimum dial rate in mL/H. + @param max_dial_rate_mLH : Maximum dial rate in mL/H. + @return: None + """ + if not self.can_enabled: + raise ValueError("CAN Interface is not enabled") + + + payload = conversions.unsigned_integer_to_bytearray (min_tx_time_s ) + payload += conversions.unsigned_integer_to_bytearray (max_tx_time_s ) + payload += conversions.float_to_bytearray (min_uf_volume_mL ) + payload += conversions.float_to_bytearray (max_uf_volume_mL ) + payload += conversions.unsigned_integer_to_bytearray (min_dial_rate_mLH ) + payload += conversions.unsigned_integer_to_bytearray (max_dial_rate_mLH ) + + 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) + + self.can_interface.send(message, 0) + def td_treatment_set_points(self, blood_flow : int , dialysate_flow : int , @@ -527,7 +684,6 @@ @param dialysate_temp (float) : Target Dialysate Temperature @return: None """ - if not self.can_enabled: raise ValueError("CAN Interface is not enabled") @@ -536,13 +692,130 @@ 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 , + timeout : int , + countdown : int ): + """ + Broadcasts blood prime data (Msg ID: 0x97, 151) + Args: + @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.unsigned_integer_to_bytearray ( timeout ) + 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_BLOOD_PRIME_PROGRESS_DATA.value, + payload=payload) + + self.can_interface.send(message, 0) + + + def td_blood_prime_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_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 , + volume_delivered : int , + rate : int ): + """ + Broadcasts the current TD Isolated Ultrafiltration data (Msg ID: 0x9A, 154) + Args: + @param duration (int) : isolated UF duration (min) + @param set_volume (int) : isolated UF set volume (mL) + @param volume_delivered (int) : isolated UF volume delivered (mL) + @param rate (int) : isolated UF rate (mL/Hr) + @return: None + """ + if not self.can_enabled: + raise ValueError("CAN Interface is not enabled") + + payload = conversions.unsigned_integer_to_bytearray(duration ) + payload += conversions.unsigned_integer_to_bytearray(set_volume ) + payload += conversions.unsigned_integer_to_bytearray(volume_delivered ) + payload += conversions.unsigned_integer_to_bytearray(rate ) + + 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) + + self.can_interface.send(message, 0) + + def td_versions(self, major: int, minor: int, micro: int, build: int, fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int, compatibility_rev: int): @@ -573,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) @@ -590,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) @@ -604,28 +877,805 @@ 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) + def td_vitals_adjustment_response(self,vRejectionReason: int): """ the vitals adjustment response message method(Msg ID: 0x64, 100) Args: None @return: None """ - payload = conversions.unsigned_integer_to_Bytearray(1 if vRejectionReason == 0 else 0) - payload += conversions.unsigned_integer_to_Bytearray(vRejectionReason) + 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) + 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_DATE_AND_TIME_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + def td_heparin_adjustment_response(self,vRejectionReason: int): + """ + the heparin adjustment 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_HEPARIN_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + def td_end_tx_response(self,vRejectionReason: int): + """ + the end treatment 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_END_TREATMENT_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_institutional_response(self, vRejectionReason : int, + vBloodFlowMin : int, + vBloodFlowMax : int, + vBloodFlowDef : int, + vDialysateFlowMin : int, + vDialysateFlowMax : int, + vDialysateFlowDef : int, + vTxDurationMin : int, + vTxDurationMax : int, + vTxDurationDef : int, + vHepBolVolumeMin : float, + vHepBolVolumeMax : float, + vHepBolVolumeDef : float, + vHepDispRateMin : float, + vHepDispRateMax : float, + vHepDispRateDef : float, + vHepStopTimeMin : int, + vHepStopTimeMax : int, + vDialysateTempMin : float, + vDialysateTempMax : float, + vDialysateTempDef : float, + vPotassiumMin : float, + vPotassiumMax : float, + vCalciumMin : float, + vCalciumMax : float, + DialysateBicarbMin : int, + DialysateBicarbMax : int, + DialysateBicarbDef : int, + SodiumBicarbMin : int, + SodiumBicarbMax : int, + SodiumBicarbDef : int, + vFluidBolusMin : int, + vFluidBolusMax : int, + vFluidBolusDef : int, + vArtPressLimitWindowMin : int, + vArtPressLimitWindowMax : int, + vArtPressLimitWindowDef : int, + vVenPressLimitWindowMin : int, + vVenPressLimitWindowMax : int, + vVenPressLimitWindowDef : int, + vVenAsymLimitWindowMin : int, + vVenAsymLimitWindowMax : int, + vVenAsymLimitWindowDef : int, + vTMPPressLimitWindowMin : int, + vTMPPressLimitWindowMax : int, + vTMPPressLimitWindowDef : int, + vUltrafiltrationVolumeMin : float, + vUltrafiltrationVolumeMax : float, + vUltrafiltrationVolumeDef : float, + vVitalsIntervalDef : int, + RinsebackVolumeMin : int, + RinsebackVolumeMax : int, + RinsebackVolumeDef : int, + RinsebackFlowRateMin : int, + RinsebackFlowRateMax : int, + RinsebackFlowRateDef : int, + vSubstitutionVolumeMin : float, + vSubstitutionVolumeMax : float, + vSubstitutionVolumeDef : float): + """ + the institutiuonal records 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) + payload += conversions.integer_to_bytearray(vBloodFlowMin) + payload += conversions.integer_to_bytearray(vBloodFlowMax) + payload += conversions.integer_to_bytearray(vBloodFlowDef) + payload += conversions.integer_to_bytearray(vDialysateFlowMin) + payload += conversions.integer_to_bytearray(vDialysateFlowMax) + payload += conversions.integer_to_bytearray(vDialysateFlowDef) + payload += conversions.integer_to_bytearray(vTxDurationMin) + payload += conversions.integer_to_bytearray(vTxDurationMax) + payload += conversions.integer_to_bytearray(vTxDurationDef) + payload += conversions.float_to_bytearray(vHepBolVolumeMin) + payload += conversions.float_to_bytearray(vHepBolVolumeMax) + payload += conversions.float_to_bytearray(vHepBolVolumeDef) + payload += conversions.float_to_bytearray(vHepDispRateMin) + payload += conversions.float_to_bytearray(vHepDispRateMax) + payload += conversions.float_to_bytearray(vHepDispRateDef) + payload += conversions.integer_to_bytearray(vHepStopTimeMin) + payload += conversions.integer_to_bytearray(vHepStopTimeMax) + payload += conversions.float_to_bytearray(vDialysateTempMin) + payload += conversions.float_to_bytearray(vDialysateTempMax) + payload += conversions.float_to_bytearray(vDialysateTempDef) + payload += conversions.float_to_bytearray(vPotassiumMin) + payload += conversions.float_to_bytearray(vPotassiumMax) + payload += conversions.float_to_bytearray(vCalciumMin) + payload += conversions.float_to_bytearray(vCalciumMax) + payload += conversions.integer_to_bytearray(DialysateBicarbMin) + payload += conversions.integer_to_bytearray(DialysateBicarbMax) + payload += conversions.integer_to_bytearray(DialysateBicarbDef) + payload += conversions.integer_to_bytearray(SodiumBicarbMin) + payload += conversions.integer_to_bytearray(SodiumBicarbMax) + payload += conversions.integer_to_bytearray(SodiumBicarbDef) + payload += conversions.integer_to_bytearray(vFluidBolusMin) + payload += conversions.integer_to_bytearray(vFluidBolusMax) + payload += conversions.integer_to_bytearray(vFluidBolusDef) + payload += conversions.integer_to_bytearray(vArtPressLimitWindowMin) + payload += conversions.integer_to_bytearray(vArtPressLimitWindowMax) + payload += conversions.integer_to_bytearray(vArtPressLimitWindowDef) + payload += conversions.integer_to_bytearray(vVenPressLimitWindowMin) + payload += conversions.integer_to_bytearray(vVenPressLimitWindowMax) + payload += conversions.integer_to_bytearray(vVenPressLimitWindowDef) + payload += conversions.integer_to_bytearray(vVenAsymLimitWindowMin) + payload += conversions.integer_to_bytearray(vVenAsymLimitWindowMax) + payload += conversions.integer_to_bytearray(vVenAsymLimitWindowDef) + payload += conversions.integer_to_bytearray(vTMPPressLimitWindowMin) + payload += conversions.integer_to_bytearray(vTMPPressLimitWindowMax) + payload += conversions.integer_to_bytearray(vTMPPressLimitWindowDef) + payload += conversions.float_to_bytearray(vUltrafiltrationVolumeMin) + payload += conversions.float_to_bytearray(vUltrafiltrationVolumeMax) + payload += conversions.float_to_bytearray(vUltrafiltrationVolumeDef) + payload += conversions.integer_to_bytearray(vVitalsIntervalDef) + payload += conversions.integer_to_bytearray(RinsebackVolumeMin) + payload += conversions.integer_to_bytearray(RinsebackVolumeMax) + payload += conversions.integer_to_bytearray(RinsebackVolumeDef) + payload += conversions.integer_to_bytearray(RinsebackFlowRateMin) + payload += conversions.integer_to_bytearray(RinsebackFlowRateMax) + payload += conversions.integer_to_bytearray(RinsebackFlowRateDef) + payload += conversions.float_to_bytearray(vSubstitutionVolumeMin) + payload += conversions.float_to_bytearray(vSubstitutionVolumeMax) + payload += conversions.float_to_bytearray(vSubstitutionVolumeDef) + + 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) + + def td_Adjust_Institutional_Records ( self, vAccepted : int = 1, + vBloodFlowMinReason : int = 0, + vBloodFlowMaxReason : int = 0, + vBloodFlowDefReason : int = 0, + vDialysateFlowMinReason : int = 0, + vDialysateFlowMaxReason : int = 0, + vDialysateFlowDefReason : int = 0, + vTreatmentDurationMinReason : int = 0, + vTreatmentDurationMaxReason : int = 0, + vTreatmentDurationDefReason : int = 0, + vHepBolusVolumeMinReason : int = 0, + vHepBolusVolumeMaxReason : int = 0, + vHepBolusVolumeDefReason : int = 0, + vHepDispRateMinReason : int = 0, + vHepDispRateMaxReason : int = 0, + vHepDispRateDefReason : int = 0, + vHepStopTimeMinReason : int = 0, + vHepStopTimeMaxReason : int = 0, + vDialysateTempMinReason : int = 0, + vDialysateTempMaxReason : int = 0, + vDialysateTempDefReason : int = 0, + vPotassiumMinReason : int = 0, + vPotassiumMaxReason : int = 0, + vCalciumMinReason : int = 0, + vCalciumMaxReason : int = 0, + vDialysateBicarbMinReason : int = 0, + vDialysateBicarbMaxReason : int = 0, + vDialysateBicarbDefReason : int = 0, + vSodiumBicarbMinReason : int = 0, + vSodiumBicarbMaxReason : int = 0, + vSodiumBicarbDefReason : int = 0, + vFluidBolusVolumeMinReason : int = 0, + vFluidBolusVolumeMaxReason : int = 0, + vFluidBolusVolumeDefReason : int = 0, + vArterialPressureMinReason : int = 0, + vArterialPressureMaxReason : int = 0, + vArterialPressureDefReason : int = 0, + vVenousPressureMinReason : int = 0, + vVenousPressureMaxReason : int = 0, + vVenousPressureDefReason : int = 0, + vVenousAsymmetricMinReason : int = 0, + vVenousAsymmetricMaxReason : int = 0, + vVenousAsymmetricDefReason : int = 0, + vTmpPressureMinReason : int = 0, + vTmpPressureMaxReason : int = 0, + vTmpPressureDefReason : int = 0, + vUfVolumeMinReason : int = 0, + vUfVolumeMaxReason : int = 0, + vUfVolumeDefReason : int = 0, + vVitalsIntervalReason : int = 0, + vRincebackVolumeMinReason : int = 0, + vRincebackVolumeMaxReason : int = 0, + vRincebackVolumeDefReason : int = 0, + vRincebackFlowRateMinReason : int = 0, + vRincebackFlowRateMaxReason : int = 0, + vRincebackFlowRateDefReason : int = 0, + vSubVolumeMinReason : int = 0, + vSubVolumeMaxReason : int = 0, + vSubVolumeDefReason : 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. + vBloodFlowMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vBloodFlowMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vBloodFlowDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateFlowMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateFlowMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateFlowDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vTreatmentDurationMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vTreatmentDurationMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vTreatmentDurationDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepBolusVolumeMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepBolusVolumeMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepBolusVolumeDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepDispRateMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepDispRateMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepDispRateDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepStopTimeMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHepStopTimeMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateTempMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateTempMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateTempDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vPotassiumMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vPotassiumMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vCalciumMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vCalciumMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateBicarbMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateBicarbMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDialysateBicarbDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vSodiumBicarbMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vSodiumBicarbMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vSodiumBicarbDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vFluidBolusVolumeMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vFluidBolusVolumeMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vFluidBolusVolumeDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vArterialPressureMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vArterialPressureMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vArterialPressureDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vVenousPressureMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vVenousPressureMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vVenousPressureDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vVenousAsymmetricMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vVenousAsymmetricMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vVenousAsymmetricDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vTmpPressureMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vTmpPressureMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vTmpPressureDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vUfVolumeMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vUfVolumeMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vUfVolumeDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vVitalsIntervalReason (int, optional): None zero value of rejection reason. Defaults to 0. + vRincebackVolumeMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vRincebackVolumeMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vRincebackVolumeDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vRincebackFlowRateMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vRincebackFlowRateMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vRincebackFlowRateDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + vSubVolumeMinReason (int, optional): None zero value of rejection reason. Defaults to 0. + vSubVolumeMaxReason (int, optional): None zero value of rejection reason. Defaults to 0. + vSubVolumeDefReason (int, optional): None zero value of rejection reason. Defaults to 0. + """ + payload = conversions.integer_to_bytearray(vAccepted ) + payload += conversions.integer_to_bytearray(vBloodFlowMinReason ) + payload += conversions.integer_to_bytearray(vBloodFlowMaxReason ) + payload += conversions.integer_to_bytearray(vBloodFlowDefReason ) + payload += conversions.integer_to_bytearray(vDialysateFlowMinReason ) + payload += conversions.integer_to_bytearray(vDialysateFlowMaxReason ) + payload += conversions.integer_to_bytearray(vDialysateFlowDefReason ) + payload += conversions.integer_to_bytearray(vTreatmentDurationMinReason ) + payload += conversions.integer_to_bytearray(vTreatmentDurationMaxReason ) + payload += conversions.integer_to_bytearray(vTreatmentDurationDefReason ) + payload += conversions.integer_to_bytearray(vHepBolusVolumeMinReason ) + payload += conversions.integer_to_bytearray(vHepBolusVolumeMaxReason ) + payload += conversions.integer_to_bytearray(vHepBolusVolumeDefReason ) + payload += conversions.integer_to_bytearray(vHepDispRateMinReason ) + payload += conversions.integer_to_bytearray(vHepDispRateMaxReason ) + payload += conversions.integer_to_bytearray(vHepDispRateDefReason ) + payload += conversions.integer_to_bytearray(vHepStopTimeMinReason ) + payload += conversions.integer_to_bytearray(vHepStopTimeMaxReason ) + payload += conversions.integer_to_bytearray(vDialysateTempMinReason ) + payload += conversions.integer_to_bytearray(vDialysateTempMaxReason ) + payload += conversions.integer_to_bytearray(vDialysateTempDefReason ) + payload += conversions.integer_to_bytearray(vPotassiumMinReason ) + payload += conversions.integer_to_bytearray(vPotassiumMaxReason ) + payload += conversions.integer_to_bytearray(vCalciumMinReason ) + payload += conversions.integer_to_bytearray(vCalciumMaxReason ) + payload += conversions.integer_to_bytearray(vDialysateBicarbMinReason ) + payload += conversions.integer_to_bytearray(vDialysateBicarbMaxReason ) + payload += conversions.integer_to_bytearray(vDialysateBicarbDefReason ) + payload += conversions.integer_to_bytearray(vSodiumBicarbMinReason ) + payload += conversions.integer_to_bytearray(vSodiumBicarbMaxReason ) + payload += conversions.integer_to_bytearray(vSodiumBicarbDefReason ) + payload += conversions.integer_to_bytearray(vFluidBolusVolumeMinReason ) + payload += conversions.integer_to_bytearray(vFluidBolusVolumeMaxReason ) + payload += conversions.integer_to_bytearray(vFluidBolusVolumeDefReason ) + payload += conversions.integer_to_bytearray(vArterialPressureMinReason ) + payload += conversions.integer_to_bytearray(vArterialPressureMaxReason ) + payload += conversions.integer_to_bytearray(vArterialPressureDefReason ) + payload += conversions.integer_to_bytearray(vVenousPressureMinReason ) + payload += conversions.integer_to_bytearray(vVenousPressureMaxReason ) + payload += conversions.integer_to_bytearray(vVenousPressureDefReason ) + payload += conversions.integer_to_bytearray(vVenousAsymmetricMinReason ) + payload += conversions.integer_to_bytearray(vVenousAsymmetricMaxReason ) + payload += conversions.integer_to_bytearray(vVenousAsymmetricDefReason ) + payload += conversions.integer_to_bytearray(vTmpPressureMinReason ) + payload += conversions.integer_to_bytearray(vTmpPressureMaxReason ) + payload += conversions.integer_to_bytearray(vTmpPressureDefReason ) + payload += conversions.integer_to_bytearray(vUfVolumeMinReason ) + payload += conversions.integer_to_bytearray(vUfVolumeMaxReason ) + payload += conversions.integer_to_bytearray(vUfVolumeDefReason ) + payload += conversions.integer_to_bytearray(vVitalsIntervalReason ) + payload += conversions.integer_to_bytearray(vRincebackVolumeMinReason ) + payload += conversions.integer_to_bytearray(vRincebackVolumeMaxReason ) + payload += conversions.integer_to_bytearray(vRincebackVolumeDefReason ) + payload += conversions.integer_to_bytearray(vRincebackFlowRateMinReason ) + payload += conversions.integer_to_bytearray(vRincebackFlowRateMaxReason ) + payload += conversions.integer_to_bytearray(vRincebackFlowRateDefReason ) + payload += conversions.integer_to_bytearray(vSubVolumeMinReason ) + payload += conversions.integer_to_bytearray(vSubVolumeMaxReason ) + payload += conversions.integer_to_bytearray(vSubVolumeDefReason ) + 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) + + def td_advanced_institutional_response(self, vRejectionReason : int, + vMinRORejectionRatioAlarmMin : int, + vMinRORejectionRatioAlarmMax : int, + vMinRORejectionRatioAlarmDef : int, + vDisinfectionFrequencyMin : int, + vDisinfectionFrequencyMax : int, + vDisinfectionFrequencyDef : int, + vDisinfectionParametersCycleTimeMin : int, + vDisinfectionParametersCycleTimeMax : int, + vDisinfectionParametersCycleTimeDef : int, + vMaxBloodPumpStopTimeMin : int, + vMaxBloodPumpStopTimeMax : int, + vMaxBloodPumpStopTimeDef : int, + vInletWaterCondLowThresholdMin : int, + vInletWaterCondLowThresholdMax : int, + vInletWaterCondLowThresholdDef : int, + vInletWaterCondHighThresholdMin : int, + vInletWaterCondHighThresholdMax : int, + vInletWaterCondHighThresholdDef : int, + vChlorineWaterSampleCheckMin : int, + vChlorineWaterSampleCheckMax : int, + vChlorineWaterSampleCheckDef : int, + vWaterSampleTestResultRequiredDef : int): + """ + the advanced institutiuonal records 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) + payload += conversions.integer_to_bytearray(vMinRORejectionRatioAlarmMin ) + payload += conversions.integer_to_bytearray(vMinRORejectionRatioAlarmMax ) + payload += conversions.integer_to_bytearray(vMinRORejectionRatioAlarmDef ) + payload += conversions.integer_to_bytearray(vDisinfectionFrequencyMin ) + payload += conversions.integer_to_bytearray(vDisinfectionFrequencyMax ) + payload += conversions.integer_to_bytearray(vDisinfectionFrequencyDef ) + payload += conversions.integer_to_bytearray(vDisinfectionParametersCycleTimeMin) + payload += conversions.integer_to_bytearray(vDisinfectionParametersCycleTimeMax) + payload += conversions.integer_to_bytearray(vDisinfectionParametersCycleTimeDef) + payload += conversions.integer_to_bytearray(vMaxBloodPumpStopTimeMin ) + payload += conversions.integer_to_bytearray(vMaxBloodPumpStopTimeMax ) + payload += conversions.integer_to_bytearray(vMaxBloodPumpStopTimeDef ) + payload += conversions.integer_to_bytearray(vInletWaterCondLowThresholdMin ) + payload += conversions.integer_to_bytearray(vInletWaterCondLowThresholdMax ) + payload += conversions.integer_to_bytearray(vInletWaterCondLowThresholdDef ) + payload += conversions.integer_to_bytearray(vInletWaterCondHighThresholdMin ) + payload += conversions.integer_to_bytearray(vInletWaterCondHighThresholdMax ) + payload += conversions.integer_to_bytearray(vInletWaterCondHighThresholdDef ) + payload += conversions.integer_to_bytearray(vChlorineWaterSampleCheckMin ) + payload += conversions.integer_to_bytearray(vChlorineWaterSampleCheckMax ) + payload += conversions.integer_to_bytearray(vChlorineWaterSampleCheckDef ) + payload += conversions.integer_to_bytearray(vWaterSampleTestResultRequiredDef ) + + + 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) + + def td_Adjust_Advanced_Institutional_Records ( self, vAccepted : int = 1, + vMinRORejectionRatioAlarmMaxRejectionReason : int = 0, + vMinRORejectionRatioAlarmMinRejectionReason : int = 0, + vMinRORejectionRatioAlarmDefRejectionReason : int = 0, + vDisinfectionFrequencyMinRejectionReason : int = 0, + vDisinfectionFrequencyMaxRejectionReason : int = 0, + vDisinfectionFrequencyDefRejectionReason : int = 0, + vDisinfectionParametersCycleTimeMinRejectionReason : int = 0, + vDisinfectionParametersCycleTimeMaxRejectionReason : int = 0, + vDisinfectionParametersCycleTimeDefRejectionReason : int = 0, + vMaxBloodPumpStopTimeMinRejectionReason : int = 0, + vMaxBloodPumpStopTimeMaxRejectionReason : int = 0, + vMaxBloodPumpStopTimeDefRejectionReason : int = 0, + vInletWaterCondLowThresholdMinRejectionReason : int = 0, + vInletWaterCondLowThresholdMaxRejectionReason : int = 0, + vInletWaterCondLowThresholdDefRejectionReason : int = 0, + vInletWaterCondHighThresholdMinRejectionReason : int = 0, + vInletWaterCondHighThresholdMaxRejectionReason : int = 0, + vInletWaterCondHighThresholdDefRejectionReason : int = 0, + vChlorineWaterSampleCheckMinRejectionReason : int = 0, + vChlorineWaterSampleCheckMaxRejectionReason : int = 0, + vChlorineWaterSampleCheckDefRejectionReason : int = 0, + vWaterSampleTestResultRequiredDefRejectionReason : 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. + vMinRORejectionRatioAlarmMaxRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vMinRORejectionRatioAlarmMinRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vMinRORejectionRatioAlarmDefRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDisinfectionFrequencyMinRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDisinfectionFrequencyMaxRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDisinfectionFrequencyDefRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDisinfectionParametersCycleTimeMinRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDisinfectionParametersCycleTimeMaxRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vDisinfectionParametersCycleTimeDefRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vMaxBloodPumpStopTimeMinRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vMaxBloodPumpStopTimeMaxRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vMaxBloodPumpStopTimeDefRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vInletWaterCondLowThresholdMinRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vInletWaterCondLowThresholdMaxRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vInletWaterCondLowThresholdDefRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vInletWaterCondHighThresholdMinRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vInletWaterCondHighThresholdMaxRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vInletWaterCondHighThresholdDefRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vChlorineWaterSampleCheckMinRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vChlorineWaterSampleCheckMaxRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vChlorineWaterSampleCheckDefRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + vWaterSampleTestResultRequiredDefRejectionReason (int, optional): None zero value of rejection reason. Defaults to 0. + """ + payload = conversions.integer_to_bytearray(vAccepted ) + payload += conversions.integer_to_bytearray(vMinRORejectionRatioAlarmMaxRejectionReason ) + payload += conversions.integer_to_bytearray(vMinRORejectionRatioAlarmMinRejectionReason ) + payload += conversions.integer_to_bytearray(vMinRORejectionRatioAlarmDefRejectionReason ) + payload += conversions.integer_to_bytearray(vDisinfectionFrequencyMinRejectionReason ) + payload += conversions.integer_to_bytearray(vDisinfectionFrequencyMaxRejectionReason ) + payload += conversions.integer_to_bytearray(vDisinfectionFrequencyDefRejectionReason ) + payload += conversions.integer_to_bytearray(vDisinfectionParametersCycleTimeMinRejectionReason ) + payload += conversions.integer_to_bytearray(vDisinfectionParametersCycleTimeMaxRejectionReason ) + payload += conversions.integer_to_bytearray(vDisinfectionParametersCycleTimeDefRejectionReason ) + payload += conversions.integer_to_bytearray(vMaxBloodPumpStopTimeMinRejectionReason ) + payload += conversions.integer_to_bytearray(vMaxBloodPumpStopTimeMaxRejectionReason ) + payload += conversions.integer_to_bytearray(vMaxBloodPumpStopTimeDefRejectionReason ) + payload += conversions.integer_to_bytearray(vInletWaterCondLowThresholdMinRejectionReason ) + payload += conversions.integer_to_bytearray(vInletWaterCondLowThresholdMaxRejectionReason ) + payload += conversions.integer_to_bytearray(vInletWaterCondLowThresholdDefRejectionReason ) + payload += conversions.integer_to_bytearray(vInletWaterCondHighThresholdMinRejectionReason ) + payload += conversions.integer_to_bytearray(vInletWaterCondHighThresholdMaxRejectionReason ) + payload += conversions.integer_to_bytearray(vInletWaterCondHighThresholdDefRejectionReason ) + payload += conversions.integer_to_bytearray(vChlorineWaterSampleCheckMinRejectionReason ) + payload += conversions.integer_to_bytearray(vChlorineWaterSampleCheckMaxRejectionReason ) + payload += conversions.integer_to_bytearray(vChlorineWaterSampleCheckDefRejectionReason ) + payload += conversions.integer_to_bytearray(vWaterSampleTestResultRequiredDefRejectionReason ) + + 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, + 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 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.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) + + + def td_rinseback_progress(self, vTargetVolume: float, vDeliveredVolume: float, vFlowRate: int, vTimeout: int, + vCountdown: int, vIsCompleted: int): + """ + rinseback progress message (Msg ID: 0x8F, 143) + Args: + @param vTargetVolume : (float) target volume (mL) + @param vDeliveredVolume : (float) delivered volume (mL) + @param vFlowRate : (int) flow rate (mL/min) + @param vTimeout : (int) timeout (s) + @param vCountdown : (int) countdown time (s) + @param vIsCompleted : (int) completed flag + @return: None + """ + payload = conversions.float_to_bytearray (vTargetVolume ) + payload += conversions.float_to_bytearray (vDeliveredVolume ) + payload += conversions.unsigned_integer_to_bytearray (vFlowRate ) + payload += conversions.unsigned_integer_to_bytearray (vTimeout ) + payload += conversions.unsigned_integer_to_bytearray (vCountdown ) + payload += conversions.integer_to_bytearray (vIsCompleted ) + + 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) + + + def td_rinseback_cmd_response(self, vRejectionReason: int): + """ + rinseback command response message (Msg ID: 0x91, 145) + Args: + @param vRejectionReason : (int) rejection reason + @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_RINSEBACK_CMD_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_isolated_uf_duration_change_response(self, vRejectionReason: int, vVolumeMax: int): + """ + the isolated uf duration change response message (msg id: 0x9C, 156) + args: + @param vRejectionReason (int) : response rejection reason, + if rejection reason is 0, then accepted (0) will be sent, + otherwise rejected (1) + @param vVolmeMax (int) : volume goal maximum (mL) + @return: none + """ + payload = conversions.integer_to_bytearray(1 if vRejectionReason == 0 else 0 ) + payload += conversions.integer_to_bytearray(vRejectionReason ) + payload += conversions.integer_to_bytearray(vVolumeMax ) + + 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) + + + def td_isolated_uf_volume_change_response(self, vRejectionReason: int, vVolume: int, vDuration: int, vRate: int): + """ + the isolated uf volume goal change response message (msg id: 0x9E, 158) + args: + @param vRejectionReason (int) : response rejection reason, + if rejection reason is 0, then accepted (0) will be sent, + otherwise rejected (1) + @param vVolme (int) : volume (mL) + @param vDuration (int) : duration (min) + @param vRate (int) : rate (mL/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(vVolume ) + payload += conversions.integer_to_bytearray(vDuration ) + payload += conversions.integer_to_bytearray(vRate ) + + 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) + + + def td_isolated_uf_confirm_response(self, vRejectionReason: int): + """ + the isolated uf confirm response message (msg id: 0xA0, 160) + args: + @param vRejectionReason (int) : response rejection reason, + if rejection reason is 0, then accepted (0) will be sent, + otherwise rejected (1) + @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_ISOLATED_UF_CONFIRM_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_blood_set_auto_load_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_ADJUST_DISPOSABLES_CONFIRM_RESPONSE.value, + payload=payload) + self.can_interface.send(message, 0) + + def td_blood_set_auto_eject_response(self, vAccepted: int, vRejectionReason: int): + """ + the blood set aito eject 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_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) @@ -639,85 +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, - vTrancembrncPressureLimitWindowRejectReason : 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. - 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. - 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. - 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. - 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. - vTrancembrncPressureLimitWindowRejectReason (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. - vHeparinBolusVolumeRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + 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. + vHeparinDeliveryDurationRejectReason (int, optional): None zero value of rejection reason. Defaults to 0. + vHeparinTypeRejectReason (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. + 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. + 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(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(vHeparinTypeRejectReason ) - payload += conversions.integer_to_bytearray(vAcidConcentrateRejectReason ) - payload += conversions.integer_to_bytearray(vBicarbonateConcentrateRejectReason ) - payload += conversions.integer_to_bytearray(vDialyzerTypeRejectReason ) - payload += conversions.integer_to_bytearray(vBloodPressureMeasureIntervalRejectReason ) - payload += conversions.integer_to_bytearray(vRinsebackFlowRateRejectReason ) - 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(vTrancembrncPressureLimitWindowRejectReason ) - payload += conversions.integer_to_bytearray(vDialysateTempRejectReason ) - payload += conversions.integer_to_bytearray(vHeparinDispensingRateRejectReason ) - payload += conversions.integer_to_bytearray(vHeparinBolusVolumeRejectReason ) + 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(vHeparinDeliveryDurationRejectReason ) + payload += conversions.integer_to_bytearray(vHeparinTypeRejectReason ) + 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(vFluidBolusVolumeRejectReason ) + payload += conversions.integer_to_bytearray(vBloodPressureMeasureIntervalRejecteason ) + payload += conversions.integer_to_bytearray(vRinsebackVolumeRejectReason ) + 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) @@ -760,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 @@ -780,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: @@ -790,7 +2038,7 @@ if has_parameters: payload = parameters_payload - message = CAN.DenaliMessage.build_message( + message = CAN.CanMessage.build_message( channel_id, message_id, payload