Index: leahi_dialin/common/msg_ids.py =================================================================== diff -u -r8ea0a9904718b6e9527c4a7d6cb79a80b8fffc97 -rb106d94fa757d98b7092155bfd0ae16dd36b1c1a --- leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 8ea0a9904718b6e9527c4a7d6cb79a80b8fffc97) +++ leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision b106d94fa757d98b7092155bfd0ae16dd36b1c1a) @@ -192,11 +192,16 @@ MSG_ID_TD_ADJUST_TREATMENT_LOGS_RESPONSE = 0xAA MSG_ID_TD_WATER_SAMPLE_RESULT_RESPONSE = 0xAB MSG_ID_TD_WATER_SAMPLE_DATA = 0xAC - MSG_ID_TD_TREATMENT_LOG_AVERAGE_DATA = 0xAD + MSG_ID_TD_DRY_SELF_TEST_PROGRESS_DATA = 0xAD MSG_ID_TD_TUBE_SET_AUTHENTICATION_REQUEST = 0xAE MSG_ID_UI_TUBE_SET_AUTHENTICATION_ACK_RESPONSE = 0xAF MSG_ID_TD_SYRINGE_PUMP_DATA = 0xB1 MSG_ID_TD_HEPARIN_PAUSE_RESUME_RESPONSE= 0xB2 + MSG_ID_FFU_SIGNAL_TD_UPDATE_AVAILABLE = 0xB3 + MSG_ID_FFU_SIGNAL_DD_UPDATE_AVAILABLE = 0xB4 + MSG_ID_TD_UI_CONFIRMATION_REQUEST = 0xB5 + MSG_ID_UI_CONFIRMATION_RESULT_RESPONSE = 0xB6 + MSG_ID_TD_POWER_OFF_REQUEST = 0xB7 MSG_ID_UI_VITALS_ADJUSTMENT_REQUEST = 0xB8 MSG_ID_TD_VITALS_ADJUSTMENT_RESPONSE = 0xB9 @@ -379,10 +384,29 @@ MSG_ID_DD_BICARB_CHAMBER_FILL_REQUEST_OVERRIDE_REQUEST = 0xA059 MSG_ID_DD_BICART_DRAIN_REQUEST_OVERRIDE_REQUEST = 0xA05A MSG_ID_DD_BICART_CARTRIDGE_SELECT_OVERRIDE_REQUEST = 0xA05B + MSG_ID_DD_SET_CONDUCTIVITY_MODEL_REQUEST = 0xA05C + MSG_ID_DD_CONDUCTIVITY_SENSOR_RESISTANCE_OVERRIDE_REQUEST = 0xA05D + MSG_ID_DD_CONDUCTIVITY_SENSOR_VERSION_REQUEST = 0xA05E + MSG_ID_DD_CONDUCTIVITY_SENSOR_VERSION_RESPONSE = 0xA05F + MSG_ID_DD_BICARB_MIX_VOL_CONTROL_KP_GAIN_COEFF_OVERRIDE_REQUEST = 0xA060 + MSG_ID_DD_BICARB_MIX_VOL_CONTROL_KI_GAIN_COEFF_OVERRIDE_REQUEST = 0xA061 + MSG_ID_DD_ACID_MIX_VOL_CONTROL_KP_GAIN_COEFF_OVERRIDE_REQUEST = 0xA062 + MSG_ID_DD_ACID_MIX_VOL_CONTROL_KI_GAIN_COEFF_OVERRIDE_REQUEST = 0xA063 + MSG_ID_DD_ACID_MIX_VOL_OVERRIDE_REQUEST = 0xA064 + MSG_ID_DD_BICARB_MIX_VOL_OVERRIDE_REQUEST = 0xA065 + MSG_ID_DD_BICARB_TARGET_CONDUCTIVITY_OVERRIDE_REQUEST = 0xA066 + MSG_ID_DD_BICARB_DELTA_CONDUCTIVITY_OVERRIDE_REQUEST = 0xA067 + MSG_ID_DD_DIALYSATE_TARGET_CONDUCTIVITY_OVERRIDE_REQUEST = 0xA068 + MSG_ID_DD_DIALYSATE_DELTA_CONDUCTIVITY_OVERRIDE_REQUEST = 0xA069 + MSG_ID_DD_BICART_UPPER_PRESSURE_OVERRIDE_REQUEST = 0xA06A + MSG_ID_DD_BICART_LOWER_PRESSURE_OVERRIDE_REQUEST = 0xA06B + MSG_ID_DD_FLOATER_LEVEL_OVERRIDE_REQUEST = 0xA06C + MSG_ID_DD_SUBSTITUTION_PUMP_START_STOP_OVERRIDE_REQUEST = 0xA06D + MSG_ID_DD_SUBSTITUTION_PUMP_BROADCAST_OVERRIDE_REQUEST = 0xA06E + MSG_ID_DD_SUBSTITUTION_PUMP_TARGET_SPEED_OVERRIDE_REQUEST = 0xA06F + MSG_ID_DD_CONDUCTIVITY_SENSOR_CAL_REQUEST = 0xA070 + MSG_ID_DD_CONDUCTIVITY_SENSOR_CAL_RESPONSE = 0xA071 - MSG_ID_DD_SET_CONDUCTIVITY_MODEL_REQUEST = 0xA100 - MSG_ID_DD_CONDUCTIVITY_SENSOR_RESISTANCE_OVERRIDE_REQUEST = 0xA101 - # Placeholder messages MSG_ID_DD_ALARM_STATE_OVERRIDE_REQUEST = 0xAF03 MSG_ID_DD_STOP_GEN_DIALYSATE_MODE_OVERRIDE_REQUEST = 0xAF04 @@ -457,13 +481,16 @@ MSG_ID_FP_DEF_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST = 0xB043 MSG_ID_FP_DEF_STATUS_REQUEST = 0xB044 MSG_ID_FP_DEF_STATUS_RESPONSE = 0xB045 - MSG_ID_FP_SET_OP_SUB_MODE_REQUEST = 0xB046 - + MSG_ID_FP_SET_OPERATION_SUB_MODE_REQUEST = 0xB046 + MSG_ID_FP_CONDUCTIVITY_SENSOR_RESISTANCE_OVERRIDE_REQUEST = 0xB047 + MSG_ID_FP_SET_RECOVERY_VALVES_REQUEST = 0xB048 MSG_ID_FP_BOOST_PUMP_INSTALL_STATUS_REQUEST = 0xB049 MSG_ID_FP_BOOST_PUMP_INSTALL_STATUS_RESPONSE = 0xB04A + MSG_ID_FP_CONDUCTIVITY_SENSOR_VERSION_REQUEST = 0xB04B + MSG_ID_FP_CONDUCTIVITY_SENSOR_VERSION_RESPONSE = 0xB04C + MSG_ID_FP_CONDUCTIVITY_SENSOR_CAL_REQUEST = 0xB04D + MSG_ID_FP_CONDUCTIVITY_SENSOR_CAL_RESPONSE = 0xB04E - MSG_ID_FP_CONDUCTIVITY_SENSOR_RESISTANCE_OVERRIDE_REQUEST = 0xB100 - MSG_ID_TD_DEBUG_EVENT = 0xFFF1 MSG_ID_DD_DEBUG_EVENT = 0xFFF2 MSG_ID_FP_DEBUG_EVENT = 0xFFF3 Index: leahi_dialin/ui/td_messaging.py =================================================================== diff -u -re4738ae77bf6f174fcd0442bffd20af969daa858 -rb106d94fa757d98b7092155bfd0ae16dd36b1c1a --- leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision e4738ae77bf6f174fcd0442bffd20af969daa858) +++ leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision b106d94fa757d98b7092155bfd0ae16dd36b1c1a) @@ -118,13 +118,16 @@ self.can_interface.send(message, 0) def td_air_trap(self, - H17_state : int, - H16_state : int, - H17_raw_state : int, - H16_raw_state : int, - H13_state : int, - H20_State : int, - controlling : int): + H17State : int, + H16State : int, + H17RawState : int, + H16RawState : int, + H13State : int, + H20State : int, + IsAutoControlling : int, + AirTrapState : int, + AirPumpLowerPowerLevel : int, + AirPumpRaisePowerLevel : int): """ Broadcasts the current TD air trap data(Msg ID: 0x2A, 42) Args: @@ -141,13 +144,16 @@ 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.CanMessage.build_message( channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, @@ -179,8 +185,11 @@ self.can_interface.send(message, 0) - def td_air_pump(self, H12_state : int, - H12_power : int): + def td_air_pump(self, H12_state : int, + H12_rpm : int, + H12_power : float, + H12_fpga_rpm : int, + H12_scalar_power : int): """ Broadcasts the current TD Air Pump data (Msg ID: 0x20, 32) Args: @@ -192,8 +201,11 @@ 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.CanMessage.build_message( channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, @@ -202,7 +214,10 @@ self.can_interface.send(message, 0) - def td_ejector(self, H5_state: int, H5_set_speed: float): + def td_ejector(self, H5_state: int, + H5_set_speed: float, + Retract_Opt_sensor: int, + Engage_Opt_sensor: int): """ Broadcasts the current TD Ejector data (Msg ID: 0x4E, 78) Args: @@ -213,10 +228,11 @@ 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.CanMessage.build_message( channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_EJECTOR_DATA.value, @@ -267,7 +283,16 @@ self.can_interface.send(message, 0) - def td_valves(self, valve_id: int, state: int, pos_name: int, pos_count: int, next_pos: int): + def td_valves(self, valve_id : int, + state : int, + currPosID : int, + currPos : int, + cmdPos : int, + posA : int, + posB : int, + posC : int, + posD : int, + maxHomingPos: int): """ Broadcasts the current TD Valves Data (Msg ID: 0x2B, 43) Args: @@ -285,9 +310,14 @@ 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.CanMessage.build_message( channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, @@ -296,21 +326,22 @@ self.can_interface.send(message, 0) - def td_voltage(self, line_1_2v: float, line_3_3v: float, line_logic_5v: float, - line_sensors_5v: float, line_24v: float, line_regen_24v: float, - fpga_adc_ref: float, res_ref: float, fpga_vcc: float, - fpga_vaux: float, fpga_vpvn: float): + def td_voltage(self, line_1_2v : float, + line_3_3v : float, + line_logic_5v : float, + line_24v_1 : float, + line_24v_2 : float, + fpga_vcc : float, + fpga_vaux : float, + fpga_vpvn : float): """ Broadcasts the current TD voltage data (Msg ID: 0x1D, 29) Args: @param line_1_2v (float): Processor 1.2V @param line_3_3v (float): Logic voltage (3.3V) @param line_logic_5v (float): Logic voltage (5V) - @param line_sensors_5v (float): Sensors voltage (5V) - @param line_24v (float): Actuators voltage (24V) - @param line_regen_24v (float): Actuators regen voltage (24V) - @param fpga_adc_ref (float): FPGA ADC reference voltage (1V) - @param res_ref (float): PBA ADC reference voltage (3V) + @param line_24v_1 (float): Actuators voltage (24V) + @param line_24v_2 (float): Actuators voltage (24V) @param fpga_vcc (float): FPGA input voltage (3V) @param fpga_vaux (float): FPGA aux. voltage (3V) @param fpga_vpvn (float): FPGA pvn voltage (1V) @@ -319,18 +350,16 @@ 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.CanMessage.build_message( channel_id=CAN.CanChannels.td_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_VOLTAGES_DATA.value, @@ -580,8 +609,8 @@ payload = conversions.unsigned_integer_to_bytearray (valve ) payload += conversions.unsigned_integer_to_bytearray (timeout ) - 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_WATER_SAMPLE_DATA.value, payload=payload) self.can_interface.send(message, 0) @@ -600,8 +629,8 @@ payload += conversions.integer_to_bytearray (vRejectionReason) payload += conversions.float_to_bytearray (vValue ) - 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_WATER_SAMPLE_RESULT_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1472,6 +1501,43 @@ self.can_interface.send(message, 0) + + def td_power_off(self, vStatus: int): + """ + rinseback command response message (Msg ID: 0x91, 145) + Args: + @param vRejectionReason : (int) rejection reason + @return: None + """ + payload = conversions.unsigned_byte_to_bytearray(vStatus) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_POWER_OFF_REQUEST.value, + payload=payload) + self.can_interface.send(message, 0) + + + def td_confirm(self, vID : int , + vCommand: int , + vReason : int ): + """ + rinseback command response message (Msg ID: 0x91, 145) + Args: + @param vRejectionReason : (int) rejection reason + @return: None + """ + payload = conversions.integer_to_bytearray(vID ) + payload += conversions.integer_to_bytearray(vCommand ) + payload += conversions.integer_to_bytearray(vReason ) + + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_UI_CONFIRMATION_REQUEST.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) @@ -1587,8 +1653,8 @@ payload += conversions.integer_to_bytearray(vVenousAsymmetricRejectReason ) payload += conversions.integer_to_bytearray(vTmpWindowRejectReason ) - 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_PRESSURE_LIMITS_CHANGE_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1623,8 +1689,8 @@ payload += conversions.integer_to_bytearray(vSodiumRejectReason ) payload += conversions.integer_to_bytearray(vBicarbonateRejectReason ) - 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_SET_POINTS_CHANGE_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1667,8 +1733,8 @@ payload = conversions.integer_to_bytearray(vAccepted) payload += conversions.integer_to_bytearray(vRejectionReason) - message = CAN.DenaliMessage.build_message( - channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ADJUST_PATIENT_DISCONNECT_CONFIRM_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -1830,8 +1896,8 @@ 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 = CAN.CanMessage.build_message( + channel_id=CAN.CanChannels.td_to_ui_ch_id, message_id=msg_ids.MsgIds.MSG_ID_TD_ADJUST_TREATMENT_LOGS_RESPONSE.value, payload=payload) self.can_interface.send(message, 0) @@ -2013,6 +2079,41 @@ self.can_interface.send(message, 0) + def td_treatment_log_average_data(self, + blood_flow_rate : float, + dialysate_flow_rate : float, + uf_flow_rate : float, + arterialPressure : float, + venousPressure : float, + tmpPressure : float, + dialysate_temp : float) -> None: + """ + send the treatment log data + @param blood_flow_rate : (F32) blood flow rate + @param dialysate_flow_rate : (F32) dialysate flow rate + @param uf_flow_rate : (F32) uf flow rate + @param arterialPressure : (F32) arterial Pressure + @param venousPressure : (F32) venous Pressure + @param tmpPressure : (F32) tmp Pressure + @param dialysate_temp : (F32) dialysate temp + @return: none + """ + payload = conversions.float_to_bytearray(blood_flow_rate ) + payload += conversions.float_to_bytearray(dialysate_flow_rate ) + payload += conversions.float_to_bytearray(uf_flow_rate ) + payload += conversions.float_to_bytearray(arterialPressure ) + payload += conversions.float_to_bytearray(venousPressure ) + 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_id=msg_ids.MsgIds.MSG_ID_TD_TREATMENT_LOG_AVERAGE_DATA.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,