Index: leahi_dialin/common/msg_ids.py =================================================================== diff -u -r94752123638e25dd446cc94728947c40cd0309a1 -rf4f77dba3569964287c7f479deb93b9c9b44e15d --- leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 94752123638e25dd446cc94728947c40cd0309a1) +++ leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision f4f77dba3569964287c7f479deb93b9c9b44e15d) @@ -167,7 +167,14 @@ MSG_ID_TD_BLOOD_PRIME_PROGRESS_DATA = 0x97 MSG_ID_UI_BLOOD_PRIME_CMD_REQUEST = 0x98 MSG_ID_TD_BLOOD_PRIME_CMD_RESPONSE = 0x99 - + MSG_ID_TD_ISOLATED_UF_DATA = 0x9A + MSG_ID_UI_ISOLATED_UF_DURATION_CHANGE_REQUEST = 0x9B + MSG_ID_TD_ISOLATED_UF_DURATION_CHANGE_RESPONSE = 0x9C + MSG_ID_UI_ISOLATED_UF_VOLUME_GOAL_CHANGE_REQUEST = 0x9D + MSG_ID_TD_ISOLATED_UF_VOLUME_GOAL_CHANGE_RESPONSE = 0x9E + MSG_ID_UI_ISOLATED_UF_CONFIRM_REQUEST = 0x9F + MSG_ID_TD_ISOLATED_UF_CONFIRM_RESPONSE = 0xA0 + MSG_ID_DD_PISTON_PUMP_CONTROL_DATA = 0xF0 MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST = 0X92 Index: leahi_dialin/ui/td_messaging.py =================================================================== diff -u -r963e5d8e4f406feda18b1b3ed775ddd3f13a4b4a -rf4f77dba3569964287c7f479deb93b9c9b44e15d --- leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision 963e5d8e4f406feda18b1b3ed775ddd3f13a4b4a) +++ leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision f4f77dba3569964287c7f479deb93b9c9b44e15d) @@ -505,6 +505,7 @@ self.can_interface.send(message, 0) + def td_treatment_time( self, tx_duration_s : int , tx_elapsed_s : int , @@ -635,9 +636,40 @@ channel_id=CAN.DenaliChannels.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_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.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.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): @@ -1230,22 +1262,22 @@ payload=payload) self.can_interface.send(message, 0) - def td_duration_validate_response(self, vRejectionReason: int, vDuration: int, vUFVolumeGoal: float, vUFRate: float): + def td_duration_validate_response(self, vRejectionReason: int, vDuration: 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 vUFVolumeGoal (float) : UF volume goal (mL) - @param vUFRate (float) : UF rate (L/hr) + @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) @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.float_to_bytearray(vUFVolumeGoal ) + payload += conversions.float_to_bytearray(vUFVolume ) payload += conversions.float_to_bytearray(vUFRate ) message = CAN.DenaliMessage.build_message( @@ -1299,6 +1331,71 @@ 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.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.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.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.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.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.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)