Index: leahi_dialin/common/generic_defs.py =================================================================== diff -u -rba8c32638b676dc71d30d30f3756b63ec14c7170 -rfa06efd219892c67eabb3099a4af3dea4304edb5 --- leahi_dialin/common/generic_defs.py (.../generic_defs.py) (revision ba8c32638b676dc71d30d30f3756b63ec14c7170) +++ leahi_dialin/common/generic_defs.py (.../generic_defs.py) (revision fa06efd219892c67eabb3099a4af3dea4304edb5) @@ -238,36 +238,65 @@ i = 0 members = {} for pres_sensor in DDPressureSensorNames: + if 'num_' in pres_sensor.name.lower(): + continue for field_name in CalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue members[f'PRES__{pres_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for temp_sensor in DDTemperatureSensorNames: + if 'num_' in temp_sensor.name.lower(): + continue for field_name in CalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue members[f'TEMP__{temp_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for conc_pump in DDConcentratePumpNames: + if 'num_' in conc_pump.name.lower(): + continue for field_name in CalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue members[f'CONC__{conc_pump.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for dial_pump in DDDialysatePumpNames: - members[f'DIAL__{dial_pump.name}__{field_name.name}__TARGET_SPEED'] = (i, DataTypes.F32) - i += 1 + if 'num_' in dial_pump.name.lower(): + continue + elif 'd48' in dial_pump.name.lower(): + members[f'DIAL__{dial_pump.name}_TARGET_SPEED'] = (i, DataTypes.F32) + i += 1 for field_name in CalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue members[f'DIAL__{dial_pump.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for acid in AcidTypes: + if 'num_' in acid.name.lower(): + continue for field_name in CalibRecordConcentrateFields: + if 'num_' in field_name.name.lower(): + continue members[f'ACID__{acid.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for bicarb in BicarbTypes: + if 'num_' in bicarb.name.lower(): + continue for field_name in CalibRecordConcentrateFields: + if 'num_' in field_name.name.lower(): + continue members[f'BICARB__{bicarb.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for field_name in CalibRecordAccelerometerFields: - members[f'ACCEL__{bicarb.name}__{field_name.name}'] = (i, field_name.datatype()) + if 'num_' in field_name.name.lower(): + continue + members[f'ACCEL__{field_name.name}'] = (i, field_name.datatype()) i += 1 for field_name in CalibRecordBloodLeakFields: - members[f'BLOOD_LEAK__{bicarb.name}__{field_name.name}'] = (i, field_name.datatype()) + if 'num_' in field_name.name.lower(): + continue + members[f'BLOOD_LEAK__{field_name.name}'] = (i, field_name.datatype()) i += 1 members[f'NUM_OF_CALIBRATION_RECORD_FIELDS'] = (i, DataTypes.NONE) Index: leahi_dialin/dd/modules/records.py =================================================================== diff -u -r36a14e27a2c54b4894f5ca7c9390a92dbb128be7 -rfa06efd219892c67eabb3099a4af3dea4304edb5 --- leahi_dialin/dd/modules/records.py (.../records.py) (revision 36a14e27a2c54b4894f5ca7c9390a92dbb128be7) +++ leahi_dialin/dd/modules/records.py (.../records.py) (revision fa06efd219892c67eabb3099a4af3dea4304edb5) @@ -658,48 +658,53 @@ # Exception handling as D12 has an extra field (target speed) if sensor in [dd_enum_repository.DDDialysatePumpNames.D12_PUMP]: # Store the function but do not execute it - send_data.append(partial(self.cmd_set_calibration_records_sensor(sensor_enum = sensor, - msg_id = MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_D12_PUMP, - dialysate_pump_target_speed = calibration_records[key][sensor]['target_speed'], - forth_order_coeff = calibration_records[key][sensor]['forth_order_coeff'], - third_order_coeff = calibration_records[key][sensor]['third_order_coeff'], - second_order_coeff = calibration_records[key][sensor]['second_order_coeff'], - gain = calibration_records[key][sensor]['gain'], - offset = calibration_records[key][sensor]['offset'], - calibration_time = calibration_records[key][sensor]['calibration_time']))) + send_data.append(partial(self.cmd_set_calibration_records_sensor, + sensor_enum = sensor, + msg_id = MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_D12_PUMP, + dialysate_pump_target_speed = calibration_records[key][sensor]['target_speed'], + forth_order_coeff = calibration_records[key][sensor]['forth_order_coeff'], + third_order_coeff = calibration_records[key][sensor]['third_order_coeff'], + second_order_coeff = calibration_records[key][sensor]['second_order_coeff'], + gain = calibration_records[key][sensor]['gain'], + offset = calibration_records[key][sensor]['offset'], + calibration_time = calibration_records[key][sensor]['calibration_time'])) else: # Store the function but do not execute it - send_data.append(partial(self.cmd_set_calibration_records_sensor(sensor_enum = sensor, - msg_id = msg_id_pairing[key], - forth_order_coeff = calibration_records[key][sensor]['forth_order_coeff'], - third_order_coeff = calibration_records[key][sensor]['third_order_coeff'], - second_order_coeff = calibration_records[key][sensor]['second_order_coeff'], - gain = calibration_records[key][sensor]['gain'], - offset = calibration_records[key][sensor]['offset'], - calibration_time = calibration_records[key][sensor]['calibration_time']))) + send_data.append(partial(self.cmd_set_calibration_records_sensor, + sensor_enum = sensor, + msg_id = msg_id_pairing[key], + forth_order_coeff = calibration_records[key][sensor]['forth_order_coeff'], + third_order_coeff = calibration_records[key][sensor]['third_order_coeff'], + second_order_coeff = calibration_records[key][sensor]['second_order_coeff'], + gain = calibration_records[key][sensor]['gain'], + offset = calibration_records[key][sensor]['offset'], + calibration_time = calibration_records[key][sensor]['calibration_time'])) elif key.lower() in [self.CALIB_RECORDS_ACID_CONCENTRATE, self.CALIB_RECORDS_BICARB_CONCENTRATE]: for sensor in calibration_records[key]: # Store the function but do not execute it - send_data.append(partial(self.cmd_set_calibration_records_concentrate(msg_id = msg_id_pairing[key], - concentrate_mix_ratio = calibration_records[key][sensor]['concentrate_mix_ratio'], - volume_ml = calibration_records[key][sensor]['volume_ml'], - conductivity_uspcm = calibration_records[key][sensor]['conductivity_uspcm'], - temperature_c = calibration_records[key][sensor]['temperature_c'], - calibration_time = calibration_records[key][sensor]['calibration_time']))) + send_data.append(partial(self.cmd_set_calibration_records_concentrate, + msg_id = msg_id_pairing[key], + concentrate_mix_ratio = calibration_records[key][sensor]['concentrate_mix_ratio'], + volume_ml = calibration_records[key][sensor]['volume_ml'], + conductivity_uspcm = calibration_records[key][sensor]['conductivity_uspcm'], + temperature_c = calibration_records[key][sensor]['temperature_c'], + calibration_time = calibration_records[key][sensor]['calibration_time'])) elif key.lower() in [self.CALIB_RECORDS_ACCELEROMETER]: for sensor in calibration_records[key]: # Store the function but do not execute it - send_data.append(partial(self.cmd_set_calibration_records_accelerometer(msg_id = msg_id_pairing[key], - accel_x_offset = calibration_records[key][sensor]['accel_x_offset'], - accel_y_offset = calibration_records[key][sensor]['accel_y_offset'], - accel_z_offset = calibration_records[key][sensor]['accel_z_offset'], - calibration_time = calibration_records[key][sensor]['calibration_time']))) + send_data.append(partial(self.cmd_set_calibration_records_accelerometer, + msg_id = msg_id_pairing[key], + accel_x_offset = calibration_records[key][sensor]['accel_x_offset'], + accel_y_offset = calibration_records[key][sensor]['accel_y_offset'], + accel_z_offset = calibration_records[key][sensor]['accel_z_offset'], + calibration_time = calibration_records[key][sensor]['calibration_time'])) elif key.lower() in [self.CALIB_RECORDS_BLOOD_LEAK]: for sensor in calibration_records[key]: # Store the function but do not execute it - send_data.append(partial(self.cmd_set_calibration_records_blood_leak(msg_id = msg_id_pairing[key], - set_point = calibration_records[key][sensor]['set_point'], - calibration_time = calibration_records[key][sensor]['calibration_time']))) + send_data.append(partial(self.cmd_set_calibration_records_blood_leak, + msg_id = msg_id_pairing[key], + set_point = calibration_records[key][sensor]['set_point'], + calibration_time = calibration_records[key][sensor]['calibration_time'])) # Execute the stored functions one by one # Remove the ones that got 1 (successfully recieved) as response @@ -716,7 +721,7 @@ sleep(0.005) # Wait 50ms between sends - def cmd_set_institutional_records(self, institutional_records: dict) -> int: + def cmd_set_institutional_records(self, institutional_records: dict={}) -> int: """ Constructs and sends a command for setting the Institutional Records. Constraints: @@ -730,22 +735,32 @@ send_data = [] total_payload = b'' for record_enum in dd_enum_repository.InstitutionalRecordFields: - if record_enum in institutional_records: - value = institutional_records[record_enum] + # Set the enum_id to identify which parameter is being sent U08 - 1 byte - 0->255 !! + payload = byte_to_bytearray(record_enum.value) + + if record_enum == dd_enum_repository.InstitutionalRecordFields.NUM_OF_INSTITUTIONAL_RECORD_FIELDS: + # Skip the Number of fields + continue + + elif record_enum == dd_enum_repository.InstitutionalRecordFields.CRC: + # If field is CRC, skip the reading, crc will be calculated + pass + + elif record_enum.name in institutional_records and institutional_records[record_enum.name] is not None: + # If record present in the dict and value is not None + value = institutional_records[record_enum.name] + else: # Set default values if it's missing from the provided dictionary if record_enum.datatype() in [DataTypes.U32, DataTypes.BOOL, DataTypes.S32, DataTypes.U16, DataTypes.U08, DataTypes.BOOL_U08]: value = 0 elif record_enum.datatype() in [DataTypes.F32]: value = 0.0 - # Set the enum_id to identify which parameter is being sent U08 - 1 byte - 0->255 !! - payload = byte_to_bytearray(record_enum.value) - # Calculate the CRC for the total institutional record (should be the last message) if record_enum == dd_enum_repository.InstitutionalRecordFields.CRC: payload += unsigned_short_to_bytearray(self.crc16(total_payload)) - + # Else just send the data elif record_enum.datatype() in [DataTypes.U32, DataTypes.BOOL, DataTypes.S32]: payload += integer_to_bytearray(value) @@ -760,15 +775,16 @@ payload += byte_to_bytearray(value) total_payload += byte_to_bytearray(value) - send_data.append(partial(cmd_generic_override(payload = payload, - reset = None, - channel_id = CanChannels.dialin_to_dd_ch_id, - msg_id = MsgIds.MSG_ID_UI_DD_NVM_SET_INSTITUTIONAL_RECORD, - entity_name = f'DD Institutional Record', - override_text = 'being set', - logger = self.logger, - can_interface = self.can_interface))) - + send_data.append(partial(cmd_generic_override, + payload = payload, + reset = None, + channel_id = CanChannels.dialin_to_dd_ch_id, + msg_id = MsgIds.MSG_ID_UI_DD_NVM_SET_INSTITUTIONAL_RECORD, + entity_name = f'DD Institutional Record', + override_text = 'being set', + logger = self.logger, + can_interface = self.can_interface)) + # Execute the stored functions one by one # Remove the ones that got 1 (successfully recieved) as response # Retry the ones that are failed 2 more times @@ -833,7 +849,7 @@ offset: float=0.0, calibration_time: int = 0) -> int: payload = integer_to_bytearray(sensor_enum.value) - if msg_id == MsgIds.TBD: + 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) @@ -844,13 +860,13 @@ payload += unsigned_short_to_bytearray(self.crc16(payload)) sensor_type = '' - if msg_id == MsgIds.TBD: + if msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_PRESSURE_SENSOR: sensor_type = 'Pressure Sensor' - elif msg_id == MsgIds.TBD: + elif msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_TEMP_SENSOR: sensor_type = 'Temperature Sensor' - elif msg_id == MsgIds.TBD: + elif msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_CONC_PUMP: sensor_type = 'Concentrate Pump' - elif msg_id == MsgIds.TBD: + elif msg_id in [MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_D12_PUMP, MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_D48_PUMP]: sensor_type = 'Dialysate Pump' return cmd_generic_override(payload = payload, @@ -871,17 +887,17 @@ temperature_c: float=0.0, calibration_time: int = 0) -> int: - payload = float_to_bytearray(concentrate_mix_ratio) + 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: + if msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_ACID_CONCENTRATE: conc_type = 'Acid' - elif msg_id == MsgIds.TBD: + elif msg_id == MsgIds.MSG_ID_UI_DD_NVM_SET_CAL_BICARB_CONCENTRATE: conc_type = 'Bicarb' return cmd_generic_override(payload = payload, @@ -901,7 +917,7 @@ accel_z_offset: float=0.0, calibration_time: int = 0) -> int: - payload = float_to_bytearray(accel_x_offset) + payload = float_to_bytearray(accel_x_offset) payload += float_to_bytearray(accel_y_offset) payload += float_to_bytearray(accel_z_offset) payload += integer_to_bytearray(calibration_time) @@ -929,7 +945,7 @@ set_point: float=0.0, calibration_time: int = 0) -> int: - payload = float_to_bytearray(set_point) + payload = float_to_bytearray(set_point) payload += integer_to_bytearray(calibration_time) payload += unsigned_short_to_bytearray(self.crc16(payload))