Index: leahi_dialin/common/msg_ids.py =================================================================== diff -u -rce1a61bb1d92b910ccf889dd3026316a9bf7e01e -rd710522ba28b7ea7534904a42940c2c41f3558e4 --- leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision ce1a61bb1d92b910ccf889dd3026316a9bf7e01e) +++ leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision d710522ba28b7ea7534904a42940c2c41f3558e4) @@ -20,54 +20,54 @@ # Branch: staging @unique class MsgIds(DialinEnum): - MSG_ID_UNUSED = 0x0 - MSG_ID_ALARM_STATUS_DATA = 0x1 - MSG_ID_ALARM_TRIGGERED = 0x2 - MSG_ID_ALARM_CLEARED = 0x3 - MSG_ID_ALARM_CONDITION_CLEARED = 0x4 - MSG_ID_USER_ALARM_SILENCE_REQUEST = 0x5 - MSG_ID_UI_ALARM_USER_ACTION_REQUEST = 0x6 - MSG_ID_TD_ALARM_INFORMATION_DATA = 0x7 - MSG_ID_DD_ALARM_INFO_DATA = 0x8 - MSG_ID_UI_ACTIVE_ALARMS_LIST_REQUEST = 0x9 - MSG_ID_TD_ACTIVE_ALARMS_LIST_REQUEST_RESPONSE = 0xA - MSG_ID_UI_SET_ALARM_AUDIO_VOLUME_LEVEL_CMD_REQUEST = 0xB - MSG_ID_TD_ALARM_AUDIO_VOLUME_SET_RESPONSE = 0xC - MSG_ID_FW_VERSIONS_REQUEST = 0xD + MSG_ID_UNUSED = 0x0 + MSG_ID_ALARM_STATUS_DATA = 0x1 + MSG_ID_ALARM_TRIGGERED = 0x2 + MSG_ID_ALARM_CLEARED = 0x3 + MSG_ID_ALARM_CONDITION_CLEARED = 0x4 + MSG_ID_USER_ALARM_SILENCE_REQUEST = 0x5 + MSG_ID_UI_ALARM_USER_ACTION_REQUEST = 0x6 + MSG_ID_TD_ALARM_INFORMATION_DATA = 0x7 + MSG_ID_DD_ALARM_INFO_DATA = 0x8 + MSG_ID_UI_ACTIVE_ALARMS_LIST_REQUEST = 0x9 + MSG_ID_TD_ACTIVE_ALARMS_LIST_REQUEST_RESPONSE = 0xA + MSG_ID_UI_SET_ALARM_AUDIO_VOLUME_LEVEL_CMD_REQUEST = 0xB + MSG_ID_TD_ALARM_AUDIO_VOLUME_SET_RESPONSE = 0xC + MSG_ID_FW_VERSIONS_REQUEST = 0xD MSG_ID_TD_VERSION_RESPONSE = 0xE MSG_ID_DD_VERSION_RESPONSE = 0xF - MSG_ID_UI_CHECK_IN = 0x10 - MSG_ID_TD_BLOOD_PUMP_DATA = 0x11 - MSG_ID_TD_OP_MODE_DATA = 0x12 - MSG_ID_DD_OP_MODE_DATA = 0x13 - MSG_ID_DD_COMMAND_RESPONSE = 0x14 - MSG_ID_TD_UI_VERSION_INFO_REQUEST = 0x15 - MSG_ID_UI_VERSION_INFO_RESPONSE = 0x16 - MSG_ID_TD_EVENT = 0x17 - MSG_ID_DD_EVENT = 0x18 - MSG_ID_TD_DD_ALARMS_REQUEST = 0x19 - MSG_ID_UI_TD_RESET_IN_SERVICE_MODE_REQUEST = 0x1A - MSG_ID_DD_VALVES_STATES_DATA = 0x1B - MSG_ID_DD_PRESSURES_DATA = 0x1C - MSG_ID_TD_VOLTAGES_DATA = 0x1D - MSG_ID_TD_BUBBLES_DATA = 0x1E - MSG_ID_DD_CONDUCTIVITY_DATA = 0x1F - MSG_ID_TD_AIR_PUMP_DATA = 0x20 - MSG_ID_TD_SWITCHES_DATA = 0x21 - MSG_ID_POWER_OFF_WARNING = 0x22 - MSG_ID_OFF_BUTTON_PRESS_REQUEST = 0x23 + MSG_ID_UI_CHECK_IN = 0x10 + MSG_ID_TD_BLOOD_PUMP_DATA = 0x11 + MSG_ID_TD_OP_MODE_DATA = 0x12 + MSG_ID_DD_OP_MODE_DATA = 0x13 + MSG_ID_DD_COMMAND_RESPONSE = 0x14 + MSG_ID_TD_UI_VERSION_INFO_REQUEST = 0x15 + MSG_ID_UI_VERSION_INFO_RESPONSE = 0x16 + MSG_ID_TD_EVENT = 0x17 + MSG_ID_DD_EVENT = 0x18 + MSG_ID_TD_DD_ALARMS_REQUEST = 0x19 + MSG_ID_UI_TD_RESET_IN_SERVICE_MODE_REQUEST = 0x1A + MSG_ID_DD_VALVES_STATES_DATA = 0x1B + MSG_ID_DD_PRESSURES_DATA = 0x1C + MSG_ID_TD_VOLTAGES_DATA = 0x1D + MSG_ID_TD_BUBBLES_DATA = 0x1E + MSG_ID_DD_CONDUCTIVITY_DATA = 0x1F + MSG_ID_TD_AIR_PUMP_DATA = 0x20 + MSG_ID_TD_SWITCHES_DATA = 0x21 + MSG_ID_POWER_OFF_WARNING = 0x22 + MSG_ID_OFF_BUTTON_PRESS_REQUEST = 0x23 MSG_ID_TD_PRESSURE_DATA = 0x24 - MSG_ID_DD_CONCENTRATE_PUMP_DATA = 0x25 - MSG_ID_DD_TEMPERATURE_DATA = 0x26 - MSG_ID_DIALYSATE_PUMPS_DATA = 0x27 - MSG_ID_DD_HEATERS_DATA = 0x28 - MSG_ID_DD_LEVEL_DATA = 0x29 - MSG_ID_TD_AIR_TRAP_DATA = 0x2A - MSG_ID_TD_VALVES_DATA = 0x2B + MSG_ID_DD_CONCENTRATE_PUMP_DATA = 0x25 + MSG_ID_DD_TEMPERATURE_DATA = 0x26 + MSG_ID_DIALYSATE_PUMPS_DATA = 0x27 + MSG_ID_DD_HEATERS_DATA = 0x28 + MSG_ID_DD_LEVEL_DATA = 0x29 + MSG_ID_TD_AIR_TRAP_DATA = 0x2A + MSG_ID_TD_VALVES_DATA = 0x2B MSG_ID_FP_EVENT = 0x2C MSG_ID_FP_ALARM_INFO_DATA= 0x2D - MSG_ID_DD_BAL_CHAMBER_DATA = 0x2E - MSG_ID_DD_GEN_DIALYSATE_MODE_DATA = 0x2F + MSG_ID_DD_BAL_CHAMBER_DATA = 0x2E + MSG_ID_DD_GEN_DIALYSATE_MODE_DATA = 0x2F MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA = 0x30 MSG_ID_FP_VALVES_STATES_DATA = 0x31 MSG_ID_FP_RO_PUMP_DATA = 0x32 @@ -170,6 +170,7 @@ MSG_ID_TD_ADJUST_DISPOSABLES_CONFIRM_RESPONSE = 0x93 MSG_ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_REQUEST = 0x94 MSG_ID_TD_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RESPONSE = 0x95 + TBD_96 = 0x96 MSG_ID_TD_BLOOD_PRIME_PROGRESS_DATA = 0x97 MSG_ID_UI_BLOOD_PRIME_CMD_REQUEST = 0x98 MSG_ID_TD_BLOOD_PRIME_CMD_RESPONSE = 0x99 @@ -202,36 +203,36 @@ MSG_ID_FFU_SIGNAL_DD_UPDATE_AVAILABLE = 0xB4 MSG_ID_TD_UI_CONFIRMATION_REQUEST = 0xB5 MSG_ID_UI_CONFIRMATION_RESULT_RESPONSE = 0xB6 - AVAILABLE_MSG_ID_B7 = 0xB7 + MSG_ID_TD_PRE_TREATMENT_STATE_DATA = 0xB7 MSG_ID_UI_VITALS_ADJUSTMENT_REQUEST = 0xB8 MSG_ID_TD_VITALS_ADJUSTMENT_RESPONSE = 0xB9 MSG_ID_UI_ISO_UF_STATE_REQUEST = 0xBA MSG_ID_TD_ISO_UF_STATE_RESPONSE = 0xBB - MSG_ID_UI_DD_NVM_SET_SYSTEM_RECORD = 0xBC - MSG_ID_DD_NVM_SERVICE_RECORD_RESPONSE = 0xBD - MSG_ID_DD_NVM_SET_SERVICE_RECORD = 0xBE - MSG_ID_DD_NVM_INSTITUTIONAL_RECORD_RESPONSE = 0xBF - MSG_ID_DD_NVM_SET_INSTITUTIONAL_RECORD = 0xC0 - MSG_ID_DD_NVM_USAGE_INFO_RECORD_RESPONSE = 0xC1 - MSG_ID_DD_NVM_SET_USAGE_INFO_RECORD = 0xC2 + MSG_ID_TD_HEMODIAFILTRATION_DATA = 0xBC + MSG_ID_UI_PAUSE_SUB_FLOW_REQUEST = 0xBD + MSG_ID_TD_PAUSE_SUB_FLOW_RESPONSE = 0xBE + MSG_ID_UI_AUTO_SUBSTITUTION_REQUEST = 0xBF + MSG_ID_TD_AUTO_SUBSTITUTION_REPONSE = 0xC0 + MSG_ID_UI_HDF_ADJUSTMENT_REQUEST = 0xC1 + MSG_ID_TD_HDF_ADJUSTMENT_RESPONSE = 0xC2 MSG_ID_DD_NVM_CAL_PRESSURE_SENSOR_RESPONSE = 0xC3 - MSG_ID_DD_NVM_SET_CAL_PRESSURE_SENSOR = 0xC4 - MSG_ID_DD_NVM_CAL_TEMP_SENSOR_RESPONSE = 0xC5 - MSG_ID_DD_NVM_SET_CAL_TEMP_SENSOR = 0xC6 + MSG_ID_TD_DRY_BICARD_DISCONNECT_DATA = 0xC4 + MSG_ID_UI_DRY_BICARD_DISCONNECT_REQUEST = 0xC5 + MSG_ID_TD_DRY_BICARD_DISCONNECT_RESPONSE = 0xC6 MSG_ID_DD_NVM_CAL_CONC_PUMP_RESPONSE = 0xC7 - MSG_ID_DD_NVM_SET_CAL_CONC_PUMP = 0xC8 + MSG_ID_UI_DD_NVM_SET_CAL_CONC_PUMP_REQUEST = 0xC8 MSG_ID_DD_NVM_CAL_D12_PUMP_RESPONSE = 0xC9 - MSG_ID_DD_NVM_SET_CAL_D12_PUMP = 0xCA + MSG_ID_UI_DD_NVM_SET_CAL_D12_PUMP_REQUEST = 0xCA MSG_ID_DD_NVM_CAL_D48_PUMP_RESPONSE = 0xCB - MSG_ID_DD_NVM_SET_CAL_D48_PUMP = 0xCC + MSG_ID_UI_DD_NVM_SET_CAL_D48_PUMP_REQUEST = 0xCC MSG_ID_DD_NVM_CAL_ACID_CONCENTRATE_RESPONSE = 0xCD - MSG_ID_DD_NVM_SET_CAL_ACID_CONCENTRATE = 0xCE + MSG_ID_UI_DD_NVM_SET_CAL_ACID_CONCENTRATE_REQUEST = 0xCE MSG_ID_DD_NVM_CAL_BICARB_CONCENTRATE_RESPONSE = 0xCF - MSG_ID_DD_NVM_SET_CAL_BICARB_CONCENTRATE = 0xD0 + MSG_ID_UI_DD_NVM_SET_CAL_BICARB_CONCENTRATE_REQUEST = 0xD0 MSG_ID_DD_NVM_CAL_ACCEL_SENSOR_RESPONSE = 0xD1 - MSG_ID_DD_NVM_SET_CAL_ACCEL_SENSOR = 0xD2 + MSG_ID_UI_DD_NVM_SET_CAL_ACCEL_SENSOR_REQUEST = 0xD2 MSG_ID_DD_NVM_CAL_BLOOD_LEAK_SENSOR_RESPONSE = 0xD3 - MSG_ID_DD_NVM_SET_CAL_BLOOD_LEAK_SENSOR = 0xD4 + MSG_ID_UI_DD_NVM_SET_CAL_BLOOD_LEAK_SENSOR_REQUEST = 0xD4 MSG_ID_DD_NVM_RECORD_CRC_OVERRIDE_REQUEST = 0xD5 MSG_ID_UI_SETUP_CONNECTION_CONFIRM_REQUEST = 0xD6 MSG_ID_TD_SETUP_CONNECTION_CONFIRM_RESPONSE = 0xD7 @@ -240,21 +241,42 @@ MSG_ID_TD_UI_CANCEL_REQUEST = 0xDA MSG_ID_DD_SUBSTITUTION_PUMP_DATA = 0xDB MSG_ID_DD_CONDUCTIVITY_SENSOR_RESISTANCE_DATA = 0xDC - MSG_ID_UI_TD_NVM_GET_RECORD_REQUEST = 0xDD - MSG_ID_TD_NVM_SYSTEM_RECORD_RESPONSE = 0xDE - MSG_ID_UI_TD_NVM_SET_SYSTEM_RECORD = 0xDF - MSG_ID_TD_NVM_SERVICE_RECORD_RESPONSE = 0xE0 - MSG_ID_UI_TD_NVM_SET_SERVICE_RECORD = 0xE1 - MSG_ID_TD_NVM_INSTITUTIONAL_RECORD_RESPONSE = 0xE2 - MSG_ID_UI_TD_NVM_SET_INSTITUTIONAL_RECORD = 0xE3 - MSG_ID_TD_NVM_USAGE_INFO_RECORD_RESPONSE = 0xE4 - MSG_ID_UI_TD_NVM_SET_USAGE_INFO_RECORD = 0xE5 - MSG_ID_TD_NVM_CAL_RESPONSE = 0xE6 - MSG_ID_UI_TD_NVM_SET_CAL_RECORD = 0xE7 - - + MSG_ID_FP_FILTER_FLUSH_DATA = 0xDD + MSG_ID_FP_PERMEATE_FLUSH_DATA = 0xDE + MSG_ID_DD_NVM_GET_RECORD_RESPONSE = 0xDF + MSG_ID_DD_NVM_SET_SYSTEM_RECORD_RESPONSE = 0xE0 + MSG_ID_DD_NVM_SET_SERVICE_RECORD_RESPONSE = 0xE1 + MSG_ID_DD_NVM_SET_INSTITUTIONAL_RECORD_RESPONSE = 0xE2 + MSG_ID_DD_NVM_SET_USAGE_INFO_RECORD_RESPONSE = 0xE3 + MSG_ID_DD_NVM_SET_CAL_PRESSURE_SENSOR_RESPONSE = 0xE4 + MSG_ID_DD_NVM_SET_CAL_TEMP_SENSOR_RESPONSE = 0xE5 + MSG_ID_DD_NVM_SET_CAL_CONC_PUMP_RESPONSE = 0xE6 + MSG_ID_DD_NVM_SET_CAL_D12_PUMP_RESPONSE = 0xE7 + MSG_ID_DD_NVM_SET_CAL_D48_PUMP_RESPONSE = 0xE8 + MSG_ID_DD_NVM_SET_CAL_ACID_CONCENTRATE_RESPONSE = 0xE9 + MSG_ID_DD_NVM_SET_CAL_BICARB_CONCENTRATE_RESPONSE = 0xEA + MSG_ID_UI_RO_WATER_MODE_REQUEST = 0xEB + MSG_ID_DD_RO_WATER_MODE_RESPONSE = 0xEC + MSG_ID_UI_ADJUST_RO_WATER_MODE_REQUEST = 0xED + MSG_ID_DD_ADJUST_RO_WATER_MODE_RESPONSE = 0xEE + TBD_EF = 0xEF MSG_ID_DD_PISTON_PUMP_CONTROL_DATA = 0xF0 + + + MSG_ID_UI_TD_NVM_GET_RECORD_REQUEST = 0x100 + MSG_ID_TD_NVM_SYSTEM_RECORD_RESPONSE = 0x101 + MSG_ID_UI_TD_NVM_SET_SYSTEM_RECORD = 0x102 + MSG_ID_TD_NVM_SERVICE_RECORD_RESPONSE = 0x103 + MSG_ID_UI_TD_NVM_SET_SERVICE_RECORD = 0x104 + MSG_ID_TD_NVM_INSTITUTIONAL_RECORD_RESPONSE = 0x105 + MSG_ID_UI_TD_NVM_SET_INSTITUTIONAL_RECORD = 0x106 + MSG_ID_TD_NVM_USAGE_INFO_RECORD_RESPONSE = 0x107 + MSG_ID_UI_TD_NVM_SET_USAGE_INFO_RECORD = 0x108 + MSG_ID_TD_NVM_CAL_RESPONSE = 0x109 + MSG_ID_UI_TD_NVM_SET_CAL_RECORD = 0x10A + MSG_ID_TD_NVM_RECORD_CRC_OVERRIDE_REQUEST = 0x10B + MSG_ID_TD_TESTER_LOGIN_REQUEST = 0x8000 MSG_ID_TD_SOFTWARE_RESET_REQUEST = 0x8001 MSG_ID_TD_SEND_TEST_CONFIGURATION = 0x8002 @@ -340,7 +362,11 @@ MSG_ID_TD_SYRINGE_PUMP_FORCE_SENSOR_CALIBRATION_REQUEST = 0x8060 MSG_ID_TD_GET_ALARM_PROPERTIES_REQUEST = 0x8061 MSG_ID_TD_ALARM_PROPERTIES_RESPONSE = 0x8062 + MSG_ID_BATTERY_REGISTERS_OVERRIDE_REQUEST = 0x8063 + MSG_ID_TD_BATTERY_PUBLISH_INTERVAL_OVERRIDE_REQUEST = 0x8064 + MSG_ID_TD_BATTERY_I2C_STATUS_OVERRIDE_REQUEST = 0x8068 + MSG_ID_TD_TRAINING_TEST_OVERRIDE_REQUEST = 0x8999 MSG_ID_DD_TESTER_LOGIN_REQUEST = 0xA000 @@ -459,6 +485,7 @@ MSG_ID_DD_MIXING_CONTROL_DATA = 0xA072 MSG_ID_DD_MIXING_CONTROL_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST = 0xA073 MSG_ID_DD_BICART_DEPRESSURISE_REQUEST_OVERRIDE_REQUEST = 0xA074 + # Placeholder messages MSG_ID_DD_ALARM_STATE_OVERRIDE_REQUEST = 0xAF03 MSG_ID_DD_STOP_GEN_DIALYSATE_MODE_OVERRIDE_REQUEST = 0xAF04 Index: leahi_dialin/ui/td_messaging.py =================================================================== diff -u -r5ba18a64ff52ea9cc0f46616a44c9f09ea48368e -rd710522ba28b7ea7534904a42940c2c41f3558e4 --- leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision 5ba18a64ff52ea9cc0f46616a44c9f09ea48368e) +++ leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision d710522ba28b7ea7534904a42940c2c41f3558e4) @@ -326,6 +326,51 @@ self.can_interface.send(message, 0) + + def td_syringePump(self, PumpState : int , + DeliveryState : int , + SetRate : float, + MeasRate : float, + Position : int , + VolumeDelivered : float, + Home : float, + Force : float, + SafetyVolume : float, + Status : int ): + """ + 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_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.unsigned_integer_to_bytearray(PumpState ) + payload += conversions.unsigned_integer_to_bytearray(DeliveryState ) + payload += conversions.float_to_bytearray (SetRate ) + payload += conversions.float_to_bytearray (MeasRate ) + payload += conversions.unsigned_integer_to_bytearray(Position ) + payload += conversions.float_to_bytearray (VolumeDelivered ) + payload += conversions.float_to_bytearray (Home ) + payload += conversions.float_to_bytearray (Force ) + payload += conversions.float_to_bytearray (SafetyVolume ) + payload += conversions.unsigned_integer_to_bytearray(Status ) + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_SYRINGE_PUMP_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, @@ -367,6 +412,7 @@ self.can_interface.send(message, 0) + def td_pressure(self, H2_arterial_pressure : float , H14_venous_pressure : float , @@ -428,8 +474,8 @@ self.can_interface.send(message, 0) def td_heparin( self, - target : float , cumulative : float , + target : float , time_remaining : int ): """ Broadcasts the current TD Heparin data (Msg ID: 0xXX, XX) @@ -443,9 +489,9 @@ raise ValueError("CAN Interface is not enabled") - payload = conversions.float_to_bytearray (target ) - payload += conversions.float_to_bytearray (cumulative ) - payload += conversions.unsigned_integer_to_bytearray(time_remaining ) + payload = conversions.float_to_bytearray (cumulative ) + payload += conversions.float_to_bytearray (target ) + payload += conversions.unsigned_integer_to_bytearray(time_remaining ) message = CAN.CanMessage.build_message( channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, @@ -749,25 +795,66 @@ self.can_interface.send(message, 0) - def td_recirculate_progress(self, vTimeout: int, - vCountdown: int): + def td_dry_bicart_disconnect_data(self, vShowDialog : int, + vTotal : int, + vProgress : int, + vDrainInProgress : int, + vDepressurizeInProgress : 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 ) + payload = conversions.integer_to_bytearray ( vShowDialog ) + payload += conversions.integer_to_bytearray ( vTotal ) + payload += conversions.integer_to_bytearray ( vProgress ) + payload += conversions.integer_to_bytearray ( vDrainInProgress ) + payload += conversions.integer_to_bytearray ( vDepressurizeInProgress ) message = CAN.CanMessage.build_message( channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_DRY_BICARD_DISCONNECT_DATA.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_recirculate_progress(self, vCountdown: int): + """ + rinseback progress message (Msg ID: 0x8F, 143) + Args: + @param vCountdown : (int) Current Timeout count down of Recirculate delivery + @return: None + """ + 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_dry_bicart_cmd_response(self, vAccepted: int, vRejectionReason: int): + """ + rinseback command response message (Msg ID: 0xC6, 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_DRY_BICARD_DISCONNECT_RESPONSE.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) @@ -1464,7 +1551,7 @@ def td_rinseback_progress(self, vTargetVolume: float, vDeliveredVolume: float, vFlowRate: int, vTimeout: int, - vCountdown: int, vIsCompleted: int): + vCountdown: int, vIsCompleted: int, vIsAllowed: int): """ rinseback progress message (Msg ID: 0x8F, 143) Args: @@ -1482,6 +1569,7 @@ payload += conversions.unsigned_integer_to_bytearray (vTimeout ) payload += conversions.unsigned_integer_to_bytearray (vCountdown ) payload += conversions.integer_to_bytearray (vIsCompleted ) + payload += conversions.integer_to_bytearray (vIsAllowed ) message = CAN.CanMessage.build_message( channel_id=CAN.CanChannels.td_to_ui_ch_id, @@ -1634,6 +1722,24 @@ payload=payload) self.can_interface.send(message, 0) + + def td_patient_connect_confirm_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_SETUP_CONNECTION_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) @@ -2008,6 +2114,7 @@ payload=payload) self.can_interface.send(message, 0) + def td_tx_state(self, sub_mode : int, blood_prime_state : int, @@ -2054,6 +2161,46 @@ self.can_interface.send(message, 0) + def td_pre_tx_state(self, + sub_mode : int, + install_state : int, + self_test_dry_state : int, + prime_state : int, + recirculate_state : int, + confirm_rx_state : int, + heparin_setup_state : int, + patient_connection_state: int) -> None: + """A general method to send any standard response message, by it's id and list of parameters. (Msg ID: 0xB7, 60) + Args: + sub_mode (int): Treatment Submode + install_state (int): Pre-Treatment install_state + self_test_dry_state (int): Pre-Treatment self_test_dry_state + prime_state (int): Pre-Treatment prime_state + recirculate_state (int): Pre-Treatment recirculate_state + confirm_rx_state (int): Pre-Treatment confirm_rx_state + heparin_setup_state (int): Pre-Treatment heparin_setup_state + patient_connection_state (int): Pre-Treatment patient_connection_state + """ + if not self.can_enabled: + raise ValueError("CAN Interface is not enabled") + + payload = conversions.unsigned_integer_to_bytearray(sub_mode ) + payload += conversions.unsigned_integer_to_bytearray(install_state ) + payload += conversions.unsigned_integer_to_bytearray(self_test_dry_state ) + payload += conversions.unsigned_integer_to_bytearray(prime_state ) + payload += conversions.unsigned_integer_to_bytearray(recirculate_state ) + payload += conversions.unsigned_integer_to_bytearray(confirm_rx_state ) + payload += conversions.unsigned_integer_to_bytearray(heparin_setup_state ) + payload += conversions.unsigned_integer_to_bytearray(patient_connection_state ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_PRE_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 @@ -2121,14 +2268,109 @@ payload += conversions.float_to_bytearray(tmpPressure ) payload += conversions.float_to_bytearray(dialysate_temp ) - 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_TREATMENT_LOG_AVERAGE_DATA.value, payload=payload) self.can_interface.send(message, 0) + def td_hdf_data(self, HDFState : int, + AutoSubState : int, + reqRate : float, + targetTMP : float, + currentRate : float, + currentTMP : float, + reqVol : float, + totalVol : float, + IsHdfReqState : int) -> None: + """ + send the treatment log data + @param HDFState : (U32) blood flow rate + @param AutoSubState : (U32) dialysate flow rate + @param reqRate : (F32) uf flow rate + @param targetTMP : (F32) arterial Pressure + @param currentRate : (F32) venous Pressure + @param currentTMP : (F32) tmp Pressure + @param reqVol : (F32) dialysate temp + @param totalVol : (F32) dialysate temp + @param IsHdfReqState : (U32) dialysate temp + @return: none + """ + payload = conversions.integer_to_bytearray(HDFState ) + payload += conversions.integer_to_bytearray(AutoSubState ) + payload += conversions.float_to_bytearray (reqRate ) + payload += conversions.float_to_bytearray (targetTMP ) + payload += conversions.float_to_bytearray (currentRate ) + payload += conversions.float_to_bytearray (currentTMP ) + payload += conversions.float_to_bytearray (reqVol ) + payload += conversions.float_to_bytearray (totalVol ) + payload += conversions.integer_to_bytearray(IsHdfReqState ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_HEMODIAFILTRATION_DATA.value, + payload=payload) + + self.can_interface.send(message, 0) + + + def td_hdf_state_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_PAUSE_SUB_FLOW_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + + def td_auto_sub_state_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_AUTO_SUBSTITUTION_REPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + + def td_hdf_adjust_response(self, vAccepted: int, vTxModeRejectionReason: int, vFluidVOlumeRejectionReason: 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(vTxModeRejectionReason ) + payload += conversions.integer_to_bytearray(vFluidVOlumeRejectionReason ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_HDF_ADJUSTMENT_RESPONSE.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,