Index: leahi_dialin/dd/modules/records.py =================================================================== diff -u -r7a78412149082d6f87ccbeba64d1fbd06b88149d -re3c60dd439b2f996b0392951fd4461e8e37b8692 --- leahi_dialin/dd/modules/records.py (.../records.py) (revision 7a78412149082d6f87ccbeba64d1fbd06b88149d) +++ leahi_dialin/dd/modules/records.py (.../records.py) (revision e3c60dd439b2f996b0392951fd4461e8e37b8692) @@ -729,6 +729,7 @@ temperature_c_entry_name = f'{group}__{sensor.name}__{dd_enum_repository.CalibRecordConcentrateFields.BOTTLE_TEMPERATURE_C.name}' calibration_time_entry_name = f'{group}__{sensor.name}__{dd_enum_repository.CalibRecordConcentrateFields.CALIBRATION_TIME.name}' + kwargs['sensor_enum'] = sensor kwargs['msg_id'] = msg_id_pairing[group] if concentrate_mix_ratio_entry_name in calibration_records and calibration_records[concentrate_mix_ratio_entry_name] is not None: kwargs['concentrate_mix_ratio'] = calibration_records[concentrate_mix_ratio_entry_name] @@ -934,16 +935,18 @@ gain: float=0.0, offset: float=0.0, calibration_time: int = 0) -> int: - payload = integer_to_bytearray(sensor_enum.value) + payload_sensor = integer_to_bytearray(sensor_enum.value) + payload_content = b'' if msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_D12_PUMP: - payload += float_to_bytearray(dialysate_pump_target_speed) - payload += float_to_bytearray(forth_order_coeff) - payload += float_to_bytearray(third_order_coeff) - payload += float_to_bytearray(second_order_coeff) - payload += float_to_bytearray(gain) - payload += float_to_bytearray(offset) - payload += integer_to_bytearray(calibration_time) - payload += unsigned_short_to_bytearray(self.crc16(payload)) + payload_content += float_to_bytearray(dialysate_pump_target_speed) + payload_content += float_to_bytearray(forth_order_coeff) + payload_content += float_to_bytearray(third_order_coeff) + payload_content += float_to_bytearray(second_order_coeff) + payload_content += float_to_bytearray(gain) + payload_content += float_to_bytearray(offset) + payload_content += integer_to_bytearray(calibration_time) + payload_content += unsigned_short_to_bytearray(self.crc16(payload_content)) + payload = payload_sensor + payload_content sensor_type = '' if msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_PRESSURE_SENSOR: @@ -966,19 +969,22 @@ def cmd_set_calibration_records_concentrate(self, + sensor_enum: DialinEnum, msg_id: MsgIds, concentrate_mix_ratio: float=0.0, volume_ml: float=0.0, conductivity_uspcm: float=0.0, temperature_c: float=0.0, calibration_time: int = 0) -> int: - payload = float_to_bytearray(concentrate_mix_ratio) - payload += float_to_bytearray(volume_ml) - payload += float_to_bytearray(conductivity_uspcm) - payload += float_to_bytearray(temperature_c) - payload += integer_to_bytearray(calibration_time) - payload += unsigned_short_to_bytearray(self.crc16(payload)) + payload_sensor = integer_to_bytearray(sensor_enum.value) + payload_content = float_to_bytearray(concentrate_mix_ratio) + payload_content += float_to_bytearray(volume_ml) + payload_content += float_to_bytearray(conductivity_uspcm) + payload_content += float_to_bytearray(temperature_c) + payload_content += integer_to_bytearray(calibration_time) + payload_content += unsigned_short_to_bytearray(self.crc16(payload_content)) + payload = payload_sensor + payload_content conc_type = '' if msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_ACID_CONCENTRATE: Index: leahi_dialin/td/modules/records.py =================================================================== diff -u -rc1bff8da59cff294d67d90dd1e1f102dd5b65466 -re3c60dd439b2f996b0392951fd4461e8e37b8692 --- leahi_dialin/td/modules/records.py (.../records.py) (revision c1bff8da59cff294d67d90dd1e1f102dd5b65466) +++ leahi_dialin/td/modules/records.py (.../records.py) (revision e3c60dd439b2f996b0392951fd4461e8e37b8692) @@ -28,23 +28,14 @@ from leahi_dialin.utils.abstract_classes import AbstractSubSystem from leahi_dialin.utils.base import publish from leahi_dialin.utils.enums import DialinEnum -from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray, byte_to_bytearray, unsigned_short_to_bytearray +from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray, byte_to_bytearray, unsigned_short_to_bytearray, string_to_bytearray class TDRecords(AbstractSubSystem): """ TD interface containing pressure related commands. """ - CALIB_RECORDS_PRESSURE_SENSORS = 'pressure_sensors' - CALIB_RECORDS_TEMPERATURE_SENSORS = 'temperature_sensors' - CALIB_RECORDS_CONCENTRATE_PUMPS = 'concentrate_pump' - CALIB_RECORDS_DIALYSATE_PUMPS = 'dialysate_pumps' - CALIB_RECORDS_ACID_CONCENTRATE = 'acid_concentrate' - CALIB_RECORDS_BICARB_CONCENTRATE = 'bicarb_concentrate' - CALIB_RECORDS_ACCELEROMETER = 'accelerometer' - CALIB_RECORDS_BLOOD_LEAK = 'blood_leak' - def __init__(self, can_interface: CanMessenger, logger: Logger): """ @param can_interface: The CanMessenger object @@ -109,58 +100,13 @@ @return: none """ record_list = [] - for service_member in td_enum_repository.ServiceRecordFields: - record_list.append((service_member.name, service_member.datatype())) + for member in td_enum_repository.SystemRecordFields: + record_list.append((member.name, member.datatype(), member.multichar_length())) - self.process_into_dict(dict_to_update = self.service_records, + self.process_into_dict(dict_to_update = self.system_records, decoder_list = record_list, message = message) - # Get the payload related values - msg_list =[] - msg_list.append(('current_page', DataTypes.U32)) - msg_list.append(('all_pages', DataTypes.U32)) - msg_list.append(('payload_count', DataTypes.U32)) - result = self.process_into_vars(decoder_list = msg_list, - message = message) - - # Get the record data - record_list = [] - for i in range(0, result['payload_count']): - sys_record = td_enum_repository.SystemRecordFields(i + self.pager_system_record) - if sys_record.multichar_length > 1: - for j in range(0, sys_record.multichar_length - 1): - name = f'{sys_record.name}_{j}' - record_list.append((name, sys_record.datatype())) - else: - name = sys_record.name - record_list.append((name, sys_record.datatype())) - result_payload = self.process_into_vars(decoder_list = record_list, - message = message, - start_from_byte = len(msg_list) * DataTypes.U32.size()) - - # Saving data into System Records - self.system_records[td_enum_repository.SystemRecordFields.TOP_LEVEL_PN.name] = '' - self.system_records[td_enum_repository.SystemRecordFields.TOP_LEVEL_SN.name] = '' - self.system_records[td_enum_repository.SystemRecordFields.MFG_LOCATION.name] = 0 - self.system_records[td_enum_repository.SystemRecordFields.MFG_DATE.name] = 0 - self.system_records[td_enum_repository.SystemRecordFields.CRC.name] = 0 - for key in result_payload: - if key.startswith(td_enum_repository.SystemRecordFields.TOP_LEVEL_PN.name): - value = result_payload[key] - self.system_records[td_enum_repository.SystemRecordFields.TOP_LEVEL_PN.name] += value - elif key.startswith(td_enum_repository.SystemRecordFields.TOP_LEVEL_SN.name): - value = result_payload[key] - self.system_records[td_enum_repository.SystemRecordFields.TOP_LEVEL_SN.name] += value - else: - self.system_records[key] = result_payload[key] - - # Increase the pager by the payload count to know where the next message should resume, or reset when it's the last message - if result['current_page'] == result['all_pages']: - self.pager_system_record = 0 - else: - self.pager_system_record =+ result['payload_count'] - self.system_records_timestamp = timestamp @@ -184,7 +130,7 @@ self.service_records_timestamp = timestamp - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) + @publish(["msg_id_dd_nvm_cal_pressure_sensor_response", "calibration_records", "calibration_records_timestamp"]) def _handler_calibration_record_pres_sensor_sync(self, message, timestamp = 0.0): """ Handles published TD Calibration Record Pressure Sensor Details data messages. @@ -206,186 +152,11 @@ self.process_into_dict(dict_to_update = self.calibration_records, decoder_list = record_list, message = message, - start_from_byte = len(msg_list) * DataTypes.U08.size()) + start_from_byte = len(msg_list) * msg_list[0][1].size()) self.calibration_records_timestamp = timestamp - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) - def _handler_calibration_record_temp_sensor_sync(self, message, timestamp = 0.0): - """ - Handles published TD Calibration Record Temperature Sensor Details data messages. - TD Calibration Records Temperature Sensor Details are captured for reference. - - @param message: published data message - @return: none - """ - # Get the sensor_id to identify the location of the payload - msg_list = [('sensor_id', DataTypes.U08)] - result = self.process_into_vars(decoder_list = msg_list, - message = message) - sensor_name = td_enum_repository.TDTemperatureSensorNames(result['sensor_id']).name - - record_list = [] - for member in td_enum_repository.CalibRecordSensorFields: - record_list.append((self.CALIB_RECORDS_TEMPERATURE_SENSORS, sensor_name, member.name, member.datatype())) - - self.process_into_dict(dict_to_update = self.calibration_records, - decoder_list = record_list, - message = message, - start_from_byte = len(msg_list) * DataTypes.U08.size()) - - self.calibration_records_timestamp = timestamp - - - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) - def _handler_calibration_record_conc_pump_sync(self, message, timestamp = 0.0): - """ - Handles published TD Calibration Record Concentrate Pump Details data messages. - TD Calibration Records Concentrate Pump Details are captured for reference. - - @param message: published data message - @return: none - """ - # Get the sensor_id to identify the location of the payload - msg_list = [('sensor_id', DataTypes.U08)] - result = self.process_into_vars(decoder_list = msg_list, - message = message) - sensor_name = td_enum_repository.TDConcentratePumpNames(result['sensor_id']).name - - record_list = [] - for member in td_enum_repository.CalibRecordSensorFields: - record_list.append((self.CALIB_RECORDS_CONCENTRATE_PUMPS, sensor_name, member.name, member.datatype())) - - self.process_into_dict(dict_to_update = self.calibration_records, - decoder_list = record_list, - message = message, - start_from_byte = len(msg_list) * DataTypes.U08.size()) - - self.calibration_records_timestamp = timestamp - - - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) - def _handler_calibration_record_dial_pump_d12_sync(self, message, timestamp = 0.0): - """ - Handles published TD Calibration Record Dialysate Pump D12 Details data messages. - TD Calibration Records Dialysate Pump D12 Details are captured for reference. - - @param message: published data message - @return: none - """ - record_list = [] - record_list.append((self.CALIB_RECORDS_DIALYSATE_PUMPS, td_enum_repository.TDDialysatePumpNames.D12_PUMP.name, 'target_speed', DataTypes.F32)) - for member in td_enum_repository.CalibRecordSensorFields: - record_list.append((self.CALIB_RECORDS_DIALYSATE_PUMPS, td_enum_repository.TDDialysatePumpNames.D12_PUMP.name, member.name, member.datatype())) - - self.process_into_dict(dict_to_update = self.calibration_records, - decoder_list = record_list, - message = message) - - self.calibration_records_timestamp = timestamp - - - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) - def _handler_calibration_record_dial_pump_d48_sync(self, message, timestamp = 0.0): - """ - Handles published TD Calibration Record Dialysate Pump D48 Details data messages. - TD Calibration Records Dialysate Pump D48 Details are captured for reference. - - @param message: published data message - @return: none - """ - record_list = [] - for member in td_enum_repository.CalibRecordSensorFields: - record_list.append((self.CALIB_RECORDS_DIALYSATE_PUMPS, td_enum_repository.TDDialysatePumpNames.D48_PUMP.name, member.name, member.datatype())) - - self.process_into_dict(dict_to_update = self.calibration_records, - decoder_list = record_list, - message = message) - - self.calibration_records_timestamp = timestamp - - - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) - def _handler_calibration_record_acid_conc_sync(self, message, timestamp = 0.0): - """ - Handles published TD Calibration Record Acid Concentrate Details data messages. - TD Calibration Records Acid Concentrate Details are captured for reference. - - @param message: published data message - @return: none - """ - record_list = [] - for member in td_enum_repository.CalibRecordConcentrateFields: - record_list.append((self.CALIB_RECORDS_ACID_CONCENTRATE, member.name, member.datatype())) - - self.process_into_dict(dict_to_update = self.calibration_records, - decoder_list = record_list, - message = message) - - self.calibration_records_timestamp = timestamp - - - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) - def _handler_calibration_record_bicarb_conc_sync(self, message, timestamp = 0.0): - """ - Handles published TD Calibration Record Bicarb Concentrate Details data messages. - TD Calibration Records Bicarb Concentrate Details are captured for reference. - - @param message: published data message - @return: none - """ - record_list = [] - for member in td_enum_repository.CalibRecordConcentrateFields: - record_list.append((self.CALIB_RECORDS_BICARB_CONCENTRATE, member.name, member.datatype())) - - self.process_into_dict(dict_to_update = self.calibration_records, - decoder_list = record_list, - message = message) - - self.calibration_records_timestamp = timestamp - - - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) - def _handler_calibration_record_accelerometer_sync(self, message, timestamp = 0.0): - """ - Handles published TD Calibration Record Accelerometer Details data messages. - TD Calibration Records Accelerometer Details are captured for reference. - - @param message: published data message - @return: none - """ - record_list = [] - for member in td_enum_repository.CalibRecordAccelerometerFields: - record_list.append((self.CALIB_RECORDS_ACCELEROMETER, member.name, member.datatype())) - - self.process_into_dict(dict_to_update = self.calibration_records, - decoder_list = record_list, - message = message) - - self.calibration_records_timestamp = timestamp - - - @publish(["msg_id_td_nvm_send_cal_pressure_sensor", "calibration_records", "calibration_records_timestamp"]) - def _handler_calibration_record_blood_leak_sync(self, message, timestamp = 0.0): - """ - Handles published TD Calibration Record Blood Leak Details data messages. - TD Calibration Records Blood Leak Details are captured for reference. - - @param message: published data message - @return: none - """ - record_list = [] - for member in td_enum_repository.CalibRecordBloodLeakFields: - record_list.append((self.CALIB_RECORDS_BLOOD_LEAK, member.name, member.datatype())) - - self.process_into_dict(dict_to_update = self.calibration_records, - decoder_list = record_list, - message = message) - - self.calibration_records_timestamp = timestamp - - @publish(["msg_id_td_nvm_send_institutional_record", "institutional_records", "institutional_records_timestamp"]) def _handler_institutional_record_sync(self, message, timestamp = 0.0): """ @@ -593,12 +364,10 @@ raise ValueError("serial must be 20 characters") payload = integer_to_bytearray(is_ro_featured) - payload = integer_to_bytearray(is_ro_featured_boost_pump) - for c in part_number: - payload += byte_to_bytearray(c) - for c in serial_number: - payload += byte_to_bytearray(c) - payload += integer_to_bytearray(manufacturing_location) + payload += integer_to_bytearray(is_ro_featured_boost_pump) + payload += string_to_bytearray(part_number) + payload += string_to_bytearray(serial_number) + payload += byte_to_bytearray(manufacturing_location) payload += integer_to_bytearray(manufacturing_date) payload += unsigned_short_to_bytearray(self.crc16(payload)) @@ -880,16 +649,18 @@ gain: float=0.0, offset: float=0.0, calibration_time: int = 0) -> int: - payload = integer_to_bytearray(sensor_enum.value) - if msg_id == MsgIds.TBD: - payload += float_to_bytearray(dialysate_pump_target_speed) - payload += float_to_bytearray(forth_order_coeff) - payload += float_to_bytearray(third_order_coeff) - payload += float_to_bytearray(second_order_coeff) - payload += float_to_bytearray(gain) - payload += float_to_bytearray(offset) - payload += integer_to_bytearray(calibration_time) - payload += unsigned_short_to_bytearray(self.crc16(payload)) + payload_sensor = integer_to_bytearray(sensor_enum.value) + payload_content = b'' + if msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_D12_PUMP: + payload_content += float_to_bytearray(dialysate_pump_target_speed) + payload_content += float_to_bytearray(forth_order_coeff) + payload_content += float_to_bytearray(third_order_coeff) + payload_content += float_to_bytearray(second_order_coeff) + payload_content += float_to_bytearray(gain) + payload_content += float_to_bytearray(offset) + payload_content += integer_to_bytearray(calibration_time) + payload_content += unsigned_short_to_bytearray(self.crc16(payload_content)) + payload = payload_sensor + payload_content sensor_type = '' if msg_id == MsgIds.TBD: @@ -911,37 +682,6 @@ can_interface = self.can_interface) - def cmd_set_calibration_records_concentrate(self, - msg_id: MsgIds, - concentrate_mix_ratio: float=0.0, - volume_ml: float=0.0, - conductivity_uspcm: float=0.0, - temperature_c: float=0.0, - calibration_time: int = 0) -> int: - - payload = float_to_bytearray(concentrate_mix_ratio) - payload += float_to_bytearray(volume_ml) - payload += float_to_bytearray(conductivity_uspcm) - payload += float_to_bytearray(temperature_c) - payload += integer_to_bytearray(calibration_time) - payload += unsigned_short_to_bytearray(self.crc16(payload)) - - conc_type = '' - if msg_id == MsgIds.TBD: - conc_type = 'Acid' - elif msg_id == MsgIds.TBD: - conc_type = 'Bicarb' - - return cmd_generic_override(payload = payload, - reset = None, - channel_id = CanChannels.dialin_to_td_ch_id, - msg_id = msg_id, - entity_name = f'TD {conc_type} Concentrate Calibration Record', - override_text = 'being set', - logger = self.logger, - can_interface = self.can_interface) - - def cmd_set_calibration_records_accelerometer(self, msg_id: MsgIds, accel_x_offset: float=0.0, @@ -972,24 +712,4 @@ - def cmd_set_calibration_records_blood_leak(self, - msg_id: MsgIds, - set_point: float=0.0, - calibration_time: int = 0) -> int: - - payload = float_to_bytearray(set_point) - payload += integer_to_bytearray(calibration_time) - payload += unsigned_short_to_bytearray(self.crc16(payload)) - - return cmd_generic_override(payload = payload, - reset = None, - channel_id = CanChannels.dialin_to_td_ch_id, - msg_id = msg_id, - entity_name = f'TD Blood Leak Calibration Record', - override_text = 'being set', - logger = self.logger, - can_interface = self.can_interface) - - - # ================================================= Private Methods =================================================