Index: leahi_dialin/common/td_defs.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/common/td_defs.py (.../td_defs.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/common/td_defs.py (.../td_defs.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -1113,18 +1113,20 @@ @unique class TDValvePositions(DialinEnum): VALVE_POSITION_NOT_IN_POSITION = 0 # Valve not in Position - VALVE_POSITION_A_INSERT_EJECT = 1 # Insert/Eject Valve Position - VALVE_POSITION_B_OPEN = 2 # Open Valve Position - VALVE_POSITION_C_CLOSE = 3 # Closed Valve Position + VALVE_POSITION_A_INSERT_LOAD = 1 # Insert/Eject Valve Position + VALVE_POSITION_B_OPEN_BLOOD = 2 # Open Valve Position + VALVE_POSITION_C_CLOSE_SALINE = 3 # Closed Valve Position VALVE_POSITION_C_PARTIAL_CLOSE = 4 # Partial Close Valve Position + NUM_OF_VALVE_POSITIONS = 5 # Partial Close Valve Position TDValvePositions._str_list = { # Official Name : Accepted strings 'VALVE_POSITION_NOT_IN_POSITION': ['not in position'], - 'VALVE_POSITION_A_INSERT_EJECT': ['a', 'insert/eject', 'insert', 'eject'], - 'VALVE_POSITION_B_OPEN': ['b', 'open'], - 'VALVE_POSITION_C_CLOSE': ['c', 'close', 'closed'], + 'VALVE_POSITION_A_INSERT_LOAD': ['a', 'insert/eject', 'insert', 'eject', 'load'], + 'VALVE_POSITION_B_OPEN_BLOOD': ['b', 'open', 'blood'], + 'VALVE_POSITION_C_CLOSE_SALINE': ['c', 'close', 'closed', 'saline'], 'VALVE_POSITION_C_PARTIAL_CLOSE': [], + 'NUM_OF_VALVE_POSITIONS': [], } Index: leahi_dialin/dd/dialysate_delivery.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/dialysate_delivery.py (.../dialysate_delivery.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/dialysate_delivery.py (.../dialysate_delivery.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -14,8 +14,6 @@ # ############################################################################ -import struct - # Project imports from .modules.alarms import DDAlarms from .modules.balancing_chamber import DDBalancingChamber @@ -45,7 +43,7 @@ from ..common.constants import NO_RESET from ..common import dd_enum_repository from ..common.generic_defs import DataTypes -from ..common.msg_defs import MsgIds, MsgFieldPositions, MsgFieldPositionsFWVersions +from ..common.msg_defs import MsgIds, MsgFieldPositions from ..common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from ..protocols.CAN import DenaliMessage, DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -192,8 +190,7 @@ msg_list.append(('self.dd_operation_sub_mode', DataTypes.U32)) self.process_into_vars(decoder_list = msg_list, - message = message) - + message = message) self.dd_op_mode_timestamp = timestamp @@ -225,8 +222,8 @@ self.logger.debug(f'DD VERSION: {self.dd_version}') if all([len(each) > 0 for each in [result['fpga_id'], result['fpga_major'], result['fpga_minor'], result['fpga_lab']]]): - self.dd_version = f"v{result['fpga_id']}.{result['fpga_major']}.{result['fpga_minor']}-{result['fpga_lab']}" - self.logger.debug(f'DD VERSION: {self.dd_version}') + self.dd_fpga_version = f"v{result['fpga_id']}.{result['fpga_major']}.{result['fpga_minor']}-{result['fpga_lab']}" + self.logger.debug(f'DD FPGA VERSION: {self.dd_fpga_version}') """ major = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray( @@ -256,7 +253,6 @@ self.dd_fpga_version = f"v{fpga_id[0]}.{fpga_major[0]}.{fpga_minor[0]}-{fpga_lab[0]}" self.logger.debug(f"DD FPGA VERSION: {self.dd_fpga_version}") """ - self.dd_version_response_timestamp = timestamp Index: leahi_dialin/dd/modules/balancing_chamber.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/balancing_chamber.py (.../balancing_chamber.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/balancing_chamber.py (.../balancing_chamber.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -88,7 +88,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.dd_bal_chamber_timestamp = timestamp Index: leahi_dialin/dd/modules/blood_leak.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/blood_leak.py (.../blood_leak.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/blood_leak.py (.../blood_leak.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -156,7 +156,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.dd_conductivity_timestamp = timestamp Index: leahi_dialin/dd/modules/concentrate_pump.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/concentrate_pump.py (.../concentrate_pump.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/concentrate_pump.py (.../concentrate_pump.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -98,36 +98,35 @@ @return: None """ sensor_list =[] - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_SET_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_SET_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.TARGET_REV_COUNT, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_REV_COUNT, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.TARGET_REV_COUNT, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_REV_COUNT, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_STATE, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_STATE, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.PULSE_US, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.PULSE_US, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.TARGET_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.TARGET_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.PARKED, DataTypes.BOOL)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.PARKED, DataTypes.BOOL)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID, dd_enum_repository.DDConcentratePumpAttributes.PARK_FAULT, DataTypes.BOOL)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB, dd_enum_repository.DDConcentratePumpAttributes.PARK_FAULT, DataTypes.BOOL)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF, dd_enum_repository.DDConcentratePumpAttributes.TARGET_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_SET_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF, dd_enum_repository.DDConcentratePumpAttributes.TARGET_REV_COUNT, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_REV_COUNT, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_STATE, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF, dd_enum_repository.DDConcentratePumpAttributes.PULSE_US, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_SET_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_SET_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.TARGET_REV_COUNT.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_REV_COUNT.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.TARGET_REV_COUNT.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_REV_COUNT.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_STATE.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_STATE.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.PULSE_US.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.PULSE_US.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.TARGET_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.TARGET_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.PARKED.name, DataTypes.BOOL)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.PARKED.name, DataTypes.BOOL)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D11_CP1_ACID.name, dd_enum_repository.DDConcentratePumpAttributes.PARK_FAULT.name, DataTypes.BOOL)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D10_CP2_BICARB.name, dd_enum_repository.DDConcentratePumpAttributes.PARK_FAULT.name, DataTypes.BOOL)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF.name, dd_enum_repository.DDConcentratePumpAttributes.TARGET_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF.name, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_SET_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF.name, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF.name, dd_enum_repository.DDConcentratePumpAttributes.TARGET_REV_COUNT.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF.name, dd_enum_repository.DDConcentratePumpAttributes.MEASURED_REV_COUNT.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF.name, dd_enum_repository.DDConcentratePumpAttributes.CURRENT_STATE.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConcentratePumpNames.D76_UF.name, dd_enum_repository.DDConcentratePumpAttributes.PULSE_US.name, DataTypes.F32)) self.process_into_dict(dict_to_update = self.dd_concentrate_pumps, - msg_list = sensor_list, + decoder_list = sensor_list, message = message) - self.dd_concentrate_pump_timestamp = timestamp Index: leahi_dialin/dd/modules/conductivity_sensors.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -72,16 +72,15 @@ @return: None """ sensor_list =[] - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D17_COND, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D27_COND, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D29_COND, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D43_COND, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D74_COND, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D17_COND.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D27_COND.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D29_COND.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D43_COND.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D74_COND.name, DataTypes.F32)) self.process_into_dict(dict_to_update = self.dd_conductivity, - msg_list = sensor_list, + decoder_list = sensor_list, message = message) - self.dd_conductivity_timestamp = timestamp Index: leahi_dialin/dd/modules/dialysate_pump.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/dialysate_pump.py (.../dialysate_pump.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/dialysate_pump.py (.../dialysate_pump.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -91,31 +91,30 @@ @return: None """ sensor_list =[] - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.TARGET_RPM, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.TARGET_RPM, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.MEASURED_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.MEASURED_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.CURRENT_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.CURRENT_SPEED, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.STATE, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.STATE, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.TARGET_PRESSURE, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.TARGET_PRESSURE, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.MEASURED_PRESSURE, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.MEASURED_PRESSURE, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.MEASURED_CURRENT, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.MEASURED_CURRENT, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.CONTROL, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.CONTROL, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.DIRECTION_ERROR_COUNT, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.DIRECTION_ERROR_COUNT, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP, dd_enum_repository.DDConductivitySensorNames.MEASURED_DIRECTION, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP, dd_enum_repository.DDConductivitySensorNames.MEASURED_DIRECTION, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.TARGET_RPM.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.TARGET_RPM.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.MEASURED_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.MEASURED_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.CURRENT_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.CURRENT_SPEED.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.STATE.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.STATE.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.TARGET_PRESSURE.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.TARGET_PRESSURE.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.MEASURED_PRESSURE.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.MEASURED_PRESSURE.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.MEASURED_CURRENT.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.MEASURED_CURRENT.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.CONTROL.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.CONTROL.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.DIRECTION_ERROR_COUNT.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.DIRECTION_ERROR_COUNT.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D12_PUMP.name, dd_enum_repository.DDConductivitySensorNames.MEASURED_DIRECTION.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDConductivitySensorNames.D48_PUMP.name, dd_enum_repository.DDConductivitySensorNames.MEASURED_DIRECTION.name, DataTypes.U32)) self.process_into_dict(dict_to_update = self.dd_dialysate_pumps, - msg_list = sensor_list, + decoder_list = sensor_list, message = message) - self.dd_dialysate_pump_timestamp = timestamp Index: leahi_dialin/dd/modules/drybicart.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/drybicart.py (.../drybicart.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/drybicart.py (.../drybicart.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -94,7 +94,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.dd_dry_bicart_timestamp = timestamp Index: leahi_dialin/dd/modules/gen_dialysate.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/gen_dialysate.py (.../gen_dialysate.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/gen_dialysate.py (.../gen_dialysate.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -76,7 +76,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.dd_gen_dialysate_timestamp = timestamp Index: leahi_dialin/dd/modules/heaters.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/heaters.py (.../heaters.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/heaters.py (.../heaters.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -95,16 +95,16 @@ @returns none """ sensor_list = [] - sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT, dd_enum_repository.DDHeaterAttributes.HEAT_DUTY_CYCLE, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D45_HEAT, dd_enum_repository.DDHeaterAttributes.HEAT_DUTY_CYCLE, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT, dd_enum_repository.DDHeaterAttributes.HEAT_TARGET_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D45_HEAT, dd_enum_repository.DDHeaterAttributes.HEAT_TARGET_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT, dd_enum_repository.DDHeaterAttributes.HEAT_STATE, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D45_HEAT, dd_enum_repository.DDHeaterAttributes.HEAT_STATE, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT, dd_enum_repository.DDHeaterAttributes.FEED_FORWARD, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT, dd_enum_repository.DDHeaterAttributes.PWM_PERIOD, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT, dd_enum_repository.DDHeaterAttributes.ADJUSTED_TARGET_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT, dd_enum_repository.DDHeaterAttributes.TARGET_TEMP_TD, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT.name, dd_enum_repository.DDHeaterAttributes.HEAT_DUTY_CYCLE.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D45_HEAT.name, dd_enum_repository.DDHeaterAttributes.HEAT_DUTY_CYCLE.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT.name, dd_enum_repository.DDHeaterAttributes.HEAT_TARGET_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D45_HEAT.name, dd_enum_repository.DDHeaterAttributes.HEAT_TARGET_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT.name, dd_enum_repository.DDHeaterAttributes.HEAT_STATE.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D45_HEAT.name, dd_enum_repository.DDHeaterAttributes.HEAT_STATE.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT.name, dd_enum_repository.DDHeaterAttributes.FEED_FORWARD.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT.name, dd_enum_repository.DDHeaterAttributes.PWM_PERIOD.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT.name, dd_enum_repository.DDHeaterAttributes.ADJUSTED_TARGET_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDHeaterNames.D5_HEAT.name, dd_enum_repository.DDHeaterAttributes.TARGET_TEMP_TD.name, DataTypes.F32)) msg_list =[] msg_list.append(('self.dbg1', DataTypes.F32)) msg_list.append(('self.dbg2', DataTypes.F32)) @@ -122,7 +122,6 @@ self.process_into_vars(decoder_list = msg_list, message = message, start_from_byte = len(sensor_list) * DataTypes.U32.size()) - self.dd_heaters_timestamp = timestamp Index: leahi_dialin/dd/modules/levels.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -69,10 +69,10 @@ @returns none """ sensor_list =[] - sensor_list.append((dd_enum_repository.DDLevelSensorNames.D46_LEVEL, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDLevelSensorNames.D63_LEVEL, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDLevelSensorNames.D98_LEVEL, DataTypes.U32)) - sensor_list.append((dd_enum_repository.DDLevelSensorNames.D6_LEVEL, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDLevelSensorNames.D46_LEVEL.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDLevelSensorNames.D63_LEVEL.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDLevelSensorNames.D98_LEVEL.name, DataTypes.U32)) + sensor_list.append((dd_enum_repository.DDLevelSensorNames.D6_LEVEL.name, DataTypes.U32)) msg_list =[] msg_list.append(('self.dd_bicarb_level', DataTypes.U32)) @@ -82,8 +82,6 @@ self.process_into_vars(decoder_list = msg_list, message = message, start_from_byte = len(sensor_list) * DataTypes.U32.size()) - - self.dd_levels_timestamp = timestamp Index: leahi_dialin/dd/modules/post_gen_dialysate.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/post_gen_dialysate.py (.../post_gen_dialysate.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/post_gen_dialysate.py (.../post_gen_dialysate.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -65,7 +65,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.post_gen_state_timestamp = timestamp Index: leahi_dialin/dd/modules/pre_gen_dialysate.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/pre_gen_dialysate.py (.../pre_gen_dialysate.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/pre_gen_dialysate.py (.../pre_gen_dialysate.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -100,7 +100,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.pre_gen_request_timestamp = timestamp Index: leahi_dialin/dd/modules/pressure_sensors.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -70,17 +70,16 @@ @return: none """ sensor_list =[] - sensor_list.append((dd_enum_repository.DDPressureSensorNames.D9_PRES, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDPressureSensorNames.D66_PRES, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDPressureSensorNames.D51_PRES, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDPressureSensorNames.D18_PRES, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDPressureSensorNames.D41_PRES, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDPressureSensorNames.D87_PRES, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDPressureSensorNames.D9_PRES.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDPressureSensorNames.D66_PRES.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDPressureSensorNames.D51_PRES.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDPressureSensorNames.D18_PRES.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDPressureSensorNames.D41_PRES.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDPressureSensorNames.D87_PRES.name, DataTypes.F32)) self.process_into_dict(dict_to_update = self.dd_pressures, decoder_list = sensor_list, message = message) - self.dd_pressures_timestamp = timestamp Index: leahi_dialin/dd/modules/rinse_pump.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/rinse_pump.py (.../rinse_pump.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/rinse_pump.py (.../rinse_pump.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -72,7 +72,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.dd_rinse_pump_timestamp = timestamp Index: leahi_dialin/dd/modules/spent_chamber_fill.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/spent_chamber_fill.py (.../spent_chamber_fill.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/spent_chamber_fill.py (.../spent_chamber_fill.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -20,7 +20,7 @@ # Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.generic_defs import DataTypes -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -72,7 +72,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.dd_spent_chamber_timestamp = timestamp Index: leahi_dialin/dd/modules/temperature_sensors.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -82,34 +82,33 @@ @returns none """ sensor_list =[] - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D1_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D78_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D4_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D50_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D99_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.BRD_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D16_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D28_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D30_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D44_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D75_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D4_AVG_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D50_AVG_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D99_AVG_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D28_AVG_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D30_AVG_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D78_AVG_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D9_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D66_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D51_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D18_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D41_TEMP, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D87_TEMP, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D1_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D78_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D4_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D50_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D99_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.BRD_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D16_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D28_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D30_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D44_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D75_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D4_AVG_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D50_AVG_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D99_AVG_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D28_AVG_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D30_AVG_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D78_AVG_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D9_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D66_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D51_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D18_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D41_TEMP.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D87_TEMP.name, DataTypes.F32)) self.process_into_dict(dict_to_update = self.dd_temperatures, decoder_list = sensor_list, message = message) - self.dd_temperatures_timestamp = timestamp Index: leahi_dialin/dd/modules/ultrafiltration.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/ultrafiltration.py (.../ultrafiltration.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/ultrafiltration.py (.../ultrafiltration.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -73,7 +73,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.uf_timestamp = timestamp Index: leahi_dialin/dd/modules/valves.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/valves.py (.../valves.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/valves.py (.../valves.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -284,7 +284,6 @@ self.valves_sensed_states[valve_id] = valve_state_number start = end end += 1 - self.dd_valves_states_timestamp = timestamp Index: leahi_dialin/dd/modules/voltages.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/modules/voltages.py (.../voltages.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/voltages.py (.../voltages.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -21,7 +21,7 @@ from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import dd_enum_repository from leahi_dialin.common.generic_defs import DataTypes -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -63,19 +63,18 @@ @return: none """ sensor_list = [] - sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_1_2V, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_3_3V, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_5V_LOGIC, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_24V_1, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_24V_2, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_FPGA_VCC_V, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_FPGA_AUX_V, DataTypes.F32)) - sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_FPGA_PVN_V, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_1_2V.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_3_3V.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_5V_LOGIC.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_24V_1.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_24V_2.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_FPGA_VCC_V.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_FPGA_AUX_V.name, DataTypes.F32)) + sensor_list.append((dd_enum_repository.DDMonitoredVoltages.MONITORED_LINE_FPGA_PVN_V.name, DataTypes.F32)) self.process_into_dict(dict_to_update = self.monitored_voltages, decoder_list = sensor_list, message = message) - self.dd_voltages_timestamp = timestamp Index: leahi_dialin/dd/proxies/td_proxy.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/dd/proxies/td_proxy.py (.../td_proxy.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/proxies/td_proxy.py (.../td_proxy.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,7 +8,7 @@ # @file td_proxy.py # # @author (last) Zoltan Miskolci -# @date (last) 04-May-2026ks +# @date (last) 04-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # @@ -81,7 +81,6 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.dd_td_to_dd_request_response_timestamp = timestamp Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,14 +8,13 @@ # @file filtration_purification.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ -import struct - +# Project imports from .modules.alarms import FPAlarms from .modules.boost_pump import FPBoostPump from .modules.conductivity_sensors import FPConductivitySensors @@ -34,7 +33,8 @@ from ..common.constants import NO_RESET from ..common import fp_enum_repository -from ..common.msg_defs import MsgIds, MsgFieldPositions, MsgFieldPositionsFWVersions +from ..common.generic_defs import DataTypes +from ..common.msg_defs import MsgIds, MsgFieldPositions from ..common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from ..protocols.CAN import DenaliMessage, DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -78,25 +78,26 @@ self.callback_id = None # register handler for FP operation mode broadcast messages if self.can_interface is not None: - self.can_interface.register_receiving_publication_function(DenaliChannels.fp_sync_broadcast_ch_id, - MsgIds.MSG_ID_FP_OP_MODE_DATA.value, - self._handler_fp_op_mode_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_OP_MODE_DATA.value, + function = self._handler_fp_op_mode_sync) # FP's version is DD's version since they are the same FW. - self.can_interface.register_receiving_publication_function(DenaliChannels.dd_sync_broadcast_ch_id, - MsgIds.MSG_ID_DD_VERSION_RESPONSE.value, - self._handler_fp_version_response_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.dd_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_DD_VERSION_RESPONSE.value, + function = self._handler_fp_version_response_sync) - self.can_interface.register_receiving_publication_function(DenaliChannels.fp_sync_broadcast_ch_id, - MsgIds.MSG_ID_FP_DEBUG_EVENT.value, - self._handler_fp_debug_event_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_DEBUG_EVENT.value, + function = self._handler_fp_debug_event_sync) - self.can_interface.register_receiving_publication_function(DenaliChannels.dd_to_dialin_ch_id, - MsgIds.MSG_ID_FP_DEF_STATUS_RESPONSE.value, - self._handler_fp_defeatured_response) - self.can_interface.register_receiving_publication_function(DenaliChannels.dd_to_dialin_ch_id, - MsgIds.MSG_ID_FP_BOOST_PUMP_INSTALL_STATUS_RESPONSE.value, - self._handler_fp_boost_pump_installed_response) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.dd_to_dialin_ch_id, + message_id = MsgIds.MSG_ID_FP_DEF_STATUS_RESPONSE.value, + function = self._handler_fp_defeatured_response) + + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.dd_to_dialin_ch_id, + message_id = MsgIds.MSG_ID_FP_BOOST_PUMP_INSTALL_STATUS_RESPONSE.value, + function = self._handler_fp_boost_pump_installed_response) # Dialin will send a login message during construction. This is for the leahi subsystems to start # publishing CAN data when there is no UI connected as the UI typically does this job. self.cmd_log_in_to_fp() @@ -175,33 +176,27 @@ @return: None if not successful, the version string if unpacked successfully """ - major = struct.unpack(' 0 for each in [major, minor, micro, build, compatibility]]): - self.fp_version = f"v{major[0]}.{minor[0]}.{micro[0]}-{build[0]}.{compatibility[0]}" - self.logger.debug(f"FP VERSION: {self.fp_version}") + result = self.process_into_vars(decoder_list = msg_list, + message = message) - if all([len(each) > 0 for each in [fpga_id, fpga_major, fpga_minor, fpga_lab]]): - self.fp_fpga_version = f"v{fpga_id[0]}.{fpga_major[0]}.{fpga_minor[0]}-{fpga_lab[0]}" - self.logger.debug(f"FP FPGA VERSION: {self.fp_fpga_version}") + if all([len(each) > 0 for each in [result['major'], result['minor'], result['micro'], result['build'], result['compatibility']]]): + self.fp_version = f"v{result['major']}.{result['minor']}.{result['micro']}-{result['build']}.{result['compatibility']}" + self.logger.debug(f'FP VERSION: {self.fp_version}') + if all([len(each) > 0 for each in [result['fpga_id'], result['fpga_major'], result['fpga_minor'], result['fpga_lab']]]): + self.fp_fpga_version = f"v{result['fpga_id']}.{result['fpga_major']}.{result['fpga_minor']}-{result['fpga_lab']}" + self.logger.debug(f'FP FPGA VERSION: {self.fp_fpga_version}') self.fp_version_response_timestamp = timestamp @@ -214,13 +209,12 @@ @param message: published FP operation mode broadcast message @return: None """ - mode = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - smode = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) + msg_list = [] + msg_list.append(('self.fp_operation_mode', DataTypes.U32)) + msg_list.append(('self.fp_operation_sub_mode', DataTypes.U32)) - self.fp_operation_mode = mode[0] - self.fp_operation_sub_mode = smode[0] + self.process_into_vars(decoder_list = msg_list, + message = message) self.fp_op_mode_timestamp = timestamp @@ -232,9 +226,11 @@ @param message: defeatured response from FP @return: None """ - self.fp_defeatured = True if struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] == 1 else False + msg_list = [] + msg_list.append(('self.fp_defeatured', DataTypes.BOOL)) + self.process_into_vars(decoder_list = msg_list, + message = message) self.fp_defeatured_timestamp = timestamp @@ -246,9 +242,11 @@ @param message: defeatured response from FP @return: None """ - self.fp_p40_installed = True if struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] == 1 else False + msg_list = [] + msg_list.append(('self.fp_p40_installed', DataTypes.BOOL)) + self.process_into_vars(decoder_list = msg_list, + message = message) self.fp_p40_installed_timestamp = timestamp Index: leahi_dialin/fp/modules/alarms.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/alarms.py (.../alarms.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/alarms.py (.../alarms.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,19 +8,21 @@ # @file alarms.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Quang Nguyen # @date (original) 02-Sep-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +import struct +# Project imports from leahi_dialin.common.alarm_defs import AlarmList from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common import fp_enum_repository -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliMessage, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -45,9 +47,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_alarm_broadcast_ch_id - self.msg_id_fp_alarm_triggered = MsgIds.MSG_ID_ALARM_TRIGGERED.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_alarm_triggered, self._handler_alarm_triggered) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_alarm_broadcast_ch_id, + message_id = MsgIds.MSG_ID_ALARM_TRIGGERED.value, + function = self._handler_alarm_triggered) self.fp_alarm_triggered_timestamp = 0.0 #: The timestamp of the last Alarm Triggered message @@ -62,26 +64,7 @@ self.last_alarm_data_1 = 0.0 #: The last Alarm's data part 1 self.last_alarm_data_2 = 0.0 #: The last Alarm's data part 2 - # alarm information - self.alarm_data_type = dict() #: The Alarm's Data type in dict format - # Loop through the list of the event data type enum and update the dictionary - for data_type in fp_enum_repository.DataTypes: - event_data_type = fp_enum_repository.DataTypes(data_type).name - struct_unpack_type = None - - # If U32 is in the data type enum (i.e. EVENT_DATA_TYPE_U32), then the key is the enum and the value is - # the corresponding format in the python struct - if 'U32' in event_data_type or 'BOOL' in event_data_type or 'NONE' in event_data_type: - struct_unpack_type = 'I' - elif 'S32' in event_data_type: - struct_unpack_type = 'i' - elif 'F32' in event_data_type: - struct_unpack_type = 'f' - - self.alarm_data_type[event_data_type] = struct_unpack_type - - @publish(["msg_id_fp_alarm_triggered", "alarm_states", "alarm_conditions", "alarm_data", "alarm_priorities", "alarm_ranks", "alarm_clear_top_only_flags", "fp_alarm_triggered_timestamp"]) @@ -93,35 +76,51 @@ @return: none """ self.logger.debug("Alarm activated!") - alarm_id = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) + # Local variables + alarm_id:int + data_typ_1:int + data_1:int + data_typ_2:int + data_2:int + priority:int + rank:int + clr_top_only:int + + msg_list = [] + msg_list.append(('alarm_id', DataTypes.U32)) + msg_list.append(('data_typ_1', DataTypes.U32)) + msg_list.append(('data_1', 'data_typ_1')) + msg_list.append(('data_typ_2', DataTypes.U32)) + msg_list.append(('data_2', 'data_typ_2')) + msg_list.append(('priority', DataTypes.U32)) + msg_list.append(('rank', DataTypes.U32)) + msg_list.append(('clr_top_only', DataTypes.U32)) - data_typ_1 = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - # Get the corresponding structure format - struct_data_type_1 = self.alarm_data_type[fp_enum_repository.DataTypes(data_typ_1[0]).name] - # Get the data value by unpacking the data type - data_1 = struct.unpack(struct_data_type_1, bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) + i = 1 + for msg_detail in msg_list: + start_pos = eval(f'MsgFieldPositions.START_POS_FIELD_{i}') + end_pos = eval(f'MsgFieldPositions.END_POS_FIELD_{i}') + if isinstance(msg_detail[1], DataTypes): + unpack_attrib = msg_detail[1].unpack_attrib() + else: + data_type_val:int + exec(f'data_type_val = {msg_detail[1]}') + unpack_attrib = DataTypes(data_type_val).unpack_attrib() + value = struct.unpack(unpack_attrib,bytearray(message['message'][start_pos:end_pos]))[0] + exec(f'{msg_detail[0]} = {value}') + i += 1 - data_typ_2 = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) - # Get the corresponding structure format - struct_data_type_2 = self.alarm_data_type[fp_enum_repository.DataTypes(data_typ_2[0]).name] - # Get the data value by unpacking the data type - data_2 = struct.unpack(struct_data_type_2, bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) - - priority = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) - rank = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])) - clr_top_only = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])) - self.logger.debug("Alarm ID: %d %d %d" % (alarm_id[0], data_1[0], data_2[0])) - self.alarm_states[alarm_id[0]] = True - self.alarm_conditions[alarm_id[0]] = True - self.alarm_priorities[alarm_id[0]] = priority[0] - self.alarm_ranks[alarm_id[0]] = rank[0] - self.alarm_clear_top_only_flags[alarm_id[0]] = clr_top_only[0] - self.alarm_data[alarm_id[0]] = [data_1[0], data_2[0]] - self.last_alarm_triggered = alarm_id[0] - self.last_alarm_data_1 = data_1[0] - self.last_alarm_data_2 = data_2[0] - self.fp_alarm_triggered_timestamp = timestamp + self.alarm_states[alarm_id] = True + self.alarm_conditions[alarm_id] = True + self.alarm_priorities[alarm_id] = priority + self.alarm_ranks[alarm_id] = rank + self.alarm_clear_top_only_flags[alarm_id] = clr_top_only + self.alarm_data[alarm_id] = [data_1, data_2] + self.last_alarm_triggered = alarm_id + self.last_alarm_data_1 = data_1 + self.last_alarm_data_2 = data_2 + self.dd_alarm_triggered_timestamp = timestamp def cmd_alarm_state_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: Index: leahi_dialin/fp/modules/boost_pump.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/boost_pump.py (.../boost_pump.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/boost_pump.py (.../boost_pump.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,18 +8,20 @@ # @file boost_pump.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import fp_enum_repository -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -41,10 +43,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.msg_id_fp_boost_pump_data = MsgIds.MSG_ID_FP_BOOST_PUMP_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_boost_pump_data, - self._handler_pump_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_BOOST_PUMP_DATA.value, + function = self._handler_pump_sync) self.boost_pump_timestamp = 0.0 #: The timestamp of the last message @@ -73,25 +74,20 @@ @param message: published FP ro pump data message @return: none """ - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.STATE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.DUTY_CYCLE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.FB_DUTY_CYCLE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.SPEED.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.TARGET_PRESSURE.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.TARGET_FLOW.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.TARGET_DUTY_CYCLE_PCT.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.DUTY_CYCLE_PCT.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.boost_pump[fp_enum_repository.FPBoostPumpNames.P40_PUMP.name][fp_enum_repository.FPPumpAttributes.FB_DUTY_CYCLE_PCT.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] + sensor_list =[] + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.STATE.name, DataTypes.U32)) + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.DUTY_CYCLE.name, DataTypes.U32)) + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.FB_DUTY_CYCLE.name, DataTypes.U32)) + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.SPEED.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.TARGET_PRESSURE.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.TARGET_FLOW.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.TARGET_DUTY_CYCLE_PCT.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.DUTY_CYCLE_PCT.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPBoostPumpNames.P40_PUMP.name, fp_enum_repository.FPPumpAttributes.FB_DUTY_CYCLE_PCT.name, DataTypes.F32)) + self.process_into_dict(dict_to_update = self.boost_pump, + decoder_list = sensor_list, + message = message) self.boost_pump_timestamp = timestamp Index: leahi_dialin/fp/modules/conductivity_sensors.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,18 +8,20 @@ # @file conductivity_sensors.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Quang Nguyen # @date (original) 20-Jul-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import fp_enum_repository from leahi_dialin.common.fp_defs import BETA_IOFP_COND_SENSOR_OFFSET +from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels @@ -43,11 +45,13 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.can_interface.register_receiving_publication_function(channel_id, MsgIds.MSG_ID_FP_CONDUCTIVITY_DATA.value, - self._handler_conductivity_sensors_sync) - self.can_interface.register_receiving_publication_function(channel_id, MsgIds.MSG_ID_FP_RO_REJECTION_RATIO_DATA.value, - self._handler_ro_rejection_ratio_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_CONDUCTIVITY_DATA.value, + function = self._handler_conductivity_sensors_sync) + + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_RO_REJECTION_RATIO_DATA.value, + function = self._handler_ro_rejection_ratio_sync) self.fp_conductivity_timestamp = 0.0 #: The timestamp of the last Conductivity data message self.ro_rejection_ratio_timestamp = 0.0 #: The timestamp of the last RO Rejection Ratio data message @@ -77,11 +81,13 @@ @param message: published conductivity sensor data message @return: None """ - self.fp_conductivity[fp_enum_repository.FPConductivitySensorNames.P9_COND.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.fp_conductivity[fp_enum_repository.FPConductivitySensorNames.P18_COND.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + sensor_list =[] + sensor_list.append((fp_enum_repository.FPConductivitySensorNames.P9_COND.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPConductivitySensorNames.P18_COND.name, DataTypes.F32)) + self.process_into_dict(dict_to_update = self.fp_conductivity, + decoder_list = sensor_list, + message = message) self.fp_conductivity_timestamp = timestamp @@ -94,17 +100,16 @@ @param message: Published RO Rejection Ratio data message @return: None """ - self.ro_rejection_ratio[fp_enum_repository.FPRORejectionRatioNames.RAW_RO_REJECTION_RATIO.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.ro_rejection_ratio[fp_enum_repository.FPRORejectionRatioNames.RAW_RO_REJECTION_RATIO_TANK_FILL.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.ro_rejection_ratio[fp_enum_repository.FPRORejectionRatioNames.AVG_RO_REJECTION_RATIO.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.ro_rejection_ratio[fp_enum_repository.FPRORejectionRatioNames.AVG_RO_REJECTION_RATIO_TANK_FILL.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.ro_rejection_ratio[fp_enum_repository.FPRORejectionRatioNames.GEN_PERMEATE_STATE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + sensor_list =[] + sensor_list.append((fp_enum_repository.FPRORejectionRatioNames.RAW_RO_REJECTION_RATIO.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPRORejectionRatioNames.RAW_RO_REJECTION_RATIO_TANK_FILL.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPRORejectionRatioNames.AVG_RO_REJECTION_RATIO.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPRORejectionRatioNames.AVG_RO_REJECTION_RATIO_TANK_FILL.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPRORejectionRatioNames.GEN_PERMEATE_STATE.name, DataTypes.U32)) + self.process_into_dict(dict_to_update = self.ro_rejection_ratio, + decoder_list = sensor_list, + message = message) self.ro_rejection_ratio_timestamp = timestamp Index: leahi_dialin/fp/modules/events.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/events.py (.../events.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/events.py (.../events.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,7 +8,7 @@ # @file events.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Dara Navaei # @date (original) 12-Oct-2021 # @@ -20,6 +20,7 @@ from time import time from leahi_dialin.common import fp_enum_repository +from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels, DenaliCanMessenger from leahi_dialin.utils.abstract_classes import AbstractSubSystem Index: leahi_dialin/fp/modules/flow_sensors.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/flow_sensors.py (.../flow_sensors.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/flow_sensors.py (.../flow_sensors.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,18 +8,20 @@ # @file flow_sensors.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import fp_enum_repository -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -42,9 +44,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.msg_id_fp_flow_data = MsgIds.MSG_ID_FP_FLOW_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_flow_data, self._handler_flow_sensor_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_FLOW_DATA.value, + function = self._handler_flow_sensor_sync) self.fp_flow_timestamp = 0 #: The timestamp of the last message @@ -63,11 +65,13 @@ @param message: published flow sensor data message @returns none """ - self.fp_flows[fp_enum_repository.FPFlowSensorNames.P7_FLOW.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.fp_flows[fp_enum_repository.FPFlowSensorNames.P16_FLOW.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + sensor_list =[] + sensor_list.append((fp_enum_repository.FPFlowSensorNames.P7_FLOW.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPFlowSensorNames.P16_FLOW.name, DataTypes.F32)) + self.process_into_dict(dict_to_update = self.fp_flows, + decoder_list = sensor_list, + message = message) self.fp_flow_timestamp = timestamp Index: leahi_dialin/fp/modules/fp_test_configs.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/fp_test_configs.py (.../fp_test_configs.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/fp_test_configs.py (.../fp_test_configs.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,14 +8,16 @@ # @file fp_test_configs.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Jonny Paguio # @date (original) 20-Aug-2025 # ############################################################################ +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_override @@ -41,9 +43,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_to_dialin_ch_id - self.can_interface.register_receiving_publication_function(channel_id, MsgIds.MSG_ID_FP_SEND_TEST_CONFIGURATION.value, - self._handler_fp_test_config_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_to_dialin_ch_id, + message_id = MsgIds.MSG_ID_FP_SEND_TEST_CONFIGURATION.value, + function = self._handler_fp_test_config_sync) self.fp_test_configs_response_timestamp = 0.0 #: The timestamp of the last message self.fp_test_configs = dict() #: The Test Config data in dictionary format Index: leahi_dialin/fp/modules/levels.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/levels.py (.../levels.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/levels.py (.../levels.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,19 +8,21 @@ # @file levels.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Dara Navaei # @date (original) 29-May-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.fp_defs import BETA_IOFP_LEVEL_OFFSET from leahi_dialin.common import fp_enum_repository -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.fp_defs import BETA_IOFP_LEVEL_OFFSET +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -43,9 +45,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.msg_id_fp_level_data = MsgIds.MSG_ID_FP_LEVEL_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_level_data, self._handler_levels_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_LEVEL_DATA.value, + function = self._handler_levels_sync) self.fp_levels_timestamp = 0 #: The timestamp of the last message @@ -65,9 +67,12 @@ @param message: published levels data message @returns none """ - self.fp_levels[fp_enum_repository.FPFloaterLevelSensorNames.P25_LEVEL.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + sensor_list =[] + sensor_list.append((fp_enum_repository.FPFloaterLevelSensorNames.P25_LEVEL.name, DataTypes.U32)) + self.process_into_dict(dict_to_update = self.fp_levels, + decoder_list = sensor_list, + message = message) self.fp_levels_timestamp = timestamp Index: leahi_dialin/fp/modules/permeate_tank.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/permeate_tank.py (.../permeate_tank.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/permeate_tank.py (.../permeate_tank.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,17 +8,19 @@ # @file permeate_tank.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Micahel Garthwaite # @date (original) 29-Oct-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -42,10 +44,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.dd_sync_broadcast_ch_id - self.msg_id_fp_permeate_tank_data = MsgIds.MSG_ID_FP_PERMEATE_TANK_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_permeate_tank_data, - self._handler_permeate_tank_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, # DenaliChannels.dd_sync_broadcast_ch_id ?? + message_id = MsgIds.MsgIds.value, + function = self._handler_permeate_tank_sync) self.permeate_tank_timestamp = 0.0 #: The timestamp of the last message self.permeate_tank_state = 0 #: The Permeate Tank's State value @@ -59,9 +60,11 @@ @param message: published permeate tank data message @return: None """ - self.permeate_tank_state = struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + msg_list =[] + msg_list.append(('self.permeate_tank_state', DataTypes.U32)) + self.process_into_vars(decoder_list = msg_list, + message = message) self.permeate_tank_timestamp = timestamp Index: leahi_dialin/fp/modules/pressure_sensors.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/pressure_sensors.py (.../pressure_sensors.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,19 +8,21 @@ # @file pressure_sensors.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project importsk from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import fp_enum_repository from leahi_dialin.common.fp_defs import BETA_IOFP_PRES_SENSOR_OFFSET -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -42,10 +44,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.msg_id_fp_pressures_data = MsgIds.MSG_ID_FP_PRESSURES_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_pressures_data, - self._handler_pressure_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_PRESSURES_DATA.value, + function = self._handler_pressure_sync) self.fp_pressure_timestamp = 0.0 #: The timestamp of the last message @@ -68,17 +69,16 @@ @param message: published FP pressure sensor data message @return: none """ - self.fp_pressures[fp_enum_repository.FPPressureSensorNames.M3_PRES.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.fp_pressures[fp_enum_repository.FPPressureSensorNames.P8_PRES.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.fp_pressures[fp_enum_repository.FPPressureSensorNames.P13_PRES.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.fp_pressures[fp_enum_repository.FPPressureSensorNames.P17_PRES.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.fp_pressures[fp_enum_repository.FPPressureSensorNames.P46_PRES.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + sensor_list =[] + sensor_list.append((fp_enum_repository.FPPressureSensorNames.M3_PRES.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPPressureSensorNames.P8_PRES.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPPressureSensorNames.P13_PRES.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPPressureSensorNames.P17_PRES.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPPressureSensorNames.P46_PRES.name, DataTypes.F32)) + self.process_into_dict(dict_to_update = self.fp_pressures, + decoder_list = sensor_list, + message = message) self.fp_pressure_timestamp = timestamp @@ -158,4 +158,3 @@ override_text = f'{str(pressure)} psi', logger = self.logger, can_interface = self.can_interface) - Index: leahi_dialin/fp/modules/ro_pump.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/ro_pump.py (.../ro_pump.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/ro_pump.py (.../ro_pump.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,18 +8,20 @@ # @file ro_pump.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import fp_enum_repository -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -41,10 +43,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.msg_id_fp_ro_pump_data = MsgIds.MSG_ID_FP_RO_PUMP_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_ro_pump_data, - self._handler_pump_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_RO_PUMP_DATA.value, + function = self._handler_pump_sync) self.ro_pump_timestamp = 0.0 #: The timestamp of the last message @@ -73,25 +74,21 @@ @param message: published FP ro pump data message @return: none """ - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.STATE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.DUTY_CYCLE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.FB_DUTY_CYCLE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.SPEED.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.TARGET_PRES.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.TARGET_FLOW.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.TARGET_DUTY_CYCLE_PCT.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.DUTY_CYCLE_PCT.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.ro_pump[fp_enum_repository.FPROPumpNames.P12_PUMP.name][fp_enum_repository.FPPumpAttributes.FB_DUTY_CYCLE_PCT.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] + sensor_list =[] + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.STATE.name, DataTypes.U32)) + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.DUTY_CYCLE.name, DataTypes.U32)) + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.FB_DUTY_CYCLE.name, DataTypes.U32)) + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.SPEED.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.TARGET_PRES.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.TARGET_FLOW.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.TARGET_DUTY_CYCLE_PCT.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.DUTY_CYCLE_PCT.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPROPumpNames.P12_PUMP.name, fp_enum_repository.FPPumpAttributes.FB_DUTY_CYCLE_PCT.name, DataTypes.F32)) + sensor_list.appen + self.process_into_dict(dict_to_update = self.ro_pump, + decoder_list = sensor_list, + message = message) self.ro_pump_timestamp = timestamp Index: leahi_dialin/fp/modules/temperatures.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/temperatures.py (.../temperatures.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/temperatures.py (.../temperatures.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,19 +8,21 @@ # @file temperature_sensors.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Dara Navaei # @date (original) 01-Dec-2021 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import fp_enum_repository from leahi_dialin.common.fp_defs import BETA_IOFP_COND_SENSOR_OFFSET, BETA_IOFP_PRES_SENSOR_OFFSET -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -37,10 +39,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.msg_id_fp_temperature_data = MsgIds.MSG_ID_FP_TEMPERATURE_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_temperature_data, - self._handler_temperature_sensors_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_TEMPERATURE_DATA.value, + function = self._handler_temperature_sensors_sync) self.fp_temperature_sensors_timestamp = 0 #: The timestamp of the last message @@ -69,25 +70,21 @@ @returns none """ sensor_list =[] - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.M3_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P8_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P13_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P17_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P46_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P10_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P19_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P7_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P16_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P7_INTERNAL_TEMP, 'f')) - sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P16_INTERNAL_TEMP, 'f')) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.M3_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P8_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P13_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P17_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P46_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P10_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P19_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P7_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P16_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P7_INTERNAL_TEMP.name, DataTypes.F32)) + sensor_list.append((fp_enum_repository.FPTemperatureSensorNames.P16_INTERNAL_TEMP.name, DataTypes.F32)) - i = 1 - for sensor in sensor_list: - start_pos = eval(f'MsgFieldPositions.START_POS_FIELD_{i}') - end_pos = eval(f'MsgFieldPositions.END_POS_FIELD_{i}') - self.fp_temperatures[sensor[0].name] = struct.unpack(sensor[1], bytearray(message['message'][start_pos:end_pos]))[0] - i += 1 - + self.process_into_dict(dict_to_update = self.fp_temperatures, + decoder_list = sensor_list, + message = message) self.fp_temperature_sensors_timestamp = timestamp Index: leahi_dialin/fp/modules/valves.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/valves.py (.../valves.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/valves.py (.../valves.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,18 +8,21 @@ # @file valves.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peman Montazemi # @date (original) 19-May-2020 # ############################################################################ +# Module imports import struct from logging import Logger from collections import OrderedDict +# Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import fp_enum_repository +from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.fp_defs import BETA_IOFP_VALVE_OFFSET from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override @@ -54,9 +57,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.msg_id_fp_valves_states_data = MsgIds.MSG_ID_FP_VALVES_STATES_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_valves_states_data, self._handler_valves_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.fp_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_FP_VALVES_STATES_DATA.value, + function = self._handler_valves_sync) self.fp_valves_states_timestamp = 0.0 #: The timestamp of the last message self.valve_states_all = 0x0000 #: States of all the vales in binary format @@ -130,13 +133,13 @@ @return: none """ # Extract each valve state from U08 valves states using bit-masking - io_valves = struct.unpack('B', bytearray(message['message'][self.START_IO_VALVES_STATES:self.END_IO_VALVES_STATES])) + io_valves = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray(message['message'][self.START_IO_VALVES_STATES:self.END_IO_VALVES_STATES])) self.m4_valv["state"] = self._binary_to_valve_state(io_valves[0] & 1) self.m12_valv["state"] = self._binary_to_valve_state(io_valves[0] & 2) self.valve_states_all = io_valves[0] # Extract each valve state from U08 valves states using bit-masking - fp_valves = struct.unpack('B', bytearray(message['message'][self.START_FP_VALVES_STATES:self.END_FP_VALVES_STATES])) + fp_valves = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray(message['message'][self.START_FP_VALVES_STATES:self.END_FP_VALVES_STATES])) self.p11_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 1) self.p33_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 2) self.p34_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 4) @@ -154,7 +157,7 @@ start = self.END_FP_VALVES_STATES end = start + 1 for valve_id in self.valves_sensed_states: - self.valves_sensed_states[valve_id] = struct.unpack('B', bytearray(message['message'][start:end]))[0] + self.valves_sensed_states[valve_id] = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray(message['message'][start:end]))[0] start = end end += 1 self.fp_valves_states_timestamp = timestamp Index: leahi_dialin/fp/modules/water_pumps.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/modules/water_pumps.py (.../water_pumps.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/modules/water_pumps.py (.../water_pumps.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,14 +8,16 @@ # @file water_pumps.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common import fp_enum_repository from leahi_dialin.common.msg_defs import MsgIds @@ -41,17 +43,17 @@ # no current registered call back methods - def cmd_pump_set_speed_rate_override(self, pump: int, rpm: int, reset: int = NO_RESET) -> int: + def cmd_pump_set_speed_rate_override(self, pump: int, speed: int, reset: int = NO_RESET) -> int: """ Constructs and sends the boost pump set speed rate command Constraints: Must be logged into FP. - @param rpm: integer - speed set point (in rpm) + @param speed: integer - speed set point (in rpm) @return: 1 if successful, zero otherwise """ rst = integer_to_bytearray(reset) - rpm = integer_to_bytearray(rpm) + rpm = integer_to_bytearray(speed) pmp = integer_to_bytearray(pump) payload = rst + rpm + pmp Index: leahi_dialin/fp/proxies/dd_proxy.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/fp/proxies/dd_proxy.py (.../dd_proxy.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/fp/proxies/dd_proxy.py (.../dd_proxy.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,16 +8,17 @@ # @file dd_proxy.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.msg_defs import MsgIds -from leahi_dialin.common import fp_enum_repository from leahi_dialin.common.test_config_defs import DDFPTestConfigOptions from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliMessage, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem Index: leahi_dialin/td/modules/air_pump.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/air_pump.py (.../air_pump.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/air_pump.py (.../air_pump.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,17 +8,19 @@ # @file air_pump.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Micahel Garthwaite # @date (original) 01-Nov-2024 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels @@ -44,10 +46,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_air_pump_data = MsgIds.MSG_ID_TD_AIR_PUMP_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_air_pump_data, - self._handler_air_pump_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_AIR_PUMP_DATA.value, + function = self._handler_air_pump_sync) self.td_air_pump_timestamp = 0.0 #: The timestamp of the last message @@ -74,21 +75,17 @@ @return: None """ sensor_list =[] - sensor_list.append((td_enum_repository.TDAirPumpAttributes.STATE.name, 'i')) - sensor_list.append((td_enum_repository.TDAirPumpAttributes.DUTY_CYCLE.name, 'f')) - sensor_list.append((td_enum_repository.TDAirPumpAttributes.RPM.name, 'i')) + sensor_list.append((td_enum_repository.TDAirPumpNames.H12_AIR_PUMP.name, td_enum_repository.TDAirPumpAttributes.STATE.name, DataTypes.U32)) + sensor_list.append((td_enum_repository.TDAirPumpNames.H12_AIR_PUMP.name, td_enum_repository.TDAirPumpAttributes.DUTY_CYCLE.name, DataTypes.F32)) + sensor_list.append((td_enum_repository.TDAirPumpNames.H12_AIR_PUMP.name, td_enum_repository.TDAirPumpAttributes.RPM.name, DataTypes.U32)) # TODO remove after FPGA air pump speed validation - sensor_list.append((td_enum_repository.TDAirPumpAttributes.FPGA_RPM.name, 'i')) + sensor_list.append((td_enum_repository.TDAirPumpNames.H12_AIR_PUMP.name, td_enum_repository.TDAirPumpAttributes.FPGA_RPM.name, DataTypes.U32)) # TODO remove after FPGA air pump speed validation - sensor_list.append((td_enum_repository.TDAirPumpAttributes.SCALAR_POWER.name, 'i')) + sensor_list.append((td_enum_repository.TDAirPumpNames.H12_AIR_PUMP.name, td_enum_repository.TDAirPumpAttributes.SCALAR_POWER.name, DataTypes.U32)) - i = 1 - for sensor in sensor_list: - start_pos = eval(f'MsgFieldPositions.START_POS_FIELD_{i}') - end_pos = eval(f'MsgFieldPositions.END_POS_FIELD_{i}') - self.td_air_pump[td_enum_repository.TDAirPumpNames.H12_AIR_PUMP.name][sensor[0]] = struct.unpack(sensor[1], bytearray(message['message'][start_pos:end_pos]))[0] - i += 1 - + self.process_into_dict(dict_to_update = self.td_air_pump, + decoder_list = sensor_list, + message = message) self.td_air_pump_timestamp = timestamp Index: leahi_dialin/td/modules/air_trap.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/air_trap.py (.../air_trap.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/air_trap.py (.../air_trap.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,17 +8,19 @@ # @file air_trap.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Sean Nash # @date (original) 21-Sep-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels @@ -47,10 +49,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_air_trap_data = MsgIds.MSG_ID_TD_AIR_TRAP_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_air_trap_data, - self._handler_air_trap_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_AIR_TRAP_DATA.value, + function = self._handler_air_trap_sync) self.td_air_trap_timestamp = 0.0 #: The timestamp of the last message @@ -92,39 +93,30 @@ @param message: published air trap data message @return: None """ - lower = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - upper = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - raw_lower = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) - raw_upper = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) - h13_vlv_st = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) - h20_vlv_st = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) - controlling = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])) - air_trap_state = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])) - #TODO remove after testing - lower_power = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])) - # TODO remove after testing - raise_power = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10])) + sensor_list_1 =[] + sensor_list_1.append((td_enum_repository.TDAirTrapLevelSensorNames.H17_LEVEL.name, td_enum_repository.TDAirTrapLevelSensorAttributes.LEVEL.name, DataTypes.U32)) + sensor_list_1.append((td_enum_repository.TDAirTrapLevelSensorNames.H16_LEVEL.name, td_enum_repository.TDAirTrapLevelSensorAttributes.LEVEL.name, DataTypes.U32)) + sensor_list_1.append((td_enum_repository.TDAirTrapLevelSensorNames.H17_LEVEL.name, td_enum_repository.TDAirTrapLevelSensorAttributes.RAW.name, DataTypes.U32)) + sensor_list_1.append((td_enum_repository.TDAirTrapLevelSensorNames.H16_LEVEL.name, td_enum_repository.TDAirTrapLevelSensorAttributes.RAW.name, DataTypes.U32)) + sensor_list_2 =[] + sensor_list_2.append((td_enum_repository.TDAirTrapValveNames.H13_VALV.name, DataTypes.U32)) + sensor_list_2.append((td_enum_repository.TDAirTrapValveNames.H20_VALV.name, DataTypes.U32)) + msg_list =[] + msg_list.append(('self.air_control', DataTypes.U32)) + msg_list.append(('self.airTrapState', DataTypes.U32)) + msg_list.append(('self.AirPumpLowerPowerLevel', DataTypes.U32)) + msg_list.append(('self.AirPumpRaisePowerLevel', DataTypes.U32)) - self.air_trap_level_sensors[td_enum_repository.TDAirTrapLevelSensorNames.H17_LEVEL.name][td_enum_repository.TDAirTrapLevelSensorAttributes.LEVEL.name] = lower[0] - self.air_trap_level_sensors[td_enum_repository.TDAirTrapLevelSensorNames.H16_LEVEL.name][td_enum_repository.TDAirTrapLevelSensorAttributes.LEVEL.name] = upper[0] - self.air_trap_level_sensors[td_enum_repository.TDAirTrapLevelSensorNames.H17_LEVEL.name][td_enum_repository.TDAirTrapLevelSensorAttributes.RAW.name] = raw_lower[0] - self.air_trap_level_sensors[td_enum_repository.TDAirTrapLevelSensorNames.H16_LEVEL.name][td_enum_repository.TDAirTrapLevelSensorAttributes.RAW.name] = raw_upper[0] - self.air_trap_valve_states[td_enum_repository.TDAirTrapValveNames.H13_VALV.name] = h13_vlv_st[0] - self.air_trap_valve_states[td_enum_repository.TDAirTrapValveNames.H20_VALV.name] = h20_vlv_st[0] - self.air_control = controlling[0] - self.airTrapState = air_trap_state[0] - self.AirPumpLowerPowerLevel = lower_power[0] - self.AirPumpRaisePowerLevel = raise_power[0] + self.process_into_dict(dict_to_update = self.air_trap_level_sensors, + decoder_list = sensor_list_1, + message = message) + self.process_into_dict(dict_to_update = self.air_trap_valve_states, + decoder_list = sensor_list_2, + message = message, + start_from_byte = len(sensor_list_1) * DataTypes.U32.size()) + self.process_into_vars(decoder_list = msg_list, + message = message, + start_from_byte = (len(sensor_list_1) + len(sensor_list_2)) * DataTypes.U32.size()) self.td_air_trap_timestamp = timestamp Index: leahi_dialin/td/modules/alarms.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/alarms.py (.../alarms.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/alarms.py (.../alarms.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,21 +8,23 @@ # @file alarms.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +import struct from enum import unique +# Project imports from leahi_dialin.common.alarm_defs import AlarmList from leahi_dialin.common.constants import NO_RESET +from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override -from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliMessage, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem from leahi_dialin.utils.base import publish @@ -128,7 +130,6 @@ self.last_alarm_data_2 = 0.0 #: The last Alarm's data part 2 # alarm information - self.alarm_data_type = dict() #: The Alarm's Data type in dict format self.alarm_volume = 0 #: The Alarm's Volume level self.alarm_audio_curr_hg = 0.0 #: The Alarm's Audio high current self.alarm_audio_curr_lg = 0.0 #: The Alarm's Audio low current @@ -144,23 +145,7 @@ self.ui_alarm_list = [] #: The UI Alarm List content self.ui_alarm_list_timestamp = 0.0 #: The timestamp of the last Alarm List - # Loop through the list of the event data type enum and update the dictionary - for data_type in td_enum_repository.DataTypes: - event_data_type = td_enum_repository.DataTypes(data_type).name - struct_unpack_type = None - # If U32 is in the data type enum (i.e. EVENT_DATA_TYPE_U32), then the key is the enum and the value is - # the corresponding format in the python struct - if 'U32' in event_data_type or 'BOOL' in event_data_type or 'NONE' in event_data_type: - struct_unpack_type = 'I' - elif 'S32' in event_data_type: - struct_unpack_type = 'i' - elif 'F32' in event_data_type: - struct_unpack_type = 'f' - - self.alarm_data_type[event_data_type] = struct_unpack_type - - def clear_dialin_alarms(self): """ Clears the alarms states in Dialin. @@ -182,12 +167,16 @@ @param message: published alarm status data message @return: none """ - self.alarms_priority_state = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.alarm_top = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.alarms_escalates_in = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.alarms_silence_expires_in = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.alarms_flags = struct.unpack('H', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.START_POS_FIELD_5+2]))[0] + msg_list = [] + msg_list.append(('self.alarms_priority_state', DataTypes.U32)) + msg_list.append(('self.alarm_top', DataTypes.U32)) + msg_list.append(('self.alarms_escalates_in', DataTypes.U32)) + msg_list.append(('self.alarms_silence_expires_in', DataTypes.U32)) + msg_list.append(('self.alarms_flags', DataTypes.U16)) + self.process_into_vars(decoder_list = msg_list, + message = message) + self.td_alarm_status_timestamp = timestamp @@ -202,35 +191,50 @@ @return: none """ self.logger.debug("Alarm activated!") - alarm_id = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) + alarm_id:int + data_typ_1:int + data_1:int + data_typ_2:int + data_2:int + priority:int + rank:int + clr_top_only:int - data_typ_1 = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - # Get the corresponding structure format - struct_data_type_1 = self.alarm_data_type[td_enum_repository.DataTypes(data_typ_1[0]).name] - # Get the data value by unpacking the data type - data_1 = struct.unpack(struct_data_type_1, bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) + msg_list = [] + msg_list.append(('alarm_id', DataTypes.U32)) + msg_list.append(('data_typ_1', DataTypes.U32)) + msg_list.append(('data_1', 'data_typ_1')) + msg_list.append(('data_typ_2', DataTypes.U32)) + msg_list.append(('data_2', 'data_typ_2')) + msg_list.append(('priority', DataTypes.U32)) + msg_list.append(('rank', DataTypes.U32)) + msg_list.append(('clr_top_only', DataTypes.U32)) - data_typ_2 = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) - # Get the corresponding structure format - struct_data_type_2 = self.alarm_data_type[td_enum_repository.DataTypes(data_typ_2[0]).name] - # Get the data value by unpacking the data type - data_2 = struct.unpack(struct_data_type_2, bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) + i = 1 + for msg_detail in msg_list: + start_pos = eval(f'MsgFieldPositions.START_POS_FIELD_{i}') + end_pos = eval(f'MsgFieldPositions.END_POS_FIELD_{i}') + if isinstance(msg_detail[1], DataTypes): + unpack_attrib = msg_detail[1].unpack_attrib() + else: + data_type_val:int + exec(f'data_type_val = {msg_detail[1]}') + unpack_attrib = DataTypes(data_type_val).unpack_attrib() + value = struct.unpack(unpack_attrib,bytearray(message['message'][start_pos:end_pos]))[0] + exec(f'{msg_detail[0]} = {value}') + i += 1 - priority = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) - rank = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])) - clr_top_only = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])) - self.logger.debug("Alarm ID: %d %d %d" % (alarm_id[0], data_1[0], data_2[0])) - self.alarm_states[alarm_id[0]] = True - self.alarm_conditions[alarm_id[0]] = True - self.alarm_priorities[alarm_id[0]] = priority[0] - self.alarm_ranks[alarm_id[0]] = rank[0] - self.alarm_clear_top_only_flags[alarm_id[0]] = clr_top_only[0] - self.alarm_data[alarm_id[0]] = [data_1[0], data_2[0]] - self.last_alarm_triggered = alarm_id[0] - self.last_alarm_data_1 = data_1[0] - self.last_alarm_data_2 = data_2[0] - self.td_alarm_triggered_timestamp = timestamp + self.alarm_states[alarm_id] = True + self.alarm_conditions[alarm_id] = True + self.alarm_priorities[alarm_id] = priority + self.alarm_ranks[alarm_id] = rank + self.alarm_clear_top_only_flags[alarm_id] = clr_top_only + self.alarm_data[alarm_id] = [data_1, data_2] + self.last_alarm_triggered = alarm_id + self.last_alarm_data_1 = data_1 + self.last_alarm_data_2 = data_2 + self.dd_alarm_triggered_timestamp = timestamp @publish(["msg_id_td_alarm_cleared", "alarm_states", "alarm_conditions", "TD_alarm_cleared_timestamp"]) @@ -241,9 +245,15 @@ @param message: published TD alarm clear message @return: none """ - alarm_id = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - self.alarm_states[alarm_id[0]] = False - self.alarm_conditions[alarm_id[0]] = False + alarm_id: int + msg_list = [] + msg_list.append(('alarm_id', DataTypes.U32)) + + self.process_into_vars(decoder_list = msg_list, + message = message) + + self.alarm_states[alarm_id] = False + self.alarm_conditions[alarm_id] = False self.td_alarm_cleared_timestamp = timestamp @@ -255,8 +265,14 @@ @param message: published TD alarm clear alarm condition message @return: none """ - alarm_id = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - self.alarm_conditions[alarm_id[0]] = False + alarm_id: int + msg_list = [] + msg_list.append(('alarm_id', DataTypes.U32)) + + self.process_into_vars(decoder_list = msg_list, + message = message) + + self.alarm_conditions[alarm_id] = False self.td_alarm_clr_condition_timestamp = timestamp @@ -271,6 +287,28 @@ @param message: published TD alarm information message @return: none """ + msg_list = [] + msg_list.append(('self.alarm_volume', DataTypes.U32)) + msg_list.append(('self.alarm_audio_curr_hg', DataTypes.F32)) + msg_list.append(('self.alarm_audio_curr_lg', DataTypes.F32)) + msg_list.append(('self.alarm_backup_audio_curr', DataTypes.U32)) + msg_list.append(('self.safety_shutdown_active', DataTypes.BOOL)) + msg_list.append(('self.ac_power_lost', DataTypes.BOOL)) + sensor_list = [] + sensor_list.append((self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_RESUME.value, DataTypes.BOOL)) + sensor_list.append((self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_RINSEBACK.value, DataTypes.BOOL)) + sensor_list.append((self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_END_TREATMENT.value, DataTypes.BOOL)) + sensor_list.append((self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_RESUME.value, DataTypes.BOOL)) + sensor_list.append((self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_RINSEBACK.value, DataTypes.BOOL)) + sensor_list.append((self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_END_TREATMENT.value, DataTypes.BOOL)) + + self.process_into_vars(decoder_list = msg_list, + message = message) + self.process_into_dict(dict_to_update = self.alarm_table_button_blockers, + decoder_list = sensor_list, + message = message, + start_from_byte = len(msg_list) * DataTypes.U32.size()) + """ vol = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) ach = struct.unpack('f', bytearray( @@ -308,6 +346,7 @@ self.alarm_state_button_blockers[self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_RESUME.value] = True if srs[0] else False self.alarm_state_button_blockers[self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_RINSEBACK.value] = True if srb[0] else False self.alarm_state_button_blockers[self.AlarmResponseButtons.TD_ALARM_RESPONSE_BUTTON_END_TREATMENT.value] = True if set[0] else False + """ self.td_alarm_information_timestamp = timestamp @@ -319,17 +358,16 @@ @param message: published TD alarm clear alarm condition message @return: none """ - self.ui_alarm_list_accepted = struct.unpack('i',bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.ui_alarm_list_reject_reason = struct.unpack('i',bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + self.ui_alarm_list_accepted = struct.unpack(DataTypes.U32.unpack_attrib(), bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.ui_alarm_list_reject_reason = struct.unpack(DataTypes.U32.unpack_attrib(), bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] i = 3 for _ in range(0,10): start_pos = eval(f'MsgFieldPositions.START_POS_FIELD_{i}') end_pos = eval(f'MsgFieldPositions.END_POS_FIELD_{i}') - value = struct.unpack('i',bytearray(message['message'][start_pos:end_pos]))[0] + value = struct.unpack(DataTypes.U32.unpack_attrib(), bytearray(message['message'][start_pos:end_pos]))[0] self.ui_alarm_list.append(value) i += 1 - self.ui_alarm_list_timestamp = timestamp Index: leahi_dialin/td/modules/blood_flow.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/blood_flow.py (.../blood_flow.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/blood_flow.py (.../blood_flow.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,17 +8,19 @@ # @file blood_flow.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET, PUMP_CONTROL_MODE_CLOSED_LOOP -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels @@ -41,10 +43,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_blood_pump_data = MsgIds.MSG_ID_TD_BLOOD_PUMP_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_blood_pump_data, - self._handler_blood_flow_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_BLOOD_PUMP_DATA.value, + function = self._handler_blood_flow_sync) self.td_blood_flow_timestamp = 0.0 #: The timestamp of the last message @@ -72,25 +73,20 @@ @param message: published blood flow data message @return: none """ - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.SET_BLOOD_FLOW_RATE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.MEASURED_BLOOD_FLOW_RATE.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.MEASURED_BLOOD_PUMP_ROTOR_SPEED.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.MEASURED_BLOOD_PUMP_SPEED.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.MEASURED_BLOOD_PUMP_TORQUE.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.SET_RPM.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.ROTOR_COUNT.name] = struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.PRES_BLOOD_FLOW_RATE.name] = struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.h4_motor[td_enum_repository.TDBloodFlowMotorAttributes.ROTOR_HALL_STATE.name] = struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] + sensor_list =[] + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.SET_BLOOD_FLOW_RATE.name, DataTypes.U32)) + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.MEASURED_BLOOD_FLOW_RATE.name, DataTypes.F32)) + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.MEASURED_BLOOD_PUMP_ROTOR_SPEED.name, DataTypes.F32)) + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.MEASURED_BLOOD_PUMP_SPEED.name, DataTypes.F32)) + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.MEASURED_BLOOD_PUMP_TORQUE.name, DataTypes.F32)) + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.SET_RPM.name, DataTypes.F32)) + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.ROTOR_COUNT.name, DataTypes.U32)) + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.PRES_BLOOD_FLOW_RATE.name, DataTypes.U32)) + sensor_list.append((td_enum_repository.TDBloodFlowMotorAttributes.ROTOR_HALL_STATE.name, DataTypes.U32)) + self.process_into_dict(dict_to_update = self.h4_motor, + decoder_list = sensor_list, + message = message) self.td_blood_flow_timestamp = timestamp Index: leahi_dialin/td/modules/bubble_detector.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/bubble_detector.py (.../bubble_detector.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/bubble_detector.py (.../bubble_detector.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,17 +8,19 @@ # @file air_bubbles.py # # @author (last) Zoltan Miskolci -# @date (last) 09-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peman Montazemi # @date (original) 18-May-2021 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels @@ -53,10 +55,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_bubbles_data = MsgIds.MSG_ID_TD_BUBBLES_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_bubbles_data, - self._handler_air_bubbles_data_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_BUBBLES_DATA.value, + function = self._handler_air_bubbles_data_sync) self.td_air_bubbles_timestamp = 0.0 #: The timestamp of the last message @@ -79,11 +80,13 @@ @param message: published air bubbles data message as: h18 bubble status, h18 bubble state @return: None """ - self.h18_bubble_detector[td_enum_repository.TDAirBubbleDetectorNames.H18_ADV.name][td_enum_repository.TDAirBubbleDetectorAttributes.STATUS.name] = ( - struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])))[0] - self.h18_bubble_detector[td_enum_repository.TDAirBubbleDetectorNames.H18_ADV.name][td_enum_repository.TDAirBubbleDetectorAttributes.STATE.name] = ( - struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])))[0] + sensor_list =[] + sensor_list.append((td_enum_repository.TDAirBubbleDetectorNames.H18_ADV.name, td_enum_repository.TDAirBubbleDetectorAttributes.STATUS.name, DataTypes.U32)) + sensor_list.append((td_enum_repository.TDAirBubbleDetectorNames.H18_ADV.name, td_enum_repository.TDAirBubbleDetectorAttributes.STATE.name, DataTypes.U32)) + self.process_into_dict(dict_to_update = self.h18_bubble_detector, + decoder_list = sensor_list, + message = message) self.td_air_bubbles_timestamp = timestamp Index: leahi_dialin/td/modules/buttons.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/buttons.py (.../buttons.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/buttons.py (.../buttons.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,16 +8,19 @@ # @file buttons.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 14-Oct-2024 # ############################################################################ -import struct +# Module imports from logging import Logger +import struct +# Project imports from leahi_dialin.common.constants import NO_RESET +from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_override from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels @@ -42,10 +45,9 @@ self.logger = logger if self.can_interface is not None: - self.msg_id_off_button_press_request = MsgIds.MSG_ID_OFF_BUTTON_PRESS_REQUEST.value - self.can_interface.register_receiving_publication_function(DenaliChannels.td_to_ui_ch_id, - self.msg_id_off_button_press_request, - self._handler_poweroff_timeout_occurred) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_to_ui_ch_id, + message_id = MsgIds.MSG_ID_OFF_BUTTON_PRESS_REQUEST.value, + function = self._handler_poweroff_timeout_occurred) self.td_power_off_timestamp = 0.0 #: The timestamp of the last message self.poweroff_timeout_expired = False #: The Power Off timeout value @@ -72,7 +74,7 @@ self.logger.debug("Poweroff message id detected, but was the wrong length.") return - mode = struct.unpack('h', bytearray( + mode = struct.unpack(DataTypes.U16.unpack_attrib(), bytearray( message["message"][MsgFieldPositions.START_POS_FIELD_1: MsgFieldPositions.START_POS_FIELD_1 + 2])) if len(mode) > 0: Index: leahi_dialin/td/modules/ejector.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/ejector.py (.../ejector.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/ejector.py (.../ejector.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -7,18 +7,20 @@ # # @file ejector.py # -# @author (last) Micahel Garthwaite -# @date (last) 10-Mar-2023 +# @author (last) Zoltan Miskolci +# @date (last) 05-May-2026 # @author (original) Micahel Garthwaite # @date (original) 01-Nov-2024 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels @@ -43,10 +45,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_ejector_data = MsgIds.MSG_ID_TD_EJECTOR_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_ejector_data, - self._handler_ejector_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_EJECTOR_DATA.value, + function = self._handler_ejector_sync) self.td_ejector_timestamp = 0 #: The timestamp of the last message @@ -55,8 +56,8 @@ td_enum_repository.TDEjectorNames.H5_MOTOR.name: { td_enum_repository.TDEjectorAttributes.STATE.name: td_enum_repository.TDEjectorStates.EJECTOR_STATE_INIT.value, td_enum_repository.TDEjectorAttributes.SET_SPEED.name: 0.0, - td_enum_repository.TDEjectorAttributes.OPT_SNSR_RETRACT: 0, # H25 Optical Sensor - td_enum_repository.TDEjectorAttributes.OPT_SNSR_ENGAGE: 0 # H24 Optical Sensor + td_enum_repository.TDEjectorAttributes.OPT_SNSR_RETRACT.name: 0, # H25 Optical Sensor + td_enum_repository.TDEjectorAttributes.OPT_SNSR_ENGAGE.name: 0 # H24 Optical Sensor } } @@ -69,15 +70,15 @@ @param message: published ejector data message as: ejector state @return: None """ - self.h5_motor[td_enum_repository.TDEjectorNames.H5_MOTOR.name][td_enum_repository.TDEjectorAttributes.STATE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.h5_motor[td_enum_repository.TDEjectorNames.H5_MOTOR.name][td_enum_repository.TDEjectorAttributes.SET_SPEED.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.h5_motor[td_enum_repository.TDEjectorNames.H5_MOTOR.name][td_enum_repository.TDEjectorAttributes.OPT_SNSR_RETRACT.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.h5_motor[td_enum_repository.TDEjectorNames.H5_MOTOR.name][td_enum_repository.TDEjectorAttributes.OPT_SNSR_ENGAGE.name] = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] + sensor_list =[] + sensor_list.append((td_enum_repository.TDEjectorNames.H5_MOTOR.name, td_enum_repository.TDEjectorAttributes.STATE.name, DataTypes.U32)) + sensor_list.append((td_enum_repository.TDEjectorNames.H5_MOTOR.name, td_enum_repository.TDEjectorAttributes.SET_SPEED.name, DataTypes.F32)) + sensor_list.append((td_enum_repository.TDEjectorNames.H5_MOTOR.name, td_enum_repository.TDEjectorAttributes.OPT_SNSR_RETRACT.name, DataTypes.U32)) + sensor_list.append((td_enum_repository.TDEjectorNames.H5_MOTOR.name, td_enum_repository.TDEjectorAttributes.OPT_SNSR_ENGAGE.name, DataTypes.U32)) + self.process_into_dict(dict_to_update = self.h5_motor, + decoder_list = sensor_list, + message = message) self.td_ejector_timestamp = timestamp Index: leahi_dialin/td/modules/events.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/events.py (.../events.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/events.py (.../events.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,7 +8,7 @@ # @file events.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Dara Navaei # @date (original) 12-Oct-2021 # @@ -18,8 +18,12 @@ from logging import Logger from datetime import datetime from time import time +# Module imports +from logging import Logger +# Project imports from leahi_dialin.common import td_enum_repository +from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.protocols.CAN import DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -41,14 +45,13 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_event = MsgIds.MSG_ID_TD_EVENT.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_event, self._handler_events_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_EVENT.value, + function = self._handler_events_sync) - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_op_mode_data = MsgIds.MSG_ID_TD_OP_MODE_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_op_mode_data, - self._handler_td_op_mode_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_OP_MODE_DATA.value, + function = self._handler_td_op_mode_sync) self.td_events_timestamp = 0.0 #: The timestamp of the last Event message self.td_event_op_mode = 0 #: The new Operation Mode value Index: leahi_dialin/td/modules/pressure_sensors.py =================================================================== diff -u -rf03c9a32180573f2430105ad69eb91d9f597a96b -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/td/modules/pressure_sensors.py (.../pressure_sensors.py) (revision f03c9a32180573f2430105ad69eb91d9f597a96b) +++ leahi_dialin/td/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -8,16 +8,18 @@ # @file pressure_occlusion.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # ############################################################################ -import struct +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import NO_RESET +from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.common import td_enum_repository @@ -42,10 +44,9 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_pressure_data = MsgIds.MSG_ID_TD_PRESSURE_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_pressure_data, - self._handler_pressure_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_PRESSURE_DATA.value, + function = self._handler_pressure_sync) self.td_pressure_timestamp = 0.0 #: The timestamp of the latest message @@ -65,14 +66,16 @@ }, td_enum_repository.TDPressureSensorNames.H23_PRES.name: { td_enum_repository.TDPressureSensorAttributes.PRES.name : 0.0 + }, + 'TMP_PRES': { + td_enum_repository.TDPressureSensorAttributes.PRES.name: 0.0, + td_enum_repository.TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name: 0.0, + td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MIN.name: 0, + td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MAX.name: 0 } } self.pressure_limits_state = 0 #: Pressure limits state value - self.tmp_pressure = 0.0 #: Transmembrane pressure value - self.tmp_long_filtered_pressure = 0.0 #: Transmembrane average (over 10 seconds) pressure value - self.tmp_min_limit = 0.0 #: Transmembrane pressure minimum limit value - self.tmp_max_limit = 0.0 #: Transmembrane pressure maximum limit value @publish([ @@ -93,33 +96,39 @@ @param message: published pressure & occlusion data message @return: none """ - sensor_list =[] - sensor_list.append(['self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES.name]', 'f']) - sensor_list.append(['self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES.name]', 'f']) - sensor_list.append(['self.pressure_limits_state', 'i']) - # Every singed integer should be little endian - # TODO: update to 'i' after LDT-473 is merged - sensor_list.append(['self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MIN.name]', ' 0 for each in [major, minor, micro, build, compatibility]]): - self.td_version = f"v{major[0]}.{minor[0]}.{micro[0]}-{build[0]}.{compatibility[0]}" - self.logger.debug(f"TD VERSION: {self.td_version}") + result = self.process_into_vars(decoder_list = msg_list, + message = message) - if all([len(each) > 0 for each in [fpga_id, fpga_major, fpga_minor, fpga_lab]]): - self.td_fpga_version = f"v{fpga_id[0]}.{fpga_major[0]}.{fpga_minor[0]}-{fpga_lab[0]}" - self.logger.debug(f"TD FPGA VERSION: {self.td_fpga_version}") + if all([len(each) > 0 for each in [result['major'], result['minor'], result['micro'], result['build'], result['compatibility']]]): + self.td_version = f"v{result['major']}.{result['minor']}.{result['micro']}-{result['build']}.{result['compatibility']}" + self.logger.debug(f'TD VERSION: {self.td_version}') + if all([len(each) > 0 for each in [result['fpga_id'], result['fpga_major'], result['fpga_minor'], result['fpga_lab']]]): + self.td_fpga_version = f"v{result['fpga_id']}.{result['fpga_major']}.{result['fpga_minor']}-{result['fpga_lab']}" + self.logger.debug(f'TD FPGA VERSION: {self.td_fpga_version}') + self.td_version_response_timestamp = timestamp @@ -251,28 +243,24 @@ @return: None if not successful, the version string if unpacked successfully """ - major = struct.unpack(' 0 for each in [major, minor, micro, build, compatibility]]): - self.ui_version = f"v{major[0]}.{minor[0]}.{micro[0]}-{build[0]}.{compatibility[0]}" - self.logger.debug(f"UI VERSION: {self.ui_version}") - + if all([len(each) > 0 for each in [result['major'], result['minor'], result['micro'], result['build'], result['compatibility']]]): + self.ui_version = f"v{result['major']}.{result['minor']}.{result['micro']}-{result['build']}.{result['compatibility']}" + self.logger.debug(f'UI VERSION: {self.ui_version}') else: self.ui_version = None self.logger.debug("Failed to retrieve UI Version.") + self.ui_version_info_response_timestamp = timestamp - def cmd_op_mode_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the measured op mode broadcast interval override command Index: leahi_dialin/utils/abstract_classes.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943 --- leahi_dialin/utils/abstract_classes.py (.../abstract_classes.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/utils/abstract_classes.py (.../abstract_classes.py) (revision 34b64ff2d8a64f4b7b60b80bb7cf4c36845e5943) @@ -106,8 +106,8 @@ start_pos = MSG_HEADER_SIZE + start_from_byte for decode_details in decoder_list: # Content of the decode list - key_1_enum = decode_details[0] - key_2_enum = decode_details[1] if len(decode_details) >= 3 else None + key_1 = decode_details[0] + key_2 = decode_details[1] if len(decode_details) >= 3 else None datatype: DataTypes = decode_details[-1] end_pos = start_pos + datatype.size() @@ -121,8 +121,8 @@ # Save the value into the Dictionary if len(decode_details) == 2: - dict_to_update[key_1_enum.name] = value + dict_to_update[key_1.name] = value elif len(decode_details) == 3: - dict_to_update[key_1_enum.name][key_2_enum.name] = value + dict_to_update[key_1.name][key_2.name] = value start_pos = end_pos return dict_to_update