Index: leahi_dialin/common/dd_defs.py =================================================================== diff -u -r71e513edcb6c315f0b890c23200289e17fd04efe -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/common/dd_defs.py (.../dd_defs.py) (revision 71e513edcb6c315f0b890c23200289e17fd04efe) +++ leahi_dialin/common/dd_defs.py (.../dd_defs.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -7,13 +7,18 @@ # # @file dd_defs.py # -# @author (last) Dara Navaei -# @date (last) 08-Feb-2024 +# @author (last) Zoltan Miskolci +# @date (last) 13-Jan-2026 # @author (original) Peter Lucia # @date (original) 22-Jun-2021 # ############################################################################ + from enum import unique +from aenum import extend_enum +from typing import TYPE_CHECKING + +from .global_vars import GlobalVariables, test_config_change from ..utils.base import DialinEnum @@ -264,8 +269,7 @@ D6_LEVEL = 0 # floater switch low, medium and high status D63_LEVEL = 1 # bicarb level low or high status D46_LEVEL = 2 # Spent dialysate air separation chamber level low or high status - D98_LEVEL = 3 # D98 Conductive Level Sensor - NUM_OF_LEVELS = 4 # Number of Level Sensors + NUM_OF_LEVELS = 3 # Number of Level Sensors @unique class DDPistonPumpsEnum(DialinEnum): @@ -289,8 +293,7 @@ D51_PRES = 2 # Spent Dialysate pressure (PDs) D18_PRES = 3 # Fresh Dialysate pressure (PDf) D41_PRES = 4 # Transmembrane pressure (Ptm) - D87_PRES = 5 # D87 Pressure sensor - NUM_OF_PRESSURE_SENSORS = 6 # Number of pressure sensors + NUM_OF_PRESSURE_SENSORS = 5 # Number of pressure sensors COND_SENSOR_INDEX_OFFSET = 6 # Conductivity Sensor Index Offset for the Temperature Readings PRES_SENSOR_INDEX_OFFSET = 15 # Pressure Sensors Offset for Temperature Readings @@ -306,24 +309,21 @@ D4_TEMP = 2 # Hydraulics primary heater temperature sensor D50_TEMP = 3 # Trimmer heater temperature sensor BRD_TEMP = 4 # Barometric temperature sensor - D16_TEMP = 5 # D16(D17) Conductivity sensor temperature value - D28_TEMP = 6 # D28(D27) Conductivity sensor temperature value - D30_TEMP = 7 # D30(D29) Conductivity sensor temperature value - D44_TEMP = 8 # D44(D43) Conductivity sensor temperature value - D75_TEMP = 9 # D75(D74) Conductivity sensor temperature value - D99_TEMP = 10 # D99(D98) Conductivity sensor temperature value - D4_AVG_TEMP = 11 # D4 Filtered value - D50_AVG_TEMP = 12 # D50 Filtered value - D28_AVG_TEMP = 13 # D28 Filtered value - D30_AVG_TEMP = 14 # D30 Filtered value - D99_AVG_TEMP = 15 # D99 Filtered value - D9_TEMP = 16 # D9 Pressure sensor temperature value - D66_TEMP = 17 # D66 Pressure sensor temperature value - D51_TEMP = 18 # D51 Pressure sensor temperature value - D18_TEMP = 19 # D18 Pressure sensor temperature value - D41_TEMP = 20 # D41 Pressure sensor temperature value - D87_TEMP = 21 # D87 Pressure sensor temperature value - NUM_OF_TEMP_SENSORS = 22 # Number of Temperature Sensors + D16_TEMP = 5 # D16 Conductivity sensor temperature value + D28_TEMP = 6 # D28 Conductivity sensor temperature value + D30_TEMP = 7 # D30 Conductivity sensor temperature value + D44_TEMP = 8 # D44 Conductivity sensor temperature value + D75_TEMP = 9 # D75 Conductivity sensor temperature value + D4_AVG_TEMP = 10 # D4 Filtered value + D50_AVG_TEMP = 11 # D50 Filtered value + D28_AVG_TEMP = 12 # D28 Filtered value + D30_AVG_TEMP = 13 # D30 Filtered value + D9_TEMP = 14 # D9 Pressure sensor temperature value + D66_TEMP = 15 # D66 Pressure sensor temperature value + D51_TEMP = 16 # D51 Pressure sensor temperature value + D18_TEMP = 17 # D18 Pressure sensor temperature value + D41_TEMP = 18 # D41 Pressure sensor temperature value + NUM_OF_TEMP_SENSORS = 19 # Number of Temperature Sensors @unique class DDValveStates(DialinEnum): @@ -357,12 +357,12 @@ D26_VALV = 22 # Balancing chamber Valve 7 (D26) D22_VALV = 23 # Balancing chamber Valve 8 (D22) D79_PMP_VALV = 24 # D79 pump mapped to spare valve 0 - D83_VALV = 25 # Valve De-scaler (D83) - D91_VALV = 26 # Valve De-scaler (D91) + SPARE1_VALV = 25 # Spare Valve 1 + SPARE2_VALV = 26 # Spare Valve 2 SPARE3_VALV = 27 # Spare Valve 3 SPARE4_VALV = 28 # Spare Valve 4 SPARE5_VALV = 29 # Spare Valve 5 - D100_VALV = 30 # Valve De-scaler (D100) + SPARE6_VALV = 30 # Spare Valve 6 SPARE7_VALV = 31 # Spare Valve 7 M4_VALV = 32 # First IO valve (M4) M12_VALV = 33 # Last IO valve IO valve (M12) Index: leahi_dialin/dd/modules/conductivity_sensors.py =================================================================== diff -u -re9a1b8796610fd165c45a0a2c9c2034e00a77546 -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision e9a1b8796610fd165c45a0a2c9c2034e00a77546) +++ leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -17,9 +17,10 @@ import struct from logging import Logger -from leahi_dialin.common.constants import RESET, NO_RESET +from .constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.dd_defs import DDConductivitySensorsEnum +from leahi_dialin.common.dd_defs import dd_enum_repository +from leahi_dialin.common.global_vars import GlobalVariables from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish @@ -50,12 +51,14 @@ self._handler_conductivity_sensors_sync) self.dd_conductivity = { - DDConductivitySensorsEnum.D17_COND.name: 0.0, - DDConductivitySensorsEnum.D27_COND.name: 0.0, - DDConductivitySensorsEnum.D29_COND.name: 0.0, - DDConductivitySensorsEnum.D43_COND.name: 0.0, - DDConductivitySensorsEnum.D74_COND.name: 0.0 + dd_enum_repository.DDConductivitySensorNames.D17_COND.name: 0.0, + dd_enum_repository.DDConductivitySensorNames.D27_COND.name: 0.0, + dd_enum_repository.DDConductivitySensorNames.D29_COND.name: 0.0, + dd_enum_repository.DDConductivitySensorNames.D43_COND.name: 0.0, + dd_enum_repository.DDConductivitySensorNames.D74_COND.name: 0.0 } + if GlobalVariables().HW_BETA_1_9: + self.dd_conductivity[dd_enum_repository.DDConductivitySensorNames.D98_COND.name] = 0.0 self.dd_conductivity_timestamp = 0.0 @@ -69,21 +72,27 @@ @return: None """ - self.dd_conductivity[DDConductivitySensorsEnum.D17_COND.name] = struct.unpack('f', bytearray( + self.dd_conductivity[dd_enum_repository.DDConductivitySensorNames.D17_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.dd_conductivity[DDConductivitySensorsEnum.D27_COND.name] = struct.unpack('f', bytearray( + self.dd_conductivity[dd_enum_repository.DDConductivitySensorNames.D27_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.dd_conductivity[DDConductivitySensorsEnum.D29_COND.name] = struct.unpack('f', bytearray( + self.dd_conductivity[dd_enum_repository.DDConductivitySensorNames.D29_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.dd_conductivity[DDConductivitySensorsEnum.D43_COND.name] = struct.unpack('f', bytearray( + self.dd_conductivity[dd_enum_repository.DDConductivitySensorNames.D43_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.dd_conductivity[DDConductivitySensorsEnum.D74_COND.name] = struct.unpack('f', bytearray( + self.dd_conductivity[dd_enum_repository.DDConductivitySensorNames.D74_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + if GlobalVariables().HW_BETA_1_9: + if dd_enum_repository.DDConductivitySensorNames.D98_COND.name not in self.dd_conductivity: + self.dd_conductivity[dd_enum_repository.DDConductivitySensorNames.D98_COND.name] = 0.0 + self.dd_conductivity[dd_enum_repository.DDConductivitySensorNames.D98_COND.name] = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] + self.dd_conductivity_timestamp = timestamp def cmd_conductivity_sensor_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: @@ -134,7 +143,7 @@ str_res = "reset back to normal" else: str_res = str(conductivity) + " microsiemens/cm" - self.logger.debug("override conductivity sensor value for sensor " + DDConductivitySensorsEnum(sensor_index).name + self.logger.debug("override conductivity sensor value for sensor " + dd_enum_repository.DDConductivitySensorNames(sensor_index).name + ": " + str_res) # Send message @@ -175,7 +184,7 @@ str_res = "reset back to normal" else: str_res = str(counter) - self.logger.debug("override conductivity sensor value for sensor " + DDConductivitySensorsEnum[str(sensor_index)].name + self.logger.debug("override conductivity sensor value for sensor " + dd_enum_repository.DDConductivitySensorNames[str(sensor_index)].name + ": " + str_res) # Send message @@ -213,7 +222,7 @@ str_res = "reset back to normal" else: str_res = str(counter) - self.logger.debug("override conductivity sensor value for sensor " + DDConductivitySensorsEnum[str(sensor_index)].name + self.logger.debug("override conductivity sensor value for sensor " + dd_enum_repository.DDConductivitySensorNames[str(sensor_index)].name + ": " + str_res) # Send message Index: leahi_dialin/dd/modules/levels.py =================================================================== diff -u -r809b92241a33a60e8b04968b2484deed871f6f69 -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 809b92241a33a60e8b04968b2484deed871f6f69) +++ leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -19,7 +19,7 @@ from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.dd_defs import DDLevelSensorEnum +from leahi_dialin.common.dd_defs import dd_enum_repository from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish @@ -49,10 +49,10 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_level_data, self._handler_levels_sync) self.dd_level_sensors = { - DDLevelSensorEnum.D6_LEVEL.name: 0, - DDLevelSensorEnum.D63_LEVEL.name: 0, - DDLevelSensorEnum.D98_LEVEL.name: 0, - DDLevelSensorEnum.D46_LEVEL.name: 0 + dd_enum_repository.DDLevelSensorNames.D6_LEVEL.name: 0, + dd_enum_repository.DDLevelSensorNames.D63_LEVEL.name: 0, + dd_enum_repository.DDLevelSensorEnum.D98_LEVEL.name: 0, + dd_enum_repository.DDLevelSensorNames.D46_LEVEL.name: 0 } self.dd_bicarb_level = 0 self.dd_levels_timestamp = 0 @@ -66,15 +66,15 @@ @param message: published levels data message @returns none """ - self.dd_level_sensors[DDLevelSensorEnum.D6_LEVEL.name] = struct.unpack('i', bytearray( + self.dd_level_sensors[dd_enum_repository.DDLevelSensorNames.D6_LEVEL.name] = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.dd_level_sensors[DDLevelSensorEnum.D63_LEVEL.name] = struct.unpack('i', bytearray( + self.dd_level_sensors[dd_enum_repository.DDLevelSensorNames.D63_LEVEL.name] = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.dd_level_sensors[DDLevelSensorEnum.D98_LEVEL.name] = struct.unpack('i', bytearray( + self.dd_level_sensors[dd_enum_repository.DDLevelSensorNames.D98_LEVEL.name] = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] self.dd_bicarb_level = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.dd_level_sensors[DDLevelSensorEnum.D46_LEVEL.name] = struct.unpack('i', bytearray( + self.dd_level_sensors[dd_enum_repository.DDLevelSensorEnum.D46_LEVEL.name] = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] self.dd_levels_timestamp = timestamp Index: leahi_dialin/dd/modules/pressure_sensors.py =================================================================== diff -u -r71e513edcb6c315f0b890c23200289e17fd04efe -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 71e513edcb6c315f0b890c23200289e17fd04efe) +++ leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -19,7 +19,8 @@ from leahi_dialin.common.constants import NO_RESET, RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.dd_defs import DDPressureNames +from leahi_dialin.common.dd_defs import dd_enum_repository +from leahi_dialin.common.global_vars import GlobalVariables from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish @@ -49,13 +50,14 @@ self._handler_pressures_sync) self.dd_pressures = { - DDPressureNames.D9_PRES.name: 0.0, - DDPressureNames.D66_PRES.name: 0.0, - DDPressureNames.D51_PRES.name: 0.0, - DDPressureNames.D18_PRES.name: 0.0, - DDPressureNames.D41_PRES.name: 0.0, - DDPressureNames.D87_PRES.name: 0.0 + dd_enum_repository.DDPressureSensorNames.D9_PRES.name: 0.0, + dd_enum_repository.DDPressureSensorNames.D66_PRES.name: 0.0, + dd_enum_repository.DDPressureSensorNames.D51_PRES.name: 0.0, + dd_enum_repository.DDPressureSensorNames.D18_PRES.name: 0.0, + dd_enum_repository.DDPressureSensorNames.D41_PRES.name: 0.0 } + if GlobalVariables().HW_BETA_1_9: + self.dd_pressures[dd_enum_repository.DDPressureSensorNames.D87_PRES.name] = 0.0 self.dd_pressures_timestamp = 0 @@ -68,17 +70,22 @@ @param message: published DD pressure data message @return: none """ - self.dd_pressures[DDPressureNames.D9_PRES.name] = struct.unpack('f', bytearray( + self.dd_pressures[dd_enum_repository.DDPressureSensorNames.D9_PRES.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.dd_pressures[DDPressureNames.D66_PRES.name] = struct.unpack('f', bytearray( + self.dd_pressures[dd_enum_repository.DDPressureSensorNames.D66_PRES.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.dd_pressures[DDPressureNames.D51_PRES.name] = struct.unpack('f', bytearray( + self.dd_pressures[dd_enum_repository.DDPressureSensorNames.D51_PRES.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.dd_pressures[DDPressureNames.D18_PRES.name] = struct.unpack('f', bytearray( + self.dd_pressures[dd_enum_repository.DDPressureSensorNames.D18_PRES.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.dd_pressures[DDPressureNames.D41_PRES.name] = struct.unpack('f', bytearray( + self.dd_pressures[dd_enum_repository.DDPressureSensorNames.D41_PRES.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.dd_pressures[DDPressureNames.D87_PRES.name] = struct.unpack('f', bytearray( + + if GlobalVariables().HW_BETA_1_9: + if dd_enum_repository.DDPressureSensorNames.D87_PRES.name not in self.dd_pressures: + self.dd_pressures[dd_enum_repository.DDPressureSensorNames.D87_PRES.name] = 0.0 + + self.dd_pressures[dd_enum_repository.DDPressureSensorNames.D87_PRES.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] self.dd_pressures_timestamp = timestamp Index: leahi_dialin/dd/modules/temperature_sensors.py =================================================================== diff -u -r5681154cdaaf629c997dc05472657bf40c94d6e1 -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 5681154cdaaf629c997dc05472657bf40c94d6e1) +++ leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -18,7 +18,8 @@ from leahi_dialin.common.constants import NO_RESET, RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.dd_defs import COND_SENSOR_INDEX_OFFSET, PRES_SENSOR_INDEX_OFFSET, DDTemperaturesNames +from leahi_dialin.common.dd_defs import dd_enum_repository +from leahi_dialin.common.global_vars import GlobalVariables from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish @@ -38,29 +39,29 @@ # Dictionary of the temperature sensors self.dd_temperatures_timestamp = 0.0 self.dd_temperatures = { - DDTemperaturesNames.D1_TEMP.name: 0.0, - DDTemperaturesNames.D78_TEMP.name: 0.0, - DDTemperaturesNames.D4_TEMP.name: 0.0, - DDTemperaturesNames.D50_TEMP.name: 0.0, - DDTemperaturesNames.D99_TEMP.name: 0.0, - DDTemperaturesNames.BRD_TEMP.name: 0.0, - DDTemperaturesNames.D16_TEMP.name: 0.0, - DDTemperaturesNames.D28_TEMP.name: 0.0, - DDTemperaturesNames.D30_TEMP.name: 0.0, - DDTemperaturesNames.D44_TEMP.name: 0.0, - DDTemperaturesNames.D75_TEMP.name: 0.0, - DDTemperaturesNames.D4_AVG_TEMP.name: 0.0, - DDTemperaturesNames.D50_AVG_TEMP.name: 0.0, - DDTemperaturesNames.D99_AVG_TEMP.name: 0.0, - DDTemperaturesNames.D28_AVG_TEMP.name: 0.0, - DDTemperaturesNames.D30_AVG_TEMP.name: 0.0, - DDTemperaturesNames.D66_TEMP.name: 0.0, - DDTemperaturesNames.D51_TEMP.name: 0.0, - DDTemperaturesNames.D18_TEMP.name: 0.0, - DDTemperaturesNames.D41_TEMP.name: 0.0, - DDTemperaturesNames.D87_TEMP.name: 0.0 - + dd_enum_repository.DDTemperatureSensorNames.D1_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D78_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D4_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D50_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.BRD_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D16_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D28_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D30_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D44_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D75_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D4_AVG_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D50_AVG_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D28_AVG_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D30_AVG_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D66_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D51_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D18_TEMP.name: 0.0, + dd_enum_repository.DDTemperatureSensorNames.D41_TEMP.name: 0.0 } + if GlobalVariables().HW_BETA_1_9: + self.dd_temperatures[dd_enum_repository.DDTemperatureSensorNames.D99_TEMP.name] = 0.0 + self.dd_temperatures[dd_enum_repository.DDTemperatureSensorNames.D99_AVG_TEMP.name] = 0.0 + self.dd_temperatures[dd_enum_repository.DDTemperatureSensorNames.D87_TEMP.name] = 0.0 if self.can_interface is not None: channel_id = DenaliChannels.dd_sync_broadcast_ch_id @@ -76,73 +77,46 @@ @param message: published DD temperature sensors data message @returns none """ - self.dd_temperatures[DDTemperaturesNames.D1_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + sensor_list =[] + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D1_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D78_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D4_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D50_TEMP, 'f')) + if GlobalVariables().HW_BETA_1_9: + if dd_enum_repository.DDTemperatureSensorNames.D99_TEMP.name not in self.dd_temperatures: + self.dd_temperatures[dd_enum_repository.DDTemperatureSensorNames.D99_TEMP.name] = 0.0 + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D99_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.BRD_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D16_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D28_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D30_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D44_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D75_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D4_AVG_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D50_AVG_TEMP, 'f')) + if GlobalVariables().HW_BETA_1_9: + if dd_enum_repository.DDTemperatureSensorNames.D99_AVG_TEMP.name not in self.dd_temperatures: + self.dd_temperatures[dd_enum_repository.DDTemperatureSensorNames.D99_AVG_TEMP.name] = 0.0 + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D99_AVG_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D28_AVG_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D30_AVG_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D9_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D66_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D51_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D18_TEMP, 'f')) + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D41_TEMP, 'f')) + if GlobalVariables().HW_BETA_1_9: + if dd_enum_repository.DDTemperatureSensorNames.D87_TEMP.name not in self.dd_temperatures: + self.dd_temperatures[dd_enum_repository.DDTemperatureSensorNames.D87_TEMP.name] = 0.0 + sensor_list.append((dd_enum_repository.DDTemperatureSensorNames.D87_TEMP, 'f')) - self.dd_temperatures[DDTemperaturesNames.D78_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + 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.dd_temperatures[sensor[0].name] = struct.unpack(sensor[1],bytearray(message['message'][start_pos:end_pos]))[0] + i += 1 - self.dd_temperatures[DDTemperaturesNames.D4_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - - self.dd_temperatures[DDTemperaturesNames.D50_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - - self.dd_temperatures[DDTemperaturesNames.D99_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - - self.dd_temperatures[DDTemperaturesNames.BRD_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - - self.dd_temperatures[DDTemperaturesNames.D16_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - - self.dd_temperatures[DDTemperaturesNames.D28_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - - self.dd_temperatures[DDTemperaturesNames.D30_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] - - self.dd_temperatures[DDTemperaturesNames.D44_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] - - self.dd_temperatures[DDTemperaturesNames.D75_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] - - self.dd_temperatures[DDTemperaturesNames.D4_AVG_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] - - self.dd_temperatures[DDTemperaturesNames.D50_AVG_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] - - self.dd_temperatures[DDTemperaturesNames.D99_AVG_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] - - self.dd_temperatures[DDTemperaturesNames.D28_AVG_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15]))[0] - - self.dd_temperatures[DDTemperaturesNames.D30_AVG_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16]))[0] - - self.dd_temperatures[DDTemperaturesNames.D9_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17]))[0] - - self.dd_temperatures[DDTemperaturesNames.D66_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] - - self.dd_temperatures[DDTemperaturesNames.D51_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19]))[0] - - self.dd_temperatures[DDTemperaturesNames.D18_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20]))[0] - - self.dd_temperatures[DDTemperaturesNames.D41_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_21:MsgFieldPositions.END_POS_FIELD_21]))[0] - - self.dd_temperatures[DDTemperaturesNames.D87_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_22:MsgFieldPositions.END_POS_FIELD_22]))[0] - - self.dd_temperatures_timestamp = timestamp def cmd_temperatures_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: @@ -183,16 +157,16 @@ value = float_to_bytearray(sensor_value) # DD Conductivity Sensors' Temperature Reading Override - if DDTemperaturesNames.D16_TEMP.value <= sensor_index <= DDTemperaturesNames.D99_TEMP.value: - index = integer_to_bytearray((sensor_index - COND_SENSOR_INDEX_OFFSET)) + if dd_enum_repository.DDTemperatureSensorNames.FIRST_CONDUCTIVITY_SENSOR.value <= sensor_index <= dd_enum_repository.DDTemperatureSensorNames.LAST_CONDUCTIVITY_SENSOR.value: + index = integer_to_bytearray((sensor_index - dd_enum_repository.DDTemperatureSensorNames.FIRST_CONDUCTIVITY_SENSOR.value)) payload = rst + value + index message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, message_id=MsgIds.MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, payload=payload) # DD Pressure Sensors' Temperature Reading Override - elif DDTemperaturesNames.D9_TEMP.value <= sensor_index < DDTemperaturesNames.NUM_OF_TEMP_SENSORS.value: - index = integer_to_bytearray((sensor_index - PRES_SENSOR_INDEX_OFFSET)) + elif dd_enum_repository.DDTemperatureSensorNames.FIRST_PRESSURE_SENSOR.value <= sensor_index <= dd_enum_repository.DDTemperatureSensorNames.LAST_PRESSURE_SENSOR.value: + index = integer_to_bytearray((sensor_index - dd_enum_repository.DDTemperatureSensorNames.FIRST_PRESSURE_SENSOR.value)) payload = rst + value + index message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, @@ -206,7 +180,7 @@ message_id=MsgIds.MSG_ID_DD_TEMPERATURE_SENSOR_MEASURED_TEMPERATURE_OVERRIDE_REQUEST.value, payload=payload) - self.logger.debug("Setting sensor {} to {} C".format(DDTemperaturesNames(sensor_index).name, sensor_value)) + self.logger.debug("Setting sensor {} to {} C".format(dd_enum_repository.DDTemperatureSensorNames(sensor_index).name, sensor_value)) # Send message received_message = self.can_interface.send(message) @@ -326,15 +300,15 @@ Constraints: Must be logged into DD. - @param sensor: unsigned int - sensor ID, use the index of DDTemperaturesNames + @param sensor: unsigned int - sensor ID, use the index of dd_enum_repository.DDTemperatureSensorNames @param temperature: float - temperature to override the sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise """ rst = integer_to_bytearray(reset) tmp = float_to_bytearray(temperature) - idx = integer_to_bytearray(sensor - PRES_SENSOR_INDEX_OFFSET) + idx = integer_to_bytearray(sensor - dd_enum_repository.DDTemperatureSensorNames.FIRST_PRESSURE_SENSOR.value) payload = rst + tmp + idx message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, Index: leahi_dialin/dd/modules/valves.py =================================================================== diff -u -ra5b82c620e6a54f2b8559c54ffaa1a84e831d88e -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/dd/modules/valves.py (.../valves.py) (revision a5b82c620e6a54f2b8559c54ffaa1a84e831d88e) +++ leahi_dialin/dd/modules/valves.py (.../valves.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -20,7 +20,7 @@ from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.msg_defs import MsgIds -from leahi_dialin.common.dd_defs import DDValveNames +from leahi_dialin.common.dd_defs import dd_enum_repository from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish @@ -64,46 +64,46 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_valves_states_data, self._handler_valves_sync) self.valve_states_all = 0x00000000 - self.d14_valv = {"id": DDValveNames.D14_VALV.value, "state": DEENERGIZED} - self.d52_valv = {"id": DDValveNames.D52_VALV.value, "state": DEENERGIZED} - self.d8_valv = {"id": DDValveNames.D8_VALV.value, "state": DEENERGIZED} - self.d54_valv = {"id": DDValveNames.D54_VALV.value, "state": DEENERGIZED} - self.d53_valv = {"id": DDValveNames.D53_VALV.value, "state": DEENERGIZED} - self.d34_valv = {"id": DDValveNames.D34_VALV.value, "state": DEENERGIZED} - self.d64_valv = {"id": DDValveNames.D64_VALV.value, "state": DEENERGIZED} - self.d31_valv = {"id": DDValveNames.D31_VALV.value, "state": DEENERGIZED} - self.d65_valv = {"id": DDValveNames.D65_VALV.value, "state": DEENERGIZED} - self.d35_valv = {"id": DDValveNames.D35_VALV.value, "state": DEENERGIZED} - self.d40_valv = {"id": DDValveNames.D40_VALV.value, "state": DEENERGIZED} - self.d47_valv = {"id": DDValveNames.D47_VALV.value, "state": DEENERGIZED} - self.d3_valv = {"id": DDValveNames.D3_VALV.value, "state": DEENERGIZED} - self.d80_valv = {"id": DDValveNames.D80_VALV.value, "state": DEENERGIZED} - self.d81_valv = {"id": DDValveNames.D81_VALV.value, "state": DEENERGIZED} - self.rsvrd1 = {"id": DDValveNames.RSRVD_SPACE1.value, "state": DEENERGIZED} + self.d14_valv = {"id": dd_enum_repository.DDValveNames.D14_VALV.value, "state": DEENERGIZED} + self.d52_valv = {"id": dd_enum_repository.DDValveNames.D52_VALV.value, "state": DEENERGIZED} + self.d8_valv = {"id": dd_enum_repository.DDValveNames.D8_VALV.value, "state": DEENERGIZED} + self.d54_valv = {"id": dd_enum_repository.DDValveNames.D54_VALV.value, "state": DEENERGIZED} + self.d53_valv = {"id": dd_enum_repository.DDValveNames.D53_VALV.value, "state": DEENERGIZED} + self.d34_valv = {"id": dd_enum_repository.DDValveNames.D34_VALV.value, "state": DEENERGIZED} + self.d64_valv = {"id": dd_enum_repository.DDValveNames.D64_VALV.value, "state": DEENERGIZED} + self.d31_valv = {"id": dd_enum_repository.DDValveNames.D31_VALV.value, "state": DEENERGIZED} + self.d65_valv = {"id": dd_enum_repository.DDValveNames.D65_VALV.value, "state": DEENERGIZED} + self.d35_valv = {"id": dd_enum_repository.DDValveNames.D35_VALV.value, "state": DEENERGIZED} + self.d40_valv = {"id": dd_enum_repository.DDValveNames.D40_VALV.value, "state": DEENERGIZED} + self.d47_valv = {"id": dd_enum_repository.DDValveNames.D47_VALV.value, "state": DEENERGIZED} + self.d3_valv = {"id": dd_enum_repository.DDValveNames.D3_VALV.value, "state": DEENERGIZED} + self.d80_valv = {"id": dd_enum_repository.DDValveNames.D80_VALV.value, "state": DEENERGIZED} + self.d81_valv = {"id": dd_enum_repository.DDValveNames.D81_VALV.value, "state": DEENERGIZED} + self.rsvrd1 = {"id": dd_enum_repository.DDValveNames.RSRVD_SPACE1.value, "state": DEENERGIZED} - self.d23_valv = {"id": DDValveNames.D23_VALV.value, "state": DEENERGIZED} - self.d19_valv = {"id": DDValveNames.D19_VALV.value, "state": DEENERGIZED} - self.d25_valv = {"id": DDValveNames.D25_VALV.value, "state": DEENERGIZED} - self.d21_valv = {"id": DDValveNames.D26_VALV.value, "state": DEENERGIZED} - self.d24_valv = {"id": DDValveNames.D24_VALV.value, "state": DEENERGIZED} - self.d20_valv = {"id": DDValveNames.D20_VALV.value, "state": DEENERGIZED} - self.d26_valv = {"id": DDValveNames.D21_VALV.value, "state": DEENERGIZED} - self.d22_valv = {"id": DDValveNames.D22_VALV.value, "state": DEENERGIZED} + self.d23_valv = {"id": dd_enum_repository.DDValveNames.D23_VALV.value, "state": DEENERGIZED} + self.d19_valv = {"id": dd_enum_repository.DDValveNames.D19_VALV.value, "state": DEENERGIZED} + self.d25_valv = {"id": dd_enum_repository.DDValveNames.D25_VALV.value, "state": DEENERGIZED} + self.d21_valv = {"id": dd_enum_repository.DDValveNames.D26_VALV.value, "state": DEENERGIZED} + self.d24_valv = {"id": dd_enum_repository.DDValveNames.D24_VALV.value, "state": DEENERGIZED} + self.d20_valv = {"id": dd_enum_repository.DDValveNames.D20_VALV.value, "state": DEENERGIZED} + self.d26_valv = {"id": dd_enum_repository.DDValveNames.D21_VALV.value, "state": DEENERGIZED} + self.d22_valv = {"id": dd_enum_repository.DDValveNames.D22_VALV.value, "state": DEENERGIZED} - self.d79_pmp_valv = {"id": DDValveNames.D79_PMP_VALV.value, "state": DEENERGIZED} - self.d83_valv = {"id": DDValveNames.D83_VALV.value, "state": DEENERGIZED} - self.d91_valv = {"id": DDValveNames.D91_VALV.value, "state": DEENERGIZED} - self.spare3_valv = {"id": DDValveNames.SPARE3_VALV.value, "state": DEENERGIZED} - self.spare4_valv = {"id": DDValveNames.SPARE4_VALV.value, "state": DEENERGIZED} - self.spare5_valv = {"id": DDValveNames.SPARE5_VALV.value, "state": DEENERGIZED} - self.d100_valv = {"id": DDValveNames.D100_VALV.value, "state": DEENERGIZED} - self.spare7_valv = {"id": DDValveNames.SPARE7_VALV.value, "state": DEENERGIZED} + self.d79_pmp_valv = {"id": dd_enum_repository.DDValveNames.D79_PMP_VALV.value, "state": DEENERGIZED} + self.d83_valv = {"id": dd_enum_repository.DDValveNames.D83_VALV.value, "state": DEENERGIZED} + self.d91_valv = {"id": dd_enum_repository.DDValveNames.D91_VALV.value, "state": DEENERGIZED} + self.spare3_valv = {"id": dd_enum_repository.DDValveNames.SPARE3_VALV.value, "state": DEENERGIZED} + self.spare4_valv = {"id": dd_enum_repository.DDValveNames.SPARE4_VALV.value, "state": DEENERGIZED} + self.spare5_valv = {"id": dd_enum_repository.DDValveNames.SPARE5_VALV.value, "state": DEENERGIZED} + self.d100_valv = {"id": dd_enum_repository.DDValveNames.D100_VALV.value, "state": DEENERGIZED} + self.spare7_valv = {"id": dd_enum_repository.DDValveNames.SPARE7_VALV.value, "state": DEENERGIZED} # NOTE: The len function counts the enums with the same number only once. This is not the case in the DD valves # class because each valve must have a unique ID. - self.valve_states_enum = [0 for _ in range(len(DDValveNames))] + self.valve_states_enum = [0 for _ in range(len(dd_enum_repository.DDValveNames))] - for valve in DDValveNames.__members__: + for valve in dd_enum_repository.DDValveNames.__members__: self.valves_sensed_states[valve] = '' def get_valve_states(self): @@ -207,11 +207,11 @@ "d22_valv", "d79_pmp_valv", "D83_valv", - "D91_valv", + "d91_valv", "spare3_valv", "spare4_valv", "spare5_valv", - "D100_valv", + "d100_valv", "spare7_valv", "valve_states_enum", "valves_sensed_states", @@ -258,20 +258,20 @@ self.d22_valv["state"] = self._binary_to_valve_state(bcv[0] & 128) spv = struct.unpack('B', bytearray(message['message'][self.START_POS_SPARE_VALVES_STATES:self.END_POS_SPARE_VALVES_STATES])) - self.d79_pmp_valv["state"] = self._binary_to_valve_state(spv[0] & 1) - self.d83_valv["state"] = self._binary_to_valve_state(spv[0] & 2) - self.d91_valv["state"] = self._binary_to_valve_state(spv[0] & 4) - self.spare3_valv["state"] = self._binary_to_valve_state(spv[0] & 8) - self.spare4_valv["state"] = self._binary_to_valve_state(spv[0] & 16) - self.spare5_valv["state"] = self._binary_to_valve_state(spv[0] & 32) - self.d100_valv["state"] = self._binary_to_valve_state(spv[0] & 64) - self.spare7_valv["state"] = self._binary_to_valve_state(spv[0] & 128) + self.d79_pmp_valv["state"] = self._binary_to_valve_state(bcv[0] & 1) + self.d83_valv["state"] = self._binary_to_valve_state(bcv[0] & 2) + self.d91_valv["state"] = self._binary_to_valve_state(bcv[0] & 4) + self.spare3_valv["state"] = self._binary_to_valve_state(bcv[0] & 8) + self.spare4_valv["state"] = self._binary_to_valve_state(bcv[0] & 16) + self.spare5_valv["state"] = self._binary_to_valve_state(bcv[0] & 32) + self.d100_valv["state"] = self._binary_to_valve_state(bcv[0] & 64) + self.spare7_valv["state"] = self._binary_to_valve_state(bcv[0] & 128) start = self.END_POS_SPARE_VALVES_STATES end = start + 1 for valve_id in self.valves_sensed_states: valve_state_number = struct.unpack('B', bytearray(message['message'][start:end]))[0] - self.valves_sensed_states[valve_id] = DDValveNames(valve_state_number).name + self.valves_sensed_states[valve_id] = dd_enum_repository.DDValveNames(valve_state_number).name start = end end += 1 Index: leahi_dialin/fp/modules/fp_test_configs.py =================================================================== diff -u -re27f157082335696e336c9d9952392bc62e3c8c8 -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/fp/modules/fp_test_configs.py (.../fp_test_configs.py) (revision e27f157082335696e336c9d9952392bc62e3c8c8) +++ leahi_dialin/fp/modules/fp_test_configs.py (.../fp_test_configs.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -16,6 +16,8 @@ from logging import Logger +from leahi_dialin.common.constants import NO_RESET +from leahi_dialin.common.global_vars import GlobalVariables from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.test_config_defs import DDFPTestConfigOptions from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels @@ -60,6 +62,27 @@ return self.fp_test_configs[DDFPTestConfigOptions(config).name] + @publish(['msg_id_fp_send_test_config', 'fp_test_configs', 'fp_test_configs_response_timestamp']) + def _handler_fp_test_config_sync(self, message, timestamp=0.0): + """ + Handles published test configuration status messages. + + @param message: published FP test configurations message + @return: None + """ + payload = message['message'] + index = MsgFieldPositions.START_POS_FIELD_1 + + for config in DDFPTestConfigOptions.__members__: + config_value, index = bytearray_to_integer(payload, index, False) + if 'NUM_OF_TEST_CONFIGS' not in config: + self.fp_test_configs[config] = config_value + if DDFPTestConfigOptions.TEST_CONFIG_ENABLE_BETA_1_9_HW.name in config: + GlobalVariables().HW_BETA_1_9 = config_value == 1 + + self.fp_test_configs_response_timestamp = timestamp + + def cmd_set_test_config(self, config: int, reset: int = NO_RESET): """ Constructs and sends the FP test config @@ -146,24 +169,6 @@ self.logger.debug("Timeout!!!!") return False - @publish(['msg_id_fp_send_test_config', 'fp_test_configs', 'fp_test_configs_response_timestamp']) - def _handler_fp_test_config_sync(self, message, timestamp=0.0): - """ - Handles published test configuration status messages. - - @param message: published FP test configurations message - @return: None - """ - payload = message['message'] - index = MsgFieldPositions.START_POS_FIELD_1 - - for config in DDFPTestConfigOptions.__members__: - if 'NUM_OF_TEST_CONFIGS' not in config: - config_value, index = bytearray_to_integer(payload, index, False) - self.fp_test_configs[config] = config_value - - self.fp_test_configs_response_timestamp = timestamp - def _reset_test_configs_record(self): """ Resets the test configuration dictionary Index: leahi_dialin/fp/modules/levels.py =================================================================== diff -u -rf0f1a6557cb07e31eb26bb8f8c70e87902f30626 -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/fp/modules/levels.py (.../levels.py) (revision f0f1a6557cb07e31eb26bb8f8c70e87902f30626) +++ leahi_dialin/fp/modules/levels.py (.../levels.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -20,7 +20,7 @@ from .constants import NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.fp_defs import FPFloaterLevels, FPFloaterLevelSensorNames +from leahi_dialin.common.fp_defs import fp_enum_repository from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish, DialinEnum from leahi_dialin.utils.checks import check_broadcast_interval_override_ms @@ -50,7 +50,7 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_level_data, self._handler_levels_sync) self.fp_levels = { - FPFloaterLevelSensorNames.P25_LEVEL.name: 0 + fp_enum_repository.FPFloaterLevelSensorNames.P25_LEVEL.name: 0 } self.fp_levels_timestamp = 0 @@ -64,7 +64,7 @@ @param message: published levels data message @returns none """ - self.fp_levels[FPFloaterLevelSensorNames.P25_LEVEL.name] = struct.unpack('i', bytearray( + 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] self.fp_levels_timestamp = timestamp Index: leahi_dialin/fp/modules/valves.py =================================================================== diff -u -r6364355a60f818cb66570b78b4c69e00a0d5865d -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/fp/modules/valves.py (.../valves.py) (revision 6364355a60f818cb66570b78b4c69e00a0d5865d) +++ leahi_dialin/fp/modules/valves.py (.../valves.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -20,7 +20,7 @@ from collections import OrderedDict from .constants import NO_RESET -from leahi_dialin.common.fp_defs import FPValveStates, FPValveNames, BETA_IOFP_VALVE_OFFSET +from leahi_dialin.common.fp_defs import fp_enum_repository, BETA_IOFP_VALVE_OFFSET from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish, DialinEnum @@ -62,19 +62,19 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_valves_states_data, self._handler_valves_sync) self.valve_states_all = 0x0000 - self.m4_valv = {"id": FPValveNames.M4_VALV.value, "state": DEENERGIZED} - self.m12_valv = {"id": FPValveNames.M12_VALV.value, "state": DEENERGIZED} - self.p11_valv = {"id": FPValveNames.P11_VALV.value, "state": DEENERGIZED} - self.p33_valv = {"id": FPValveNames.P33_VALV.value, "state": DEENERGIZED} - self.p34_valv = {"id": FPValveNames.P34_VALV.value, "state": DEENERGIZED} - self.p37_valv = {"id": FPValveNames.P37_VALV.value, "state": DEENERGIZED} - self.p39_valv = {"id": FPValveNames.P39_VALV.value, "state": DEENERGIZED} - self.p6_valv = {"id": FPValveNames.P6_VALV.value, "state": DEENERGIZED} + self.m4_valv = {"id": fp_enum_repository.FPValveNames.M4_VALV.value, "state": DEENERGIZED} + self.m12_valv = {"id": fp_enum_repository.FPValveNames.M12_VALV.value, "state": DEENERGIZED} + self.p11_valv = {"id": fp_enum_repository.FPValveNames.P11_VALV.value, "state": DEENERGIZED} + self.p33_valv = {"id": fp_enum_repository.FPValveNames.P33_VALV.value, "state": DEENERGIZED} + self.p34_valv = {"id": fp_enum_repository.FPValveNames.P34_VALV.value, "state": DEENERGIZED} + self.p37_valv = {"id": fp_enum_repository.FPValveNames.P37_VALV.value, "state": DEENERGIZED} + self.p39_valv = {"id": fp_enum_repository.FPValveNames.P39_VALV.value, "state": DEENERGIZED} + self.p6_valv = {"id": fp_enum_repository.FPValveNames.P6_VALV.value, "state": DEENERGIZED} # NOTE: The len function counts the enums with the same number only once. - self.valve_states_enum = [0 for _ in range(len(FPValveNames))] + self.valve_states_enum = [0 for _ in range(len(fp_enum_repository.FPValveNames))] - for valve in FPValveNames.__members__: + for valve in fp_enum_repository.FPValveNames.__members__: self.valves_sensed_states[valve] = '' def get_valve_states(self): @@ -94,6 +94,55 @@ self.p6_valv.get("state") ] + @publish([ + "msg_id_fp_valves_states_data", + "valve_states_all", + "m4_valv", + "m12_valv", + "p11_valv", + "p33_valv", + "p34_valv", + "p37_valv", + "p39_valv", + "p6_valv", + "valve_states_enum", + "fp_valves_states_timestamp" + ]) + def _handler_valves_sync(self, message, timestamp=0.0): + """ + Handles published FP valves states message. + + @param message: published FP valves states message + @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])) + 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])) + 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) + self.p37_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 8) + self.p39_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 16) + self.p6_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 32) + self.valve_states_all += fp_valves[0] << 8 + + # Extract each valve sensed state from U08 valves states using bit-masking + start = self.END_FP_VALVES_STATES + end = start + 1 + for valve_id in self.valves_sensed_states: + valve_state_number = struct.unpack('B', bytearray(message['message'][start:end]))[0] + self.valves_sensed_states[valve_id] = fp_enum_repository.FPValveStates(valve_state_number).name + start = end + end += 1 + + self.fp_valves_states_timestamp = timestamp + @staticmethod def sort_by_id(observation): """ Index: leahi_dialin/td/modules/ejector.py =================================================================== diff -u -r6944f314294da17334cb50aea33b044c83daa95d -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/td/modules/ejector.py (.../ejector.py) (revision 6944f314294da17334cb50aea33b044c83daa95d) +++ leahi_dialin/td/modules/ejector.py (.../ejector.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -19,7 +19,7 @@ from .constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.td_defs import TDEjectorNames, TDEjectorAttributes +from leahi_dialin.common.td_defs import td_enum_repository from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish from leahi_dialin.utils.checks import check_broadcast_interval_override_ms @@ -49,11 +49,11 @@ self._handler_ejector_sync) self.h5_motor = { - TDEjectorNames.H5_MOTOR.name: { - TDEjectorAttributes.STATE.name: 0, - TDEjectorAttributes.SET_SPEED.name: 0.0, - TDEjectorAttributes.OPT_SNSR_RETRACT: 0, # H25 Optical Sensor - TDEjectorAttributes.OPT_SNSR_ENGAGE: 0 # H24 Optical Sensor + td_enum_repository.TDEjectorNames.H5_MOTOR.name: { + td_enum_repository.TDEjectorAttributes.STATE.name: 0, + 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 } } self.td_ejector_timestamp = 0 @@ -66,13 +66,13 @@ @param message: published ejector data message as: ejector state @return: None """ - self.h5_motor[TDEjectorNames.H5_MOTOR.name][TDEjectorAttributes.STATE.name] = struct.unpack('i', bytearray( + 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[TDEjectorNames.H5_MOTOR.name][TDEjectorAttributes.SET_SPEED.name] = struct.unpack('f', bytearray( + 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[TDEjectorNames.H5_MOTOR.name][TDEjectorAttributes.OPT_SNSR_RETRACT.name] = struct.unpack('i', bytearray( + 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[TDEjectorNames.H5_MOTOR.name][TDEjectorAttributes.OPT_SNSR_ENGAGE.name] = struct.unpack('i', bytearray( + 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] self.td_ejector_timestamp = timestamp Index: leahi_dialin/td/modules/pressure_sensors.py =================================================================== diff -u -r4b63107021e34fd1968e02f9d72bbb31f38fefd7 -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/td/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 4b63107021e34fd1968e02f9d72bbb31f38fefd7) +++ leahi_dialin/td/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -18,7 +18,7 @@ from leahi_dialin.common.constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.td_defs import TDPressureSensorNames, TDPressureSensorAttributes +from leahi_dialin.common.td_defs import td_enum_repository from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish @@ -46,20 +46,20 @@ self._handler_pressure_sync) self.td_pressure_timestamp = 0.0 self.td_pressure_sensors = { - TDPressureSensorNames.H2_PRES.name: { - TDPressureSensorAttributes.PRES.name: 0.0, - TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name: 0.0, - TDPressureSensorAttributes.PRES_LIMIT_MIN.name: 0, - TDPressureSensorAttributes.PRES_LIMIT_MAX.name: 0 + td_enum_repository.TDPressureSensorNames.H2_PRES.name: { + 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 }, - TDPressureSensorNames.H14_PRES.name: { - TDPressureSensorAttributes.PRES.name: 0.0, - TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name: 0.0, - TDPressureSensorAttributes.PRES_LIMIT_MIN.name: 0, - TDPressureSensorAttributes.PRES_LIMIT_MAX.name: 0 + td_enum_repository.TDPressureSensorNames.H14_PRES.name: { + 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 }, - TDPressureSensorNames.H23_PRES.name: { - TDPressureSensorAttributes.PRES.name : 0.0 + td_enum_repository.TDPressureSensorNames.H23_PRES.name: { + td_enum_repository.TDPressureSensorAttributes.PRES.name : 0.0 } } self.pressure_limits_state = 0 @@ -113,22 +113,44 @@ baro = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13])) - self.td_pressure_sensors[TDPressureSensorNames.H2_PRES.name][TDPressureSensorAttributes.PRES.name] = art[0] - self.td_pressure_sensors[TDPressureSensorNames.H14_PRES.name][TDPressureSensorAttributes.PRES.name] = ven[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES.name] = art[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES.name] = ven[0] self.pressure_limits_state = pls[0] - self.td_pressure_sensors[TDPressureSensorNames.H2_PRES.name][TDPressureSensorAttributes.PRES_LIMIT_MIN.name] = apl[0] - self.td_pressure_sensors[TDPressureSensorNames.H2_PRES.name][TDPressureSensorAttributes.PRES_LIMIT_MAX.name] = apu[0] - self.td_pressure_sensors[TDPressureSensorNames.H14_PRES.name][TDPressureSensorAttributes.PRES_LIMIT_MIN.name] = vpl[0] - self.td_pressure_sensors[TDPressureSensorNames.H14_PRES.name][TDPressureSensorAttributes.PRES_LIMIT_MAX.name] = vpu[0] - self.td_pressure_sensors[TDPressureSensorNames.H2_PRES.name][TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name] = lfa[0] - self.td_pressure_sensors[TDPressureSensorNames.H14_PRES.name][TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name] = lfv[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MIN.name] = apl[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MAX.name] = apu[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MIN.name] = vpl[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MAX.name] = vpu[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name] = lfa[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name] = lfv[0] self.tmp_pressure = tps[0] self.tmp_min_limit = tmin[0] self.tmp_max_limit = tmax[0] - self.td_pressure_sensors[TDPressureSensorNames.H23_PRES.name][TDPressureSensorAttributes.PRES.name] = baro[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H23_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES.name] = baro[0] self.td_pressure_timestamp = timestamp + def cmd_pressure_sensors_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends the measured pressure sensors broadcast interval override command + Constraints: + Must be logged into TD. + Given interval must be non-zero and a multiple of the TD general task interval (50 ms). + + @param ms: integer - interval (in ms) to override with + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + return cmd_generic_broadcast_interval_override( + ms = ms, + reset = reset, + channel_id = DenaliChannels.dialin_to_td_ch_id, + msg_id = MsgIds.MSG_ID_TD_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + module_name = 'TD pressure sensors', + logger = self.logger, + can_interface = self.can_interface) + + def cmd_pressure_sensor_override(self, sensor: int, pressure: float, reset: int = NO_RESET) -> int: """ Constructs and sends the measured pressure sensor override command @@ -187,25 +209,3 @@ logger = self.logger, can_interface = self.can_interface ) - - - def cmd_pressure_sensors_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: - """ - Constructs and sends the measured pressure sensors broadcast interval override command - Constraints: - Must be logged into TD. - Given interval must be non-zero and a multiple of the TD general task interval (50 ms). - - @param ms: integer - interval (in ms) to override with - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - """ - - return cmd_generic_broadcast_interval_override( - ms = ms, - reset = reset, - channel_id = DenaliChannels.dialin_to_td_ch_id, - msg_id = MsgIds.MSG_ID_TD_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - module_name = 'TD pressure sensors', - logger = self.logger, - can_interface = self.can_interface)