Index: leahi_dialin/common/fp_defs.py =================================================================== diff -u -rd3147dff7c95e3ab5a507591ce5b9e1e74911a19 -r95a7bdcce8c5ffed0de3fbfb09f7f6999ad0f1bd --- leahi_dialin/common/fp_defs.py (.../fp_defs.py) (revision d3147dff7c95e3ab5a507591ce5b9e1e74911a19) +++ leahi_dialin/common/fp_defs.py (.../fp_defs.py) (revision 95a7bdcce8c5ffed0de3fbfb09f7f6999ad0f1bd) @@ -8,454 +8,529 @@ # @file fp_defs.py # # @author (last) Zoltan Miskolci -# @date (last) 12-Jan-2026 +# @date (last) 29-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 .dd_defs import dd_enum_repository -from .global_vars import GlobalVariables, test_config_change from ..utils.base import DialinEnum -class FP_Defs: +# ================================================== Constants ================================================== +BETA_IOFP_COND_SENSOR_OFFSET = dd_enum_repository.DDConductivitySensorNames.NUM_OF_CONDUCTIVITY_SENSORS.value # Offset to translate Dialin FPTemperaturesNames to DD firmware DD Conductivity Sensors enum +BETA_IOFP_PRES_SENSOR_OFFSET = dd_enum_repository.DDPressureSensorNames.NUM_OF_PRESSURE_SENSORS.value # Offset to translate Dialin FPTemperaturesNames to DD firmware DD Pressure Sensors enum +BETA_IOFP_VALVE_OFFSET = dd_enum_repository.DDValveNames.NUM_OF_DD_VALVES.value # Offset to translate Dialin FPValveNames to DD firmware DD_Valves - # IDE autocomplete suppor - if TYPE_CHECKING: - FPOpModes: DialinEnum - FPFaultStates: DialinEnum - FPServiceStates: DialinEnum - FPPostStates: DialinEnum - FPStandbyStates: DialinEnum - FPPreGenPermeateStates: DialinEnum - FPPreGenPDefStates: DialinEnum - FPGenPermeateStates: DialinEnum - FPGenPermeateDefStates: DialinEnum - FPNotLegalStates: DialinEnum - FPEventList: DialinEnum - FPEventDataTypes: DialinEnum +# ================================================== Enum Creators: Operations ================================================== +@unique +class FPOpModes(DialinEnum): + MODE_FAUL = 0 # Fault mode + MODE_SERV = 1 # Service mode + MODE_INIT = 2 # Initialization & POST mode + MODE_STAN = 3 # Standby mode + MODE_PRE_GENP = 4 # Pre Generate Permeate mode + MODE_GENP = 5 # Generate Permeate mode + MODE_DPGP = 6 # Defeatured Pre-Generate Permeate mode + MODE_DEGP = 7 # Defeatured Generate Permeate mode + MODE_NLEG = 8 # Not legal - an illegal mode transition occurred + NUM_OF_FP_MODES = 9 # Number of TD operation modes - FPBoostPumpNames: DialinEnum - FPConductivitySensorNames: DialinEnum - FPRORejectionRatioNames: DialinEnum - FPFlowSensorNames: DialinEnum - FPFloaterLevelSensorNames: DialinEnum - FPPressureSensorNames: DialinEnum - FPROPumpNames: DialinEnum - FPTemperatureSensorNames: DialinEnum - FPValveNames: DialinEnum - FPAllPumpNames: DialinEnum - - FPFloaterLevels: DialinEnum - FPPumpAttributes: DialinEnum - FPValveStates: DialinEnum +FPOpModes._str_list = { + # Official Name : Accepted strings + 'MODE_FAUL': ['fault'], + 'MODE_SERV': ['service'], + 'MODE_INIT': ['initialization'], + 'MODE_STAN': ['standby'], + 'MODE_PRE_GENP': ['pre-gen', 'pre-generate', 'pre-generate permeate'], + 'MODE_GENP': ['generate permeate'], + 'MODE_DPGP': ['defeatured pre-generate permeate', 'defeatured pre-gen'], + 'MODE_DEGP': ['defeatured generate permeate'], + 'MODE_NLEG': ['not legal'], + 'NUM_OF_FP_MODES': [] +} - # A Dictionary storing which Property(Enum) should be created by which function - _properties = { - # Operation / State enums - 'FPOpModes': '_create_fp_operation_modes', - 'FPFaultStates': '_create_fp_fault_states', - 'FPServiceStates': '_create_fp_service_states', - 'FPPostStates': '_create_fp_init_post_states', - 'FPStandbyStates': '_create_fp_standby_states', - 'FPPreGenPermeateStates': '_create_fp_pregen_states', - 'FPPreGenPDefStates': '_create_fp_pregen_defeatured_states', - 'FPGenPermeateStates': '_create_fp_gen_permeate_states', - 'FPGenPermeateDefStates': '_create_fp_gen_permeate_defeatured_states', - 'FPNotLegalStates': '_create_fp_not_legal_states', - # Event enums - 'FPEventList': '_create_fp_eventlist', - 'FPEventDataTypes': '_create_fp_event_data_types', - - # Module Names enums - 'FPBoostPumpNames': '_create_fp_boost_pump_names', - 'FPConductivitySensorNames': '_create_fp_conductivity_sensor_names', - 'FPRORejectionRatioNames': '_create_fp_ro_rejection_ratio_names', - 'FPFlowSensorNames': '_create_fp_flow_sensor_names', - 'FPFloaterLevelSensorNames': '_create_fp_floater_sensor_names', - 'FPPressureSensorNames': '_create_fp_pressure_sensor_names', - 'FPROPumpNames': '_create_fp_ro_pump_names', - 'FPValveNames': '_create_fp_valve_names', - 'FPAllPumpNames': '_create_fp_all_pump_names', - 'FPTemperatureSensorNames': '_create_fp_temperature_sensor_names', +@unique +class FPFaultStates(DialinEnum): + FP_FAULT_STATE_START = 0 # FP Fault Start State + FP_FAULT_DEENERGIZED_STATE = 1 # FP Fault De-energized State + FP_FAULT_ENERGIZED_STATE = 2 # FP Fault Energized State + NUM_OF_FP_FAULT_STATES = 3 # Number of Fault Mode State - # Support enums - 'FPFloaterLevels': '_create_fp_floater_levels', - 'FPPumpAttributes': '_create_fp_pump_attributes', - 'FPValveStates': '_create_fp_valve_states', - } +FPFaultStates._str_list = { + # Official Name : Accepted strings + 'FP_FAULT_STATE_START': ['fault start'], + 'FP_FAULT_DEENERGIZED_STATE': ['fault deenergized', 'deenergized'], + 'FP_FAULT_ENERGIZED_STATE': ['fault energized', 'energized'], + 'NUM_OF_FP_FAULT_STATES': [], +} - def __init__(self): - self.update_enums() +@unique +class FPServiceStates(DialinEnum): + NUM_OF_FP_SERV_STATES = 0 # Number of FP service states - # Dynamically creates all the properties in runtime - def __getattr__(self, name) -> DialinEnum: - if name in self._properties: - value = getattr(self, self._properties[name])() - setattr(self, name, value) - return value - raise AttributeError(name) +FPServiceStates._str_list = { + # Official Name : Accepted strings + 'NUM_OF_FP_SERV_STATES': [], +} - # Attached to a listener to update the enums when the listener is triggered - def update_enums(self) -> None: - for prop_name in self._properties: - # Cleans the cached value - self.__dict__.pop(prop_name, None) - - # Reinitializing the enum as it's not in the cache - self.__getattr__(prop_name) +@unique +class FPPostStates(DialinEnum): + FP_POST_STATE_START = 0 # Start initialize & POST mode state + FP_POST_STATE_FW_INTEGRITY = 1 # Run firmware integrity test state + FP_POST_STATE_NVDATAMGMT = 2 # Run NV Data Mgmt. test state + FP_POST_STATE_WATCHDOG = 3 # Run watchdog test state + FP_POST_STATE_SAFETY_SHUTDOWN = 4 # Run safety shutdown test state + FP_POST_STATE_TEMPERATURES = 5 # Run temperatures POST state + FP_POST_STATE_FW_COMPATIBILITY = 6 # Run firmware compatibility test state + FP_POST_STATE_FPGA = 7 # Run FPGA test state + FP_POST_STATE_COMPLETED = 8 # POST self-tests completed state + FP_POST_STATE_FAILED = 9 # POST self-tests failed state + NUM_OF_FP_POST_STATES = 10 # Number of initialize & POST mode states +FPPostStates._str_list = { + # Official Name : Accepted strings + 'FP_POST_STATE_START': ['start'], + 'FP_POST_STATE_FW_INTEGRITY': ['fw integrity'], + 'FP_POST_STATE_NVDATAMGMT': ['nv data management', 'data management'], + 'FP_POST_STATE_WATCHDOG': ['watchdog'], + 'FP_POST_STATE_SAFETY_SHUTDOWN': ['safety shutdown'], + 'FP_POST_STATE_TEMPERATURES': ['temperatures', 'temperatures check'], + 'FP_POST_STATE_FW_COMPATIBILITY': ['fw compatibility'], + 'FP_POST_STATE_FPGA': ['fpga'], + 'FP_POST_STATE_COMPLETED': ['completed'], + 'FP_POST_STATE_FAILED': ['failed'], + 'NUM_OF_FP_POST_STATES': [] +} - # ================================================== Enum Creators: Operations ================================================== - def _create_fp_operation_modes(self): - members = { - 'MODE_FAUL': 0, # Fault mode - 'MODE_SERV': 1, # Service mode - 'MODE_INIT': 2, # Initialization & POST mode - 'MODE_STAN': 3, # Standby mode - 'MODE_PRE_GENP': 4, # Pre Generate Permeate mode - 'MODE_GENP': 5, # Generate Permeate mode - 'MODE_DPGP': 6, # Defeatured Pre-Generate Permeate mode - 'MODE_DEGP': 7, # Defeatured Generate Permeate mode - 'MODE_NLEG': 8, # Not legal - an illegal mode transition occurred - 'NUM_OF_FP_MODES': 9, # Number of FP operation modes - } - return unique(DialinEnum('FPOpModes', members)) +@unique +class FPStandbyStates(DialinEnum): + FP_STANDBY_MODE_STATE_IDLE = 0 # Idle standby mode state + NUM_OF_FP_STANDBY_MODE_STATES = 1 # Number of standby mode states +FPStandbyStates._str_list = { + # Official Name : Accepted strings + 'FP_STANDBY_MODE_STATE_IDLE': ['idle'], + 'NUM_OF_FP_STANDBY_MODE_STATES': [], +} - def _create_fp_fault_states(self): - members = { - 'FP_FAULT_STATE_START': 0, # FP Fault Start State - 'FP_FAULT_DEENERGIZED_STATE': 1, # FP Fault De-energized State - 'FP_FAULT_ENERGIZED_STATE': 2, # FP Fault Energized State - 'NUM_OF_FP_FAULT_STATES': 3, # Number of Fault Mode State - } - return unique(DialinEnum('FPFaultStates', members)) +@unique +class FPPreGenPermeateStates(DialinEnum): + FP_PRE_GENP_INLET_PRES_CHECK = 0 # FP Pre Gen Permeate Inlet Pressure Check State + FP_PRE_GENP_FILTER_FLUSH = 1 # FP Pre Gen Permeate Filter Flush State + FP_PRE_GENP_PERMEATE_FLUSH = 2 # FP Pre Gen Permeate Permeate Flush State + FP_PRE_GENP_CONCENTRATE_FLUSH = 3 # FP Pre Gen Permeate Concentrate Flush State + FP_PRE_GENP_VERIFY_WATER = 4 # FP Pre Gen Permeate Verify Water State + FP_PRE_GENP_PAUSED = 5 # FP Pre Gen Permeate Paused State + NUM_OF_FP_PRE_GENP_MODE_STATES = 7 # Number of Pre-Gen Permeate mode states - def _create_fp_service_states(self): - members = { - 'NUM_OF_FP_SERV_STATES': 0, # Number of FP service states - } - return unique(DialinEnum('FPServiceStates', members)) +FPPreGenPermeateStates._str_list = { + # Official Name : Accepted strings + 'FP_PRE_GENP_INLET_PRES_CHECK': ['inlet pressure check', 'pressure check'], + 'FP_PRE_GENP_FILTER_FLUSH': ['filter flush'], + 'FP_PRE_GENP_PERMEATE_FLUSH': ['permeate flush'], + 'FP_PRE_GENP_CONCENTRATE_FLUSH': ['concentrate flush'], + 'FP_PRE_GENP_VERIFY_WATER': ['verify water'], + 'FP_PRE_GENP_PAUSED': ['paused'], + 'NUM_OF_FP_PRE_GENP_MODE_STATES': [], +} - def _create_fp_init_post_states(self): - members = { - 'FP_POST_STATE_START': 0, # Start initialize & POST mode state - 'FP_POST_STATE_FW_INTEGRITY': 1, # Run firmware integrity test state - 'FP_POST_STATE_NVDATAMGMT': 2, # Run NV Data Mgmt. test state - 'FP_POST_STATE_WATCHDOG': 3, # Run watchdog test state - 'FP_POST_STATE_SAFETY_SHUTDOWN': 4, # Run safety shutdown test state - 'FP_POST_STATE_TEMPERATURES': 5, # Run temperatures POST state - 'FP_POST_STATE_FW_COMPATIBILITY': 6, # Run firmware compatibility test state - 'FP_POST_STATE_FPGA': 7, # Run FPGA test state - 'FP_POST_STATE_COMPLETED': 8, # POST self-tests completed state - 'FP_POST_STATE_FAILED': 9, # POST self-tests failed state - 'NUM_OF_FP_POST_STATES': 10 # Number of initialize & POST mode states - } - return unique(DialinEnum('FPPostStates', members)) +@unique +class FPPreGenPDefStates(DialinEnum): + FP_PRE_GENP_DEF_FLUSH = 0 # Pre Gen Permeate Defeatured Flush state + FP_PRE_GENP_DEF_INLET_WATER_CHECK = 1 # Pre Gen Permeate Defeatured Inlet Water Check state + FP_PRE_GENP_DEF_PAUSED = 2 # Defeatured Pre Gen Permeate Paused state + NUM_OF_FP_PRE_GENP_DEF_MODE_STATES = 3 # Number of Defeatured Pre Gen Permeate states +FPPreGenPDefStates._str_list = { + # Official Name : Accepted strings + 'FP_PRE_GENP_DEF_FLUSH': ['flush', 'defeatured flush', 'def flush'], + 'FP_PRE_GENP_DEF_INLET_WATER_CHECK': ['inlet water check', 'def inlet water check', 'defeatured inlet water check'], + 'FP_PRE_GENP_DEF_PAUSED': ['paused', 'defeatured paused', 'def paused'], + 'NUM_OF_FP_PRE_GENP_DEF_MODE_STATES': [], +} - def _create_fp_standby_states(self): - members = { - 'FP_STANDBY_MODE_STATE_IDLE': 0, # Idle standby mode state - 'NUM_OF_FP_STANDBY_MODE_STATES': 1, # Number of standby mode states - } - return unique(DialinEnum('FPStandbyStates', members)) +@unique +class FPGenPermeateStates(DialinEnum): + FP_GENP_TANK_FILL_STATE = 0 # Gen Permeate Tank Fill low state + FP_GENP_TANK_FULL_STATE = 1 # Gen Permeate Tank Full state + NUM_OF_FP_GENP_MODE_STATES = 2 # Number of Gen permeate states - def _create_fp_pregen_states(self): - members = { - 'FP_PRE_GENP_INLET_PRES_CHECK': 0, # FP Pre Gen Permeate Inlet Pressure Check State - 'FP_PRE_GENP_FILTER_FLUSH': 1, # FP Pre Gen Permeate Filter Flush State - 'FP_PRE_GENP_PERMEATE_FLUSH': 2, # FP Pre Gen Permeate Permeate Flush State - 'FP_PRE_GENP_CONCENTRATE_FLUSH': 3, # FP Pre Gen Permeate Concentrate Flush State - 'FP_PRE_GENP_VERIFY_WATER': 4, # FP Pre Gen Permeate Verify Water State - 'FP_PRE_GENP_PAUSED': 5, # FP Pre Gen Permeate Paused State - 'NUM_OF_FP_PRE_GENP_MODE_STATES': 6, # Number of Pre-Gen Permeate mode states - } - return unique(DialinEnum('FPPreGenPermeateStates', members)) +FPGenPermeateStates._str_list = { + # Official Name : Accepted strings + 'FP_GENP_TANK_FILL_STATE': ['fill', 'tank fill'], + 'FP_GENP_TANK_FULL_STATE': ['full', 'tank full'], + 'NUM_OF_FP_GENP_MODE_STATES': [], +} - def _create_fp_pregen_defeatured_states(self): - members = { - 'FP_PRE_GENP_DEF_FLUSH': 0, # Pre Gen Permeate Defeatured Flush state - 'FP_PRE_GENP_DEF_INLET_WATER_CHECK': 1, # Pre Gen Permeate Defeatured Inlet Water Check state - 'FP_PRE_GENP_DEF_PAUSED': 2, # Defeatured Pre Gen Permeate Paused state - 'NUM_OF_FP_PRE_GENP_DEF_MODE_STATES': 3, # Number of Defeatured Pre Gen Permeate states - } - return unique(DialinEnum('FPPreGenPDefStates', members)) +@unique +class FPGenPermeateDefStates(DialinEnum): + FP_GENP_DEF_SUPPLY_WATER = 0 # Gen Permeate Defeatured Supply Water statee + FP_GENP_DEF_PAUSED = 1 # Gen Permeate Defeatured Paused state + NUM_OF_FP_GENP_DEF_MODE_STATES = 2 # Number of Defeatured Gen permeate states +FPGenPermeateDefStates._str_list = { + # Official Name : Accepted strings + 'FP_GENP_DEF_SUPPLY_WATER': ['supply water', 'def supply water', 'defeatured supply water'], + 'FP_GENP_DEF_PAUSED': ['paused', 'def paused', 'defeatured paused'], + 'NUM_OF_FP_GENP_DEF_MODE_STATES': [], +} - def _create_fp_gen_permeate_states(self): - members = { - 'FP_GENP_TANK_FILL_STATE': 0, # Gen Permeate Tank Fill low state - 'FP_GENP_TANK_FULL_STATE': 1, # Gen Permeate Tank Full state - 'NUM_OF_FP_GENP_MODE_STATES': 2, # Number of Gen permeate states - } - return unique(DialinEnum('FPGenPermeateStates', members)) +@unique +class FPNotLegalStates(DialinEnum): + NUM_OF_NOT_LEGAL_STATES = 0 # Number of Not Legal states - def _create_fp_gen_permeate_defeatured_states(self): - members = { - 'FP_GENP_DEF_SUPPLY_WATER': 0, # Gen Permeate Defeatured Supply Water statee - 'FP_GENP_DEF_PAUSED': 1, # Gen Permeate Defeatured Paused state - 'NUM_OF_FP_GENP_DEF_MODE_STATES': 2, # Number of Defeatured Gen permeate states - } - return unique(DialinEnum('FPGenPermeateDefStates', members)) +FPNotLegalStates._str_list = { + # Official Name : Accepted strings + 'NUM_OF_NOT_LEGAL_STATES': [], +} - def _create_fp_not_legal_states(self): - members = { - 'NUM_OF_NOT_LEGAL_STATES': 0, # Number of Not Legal states - } - return unique(DialinEnum('FPNotLegalStates', members)) +# ================================================== Enum Creators: Events ================================================== +@unique +class FPEventList(DialinEnum): + FP_EVENT_STARTUP = 0 # FP startup event + FP_EVENT_OP_MODE_CHANGE = 1 # FP Op mode change event + FP_EVENT_SUB_MODE_CHANGE = 2 # FP Op sub-mode change event + FP_EVENT_PRE_GEN_RO_SET_PWM = 3 # FP gen permeate ro set pwm event + FP_EVENT_GENP_BOOST_SET_PWM = 4 # FP gen permeate boost set pwm event + FP_EVENT_GENP_CHANGE = 5 # FP gen permeate state change + FP_EVENT_PRE_GEN_CHANGE = 6 # FP pre gen state change + FP_EVENT_PRE_GEN_DEF_CHANGE = 7 # FP defeatured pre gen state change + FP_EVENT_GENP_DEF_CHANGE = 8 # FP defeatured gen permeate state change + FP_EVENT_FAULT_ALARM_TRIGGER = 9 # FP event for alarms that would trigger + NUM_OF_FP_EVENT_IDS = 10 # Number of FP events - def _create_fp_eventlist(self): - members = { - 'FP_EVENT_STARTUP': 0, # FP startup event - 'FP_EVENT_OP_MODE_CHANGE': 1, # FP Op mode change event - 'FP_EVENT_SUB_MODE_CHANGE': 2, # FP Op sub-mode change event - 'FP_EVENT_PRE_GEN_RO_SET_PWM': 3, # FP gen permeate ro set pwm event - 'FP_EVENT_GENP_BOOST_SET_PWM': 4, # FP gen permeate boost set pwm event - 'FP_EVENT_GENP_CHANGE': 5, # FP gen permeate state change - 'FP_EVENT_PRE_GEN_CHANGE': 6, # FP pre gen state change - 'FP_EVENT_PRE_GEN_DEF_CHANGE': 7, # FP defeatured pre gen state change - 'FP_EVENT_GENP_DEF_CHANGE': 8, # FP defeatured gen permeate state change - 'FP_EVENT_FAULT_ALARM_TRIGGER': 9, # FP event for alarms that would trigger - 'NUM_OF_FP_EVENT_IDS': 10, # Number of FP events - } - return unique(DialinEnum('FPEventList', members)) +FPEventList._str_list = { + # Official Name : Accepted strings + 'FP_EVENT_STARTUP': ['startup'], + 'FP_EVENT_OP_MODE_CHANGE': ['op mode change'], + 'FP_EVENT_SUB_MODE_CHANGE': ['sub mode change'], + 'FP_EVENT_PRE_GEN_RO_SET_PWM': ['ro pump set pwm'], + 'FP_EVENT_GENP_BOOST_SET_PWM': ['boost pump set pwm'], + 'FP_EVENT_GENP_CHANGE': ['generate permeate change', 'genp change'], + 'FP_EVENT_PRE_GEN_CHANGE': ['pre-generate permeate change', 'pre-genp change'], + 'FP_EVENT_PRE_GEN_DEF_CHANGE': ['defeatured pre-generate permeate change', 'def pre-genp change'], + 'FP_EVENT_GENP_DEF_CHANGE': ['defeatured generate permeate change', 'def genp change'], + 'FP_EVENT_FAULT_ALARM_TRIGGER': ['alarm', 'alarm trigger', 'fault alarm trigger'], + 'NUM_OF_FP_EVENT_IDS': [], +} - def _create_fp_event_data_types(self): - members = { - 'EVENT_DATA_TYPE_NONE': 0, # No Event Data Type - 'EVENT_DATA_TYPE_U32': 1, # Unsigned 32bit Event Data Type - 'EVENT_DATA_TYPE_S32': 2, # Signed 32bit Event Data Type - 'EVENT_DATA_TYPE_F32': 3, # Float 32bit Event Data Type - 'EVENT_DATA_TYPE_BOOL': 4, # Boolean Event Data Type - 'NUM_OF_EVENT_DATA_TYPES': 5, # Number of Event Data Types - } - return unique(DialinEnum('FPEventDataTypes', members)) +@unique +class FPEventDataTypes(DialinEnum): + EVENT_DATA_TYPE_NONE = 0 # No Event Data Type + EVENT_DATA_TYPE_U32 = 1 # Unsigned 32bit Event Data Type + EVENT_DATA_TYPE_S32 = 2 # Signed 32bit Event Data Type + EVENT_DATA_TYPE_F32 = 3 # Float 32bit Event Data Type + EVENT_DATA_TYPE_BOOL = 4 # Boolean Event Data Type + NUM_OF_EVENT_DATA_TYPES = 5 # Number of Event Data Types +FPEventDataTypes._str_list = { + # Official Name : Accepted strings + 'EVENT_DATA_TYPE_NONE': ['none'], + 'EVENT_DATA_TYPE_U32': ['u32'], + 'EVENT_DATA_TYPE_S32': ['s32'], + 'EVENT_DATA_TYPE_F32': ['f32'], + 'EVENT_DATA_TYPE_BOOL': ['bool', 'boolean'], + 'NUM_OF_EVENT_DATA_TYPES': [], +} - # ================================================== Enum Creators: Names ================================================== - def _create_fp_boost_pump_names(self): - members = { - 'P40_PUMP': 0, # FP Boost Pump - 'NUM_OF_BOOST_PUMPS': 1, # Number of FP Boost Pumps - } - return unique(DialinEnum('FPBoostPumpNames', members)) +# ================================================== Enum Creators: Names ================================================== +@unique +class FPBoostPumpNames(DialinEnum): + P40_PUMP = 0 # FP Boost Pump + NUM_OF_BOOST_PUMPS = 1 # Number of FP Boost Pumps - def _create_fp_conductivity_sensor_names(self): - members = { - 'P9_COND': 0, # CPi (P9) conductivity sensor value - 'P18_COND': 1, # CPo (P18) conductivity sensor value - 'NUM_OF_FP_CONDUCTIVITY_SENSRORS': 2, # Number of Conductivity sensors - } +FPBoostPumpNames._str_list = { + # Official Name : Accepted strings + 'P40_PUMP': ['p40'], + 'NUM_OF_BOOST_PUMPS': [], +} - return unique(DialinEnum('FPConductivitySensorNames', members)) +@unique +class FPConductivitySensorNames(DialinEnum): + P9_COND = 0 # CPi (P9) conductivity sensor value + P18_COND = 1 # CPo (P18) conductivity sensor value + NUM_OF_FP_CONDUCTIVITY_SENSRORS = 2 # Number of Conductivity sensors - def _create_fp_ro_rejection_ratio_names(self): - members = { - 'RAW_RO_REJECTION_RATIO': 0, # Raw RO Rejection Ratio value - 'RAW_RO_REJECTION_RATIO_TANK_FILL': 1, # Raw RO Rejection Ratio Tank Fill value - 'AVG_RO_REJECTION_RATIO': 2, # Average RO Rejection Ratio value - 'AVG_RO_REJECTION_RATIO_TANK_FILL': 3, # Average RO Rejection Ratio Tank Fill value - 'GEN_PERMEATE_STATE': 4, # Generate Permeate State value - 'NUM_OF_FP_RO_REJECTION_RATIO': 5, # Number of RO Rejection Ratio items - } - return unique(DialinEnum('FPRORejectionRatioNames', members)) +FPConductivitySensorNames._str_list = { + # Official Name : Accepted strings + 'P9_COND': ['p9'], + 'P18_COND': ['p18'], + 'NUM_OF_FP_CONDUCTIVITY_SENSRORS': [], +} - def _create_fp_flow_sensor_names(self): - members = { - 'P7_FLOW': 0, # Water inlet flow sensor (FMS P7) - 'P16_FLOW': 1, # RO outlet flow sensor (FMP P16) - 'NUM_OF_FP_FLOW_SENSORS': 2, # Number of FP Flow Sensors - } - return unique(DialinEnum('FPFlowSensorNames', members)) +@unique +class FPRORejectionRatioNames(DialinEnum): + RAW_RO_REJECTION_RATIO = 0 # Raw RO Rejection Ratio value + RAW_RO_REJECTION_RATIO_TANK_FILL = 1 # Raw RO Rejection Ratio Tank Fill value + AVG_RO_REJECTION_RATIO = 2 # Average RO Rejection Ratio value + AVG_RO_REJECTION_RATIO_TANK_FILL = 3 # Average RO Rejection Ratio Tank Fill value + GEN_PERMEATE_STATE = 4 # Generate Permeate State value + NUM_OF_FP_RO_REJECTION_RATIO = 5 # Number of RO Rejection Ratio items +FPRORejectionRatioNames._str_list = { + # Official Name : Accepted strings + 'RAW_RO_REJECTION_RATIO': ['raw ro rejection ratio'], + 'RAW_RO_REJECTION_RATIO_TANK_FILL': ['raw ro tank fill rejection ratio'], + 'AVG_RO_REJECTION_RATIO': ['avg ro rejection ratio', 'average ro rejection ratio'], + 'AVG_RO_REJECTION_RATIO_TANK_FILL': ['avg ro tank fill rejection ratio', 'average ro tank fill rejection ratio'], + 'GEN_PERMEATE_STATE': ['generate permeate state', 'generate permeate'], + 'NUM_OF_FP_RO_REJECTION_RATIO': [], +} - def _create_fp_floater_sensor_names(self): - members = { - 'P25_LEVEL': 0, # P25 Level sensor - 'NUM_OF_FP_LEVEL_SENSORS': 1, # Number of Level Sensors - } - return unique(DialinEnum('FPFloaterLevelSensorNames', members)) +@unique +class FPFlowSensorNames(DialinEnum): + P7_FLOW = 0 # Water inlet flow sensor (FMS P7) + P16_FLOW = 1 # RO outlet flow sensor (FMP P16) + NUM_OF_FP_FLOW_SENSORS = 2 # Number of FP Flow Sensors - def _create_fp_pressure_sensor_names(self): - if GlobalVariables().HW_BETA_1_9 == True: - members = { - 'M3_PRES' : 0, # Water inlet pressure before regulator - 'P8_PRES' : 1, # Water inlet pressure after regulator - 'P13_PRES' : 2, # Water inlet pressure before the conductivity sensor - 'P17_PRES' : 3, # Pressure before the RO filter - 'P46_PRES' : 4, # Pressure after the RO filter - 'NUM_OF_FP_PRES_SENSORS' : 5, # Number of Pressure Sensors - } - else: - members = { - 'M3_PRES' : 0, # Water inlet pressure before regulator - 'P8_PRES' : 1, # Water inlet pressure after regulator - 'P13_PRES' : 2, # Water inlet pressure before the conductivity sensor - 'P17_PRES' : 3, # Pressure before the RO filter - 'P46_PRES' : 4, # Pressure after the RO filter - 'NUM_OF_FP_PRES_SENSORS' : 5, # Number of Pressure Sensors - } - return unique(DialinEnum('FPPressureSensorNames', members)) +FPFlowSensorNames._str_list = { + # Official Name : Accepted strings + 'P7_FLOW': ['p7'], + 'P16_FLOW': ['p16'], + 'NUM_OF_FP_FLOW_SENSORS': [], +} - def _create_fp_ro_pump_names(self): - members = { - 'P12_PUMP': 0, # P12 RO Pump - 'NUM_OF_RO_PUMPS': 1, # Number of RO Pumps - } - return unique(DialinEnum('FPROPumpNames', members)) +@unique +class FPFloaterLevelSensorNames(DialinEnum): + P25_LEVEL = 0 # P25 Level sensor + NUM_OF_FP_LEVEL_SENSORS = 1 # Number of Level Sensors +FPFloaterLevelSensorNames._str_list = { + # Official Name : Accepted strings + 'P25_LEVEL': ['p25'], + 'NUM_OF_FP_LEVEL_SENSORS': [], +} - def _create_fp_temperature_sensor_names(self): - if GlobalVariables().HW_BETA_1_9 == True: - members = { - 'M3_TEMP' : 0, # Temperature after pressure regulator (M3) - 'P8_TEMP' : 1, # Temperature before inlet conductivity sensor (P8) - 'P13_TEMP' : 2, # Temperature before RO filter (P13) - 'P17_TEMP' : 3, # Temperature after RO filter (P17) - 'P46_TEMP' : 4, # Temperature after sediment filter (P46) - 'P10_TEMP' : 5, # P10 temperature from inlet conductivity sensor. - 'P19_TEMP' : 6, # P19 temperature from outlet conductivity sensor. - 'P7_TEMP' : 7, # Temperature at p7 flow meter - 'P16_TEMP' : 8, # Temperature at p16 flow meter - 'P7_INTERNAL_TEMP' : 9, # Interal Temperature at p7 flow meter - 'P16_INTERNAL_TEMP' : 10, # Interal Temperature at p16 flow meter - 'NUM_OF_TEMPERATURE_SENSORS' : 11, # Number of Temperature Sensors - } - else: - members = { - 'M3_TEMP' : 0, # Temperature after pressure regulator (M3) - 'P8_TEMP' : 1, # Temperature before inlet conductivity sensor (P8) - 'P13_TEMP' : 2, # Temperature before RO filter (P13) - 'P17_TEMP' : 3, # Temperature after RO filter (P17) - 'P46_TEMP' : 4, # Temperature after sediment filter (P46) - 'P10_TEMP' : 5, # P10 temperature from inlet conductivity sensor. - 'P19_TEMP' : 6, # P19 temperature from outlet conductivity sensor. - 'P7_TEMP' : 7, # Temperature at p7 flow meter - 'P16_TEMP' : 8, # Temperature at p16 flow meter - 'P7_INTERNAL_TEMP' : 9, # Interal Temperature at p7 flow meter - 'P16_INTERNAL_TEMP' : 10, # Interal Temperature at p16 flow meter - 'NUM_OF_TEMPERATURE_SENSORS' : 11, # Number of Temperature Sensors - } - # Create the enum - created_enum = DialinEnum('FPTemperatureSensorNames', members) +@unique +class FPPressureSensorNames(DialinEnum): + M3_PRES = 0 # Water inlet pressure before regulator + P8_PRES = 1 # Water inlet pressure after regulator + P13_PRES = 2 # Water inlet pressure before the conductivity sensor + P17_PRES = 3 # Pressure before the RO filter + P46_PRES = 4 # Pressure after the RO filter + NUM_OF_FP_PRES_SENSORS = 5 # Number of Pressure Sensors - # Add aliases - extend_enum(created_enum, 'FIRST_PRESSURE_SENSOR', created_enum.M3_TEMP.value) - extend_enum(created_enum, 'LAST_PRESSURE_SENSOR', created_enum.P46_TEMP.value if GlobalVariables().HW_BETA_1_9 == True else created_enum.P46_TEMP.value) - extend_enum(created_enum, 'FIRST_CONDUCTIVITY_SENSOR', created_enum.P10_TEMP.value) - extend_enum(created_enum, 'LAST_CONDUCTIVITY_SENSOR', created_enum.P19_TEMP.value) - extend_enum(created_enum, 'FIRST_FLOW_SENSOR', created_enum.P7_TEMP.value) - extend_enum(created_enum, 'LAST_FLOW_SENSOR', created_enum.P16_TEMP.value) +FPPressureSensorNames._str_list = { + # Official Name : Accepted strings + 'M3_PRES': ['m3'], + 'P8_PRES': ['p8'], + 'P13_PRES': ['p13'], + 'P17_PRES': ['p17'], + 'P46_PRES': ['p46'], + 'NUM_OF_FP_PRES_SENSORS': [], +} - # Add aliases to be searchable (listed when pressed TAB) - created_enum._member_names_.append('FIRST_PRESSURE_SENSOR') - created_enum._member_names_.append('LAST_PRESSURE_SENSOR') - created_enum._member_names_.append('FIRST_CONDUCTIVITY_SENSOR') - created_enum._member_names_.append('LAST_CONDUCTIVITY_SENSOR') - created_enum._member_names_.append('FIRST_FLOW_SENSOR') - created_enum._member_names_.append('LAST_FLOW_SENSOR') - return created_enum +@unique +class FPROPumpNames(DialinEnum): + P12_PUMP = 0 # P12 RO Pump + NUM_OF_RO_PUMPS = 1 # Number of RO Pumps +FPROPumpNames._str_list = { + # Official Name : Accepted strings + 'P12_PUMP': ['p12'], + 'NUM_OF_RO_PUMPS': [], +} - def _create_fp_valve_names(self): - members = { - 'M4_VALV': 0, # Valve (M4 VWi) - 'M12_VALV': 1, # Valve (M12) - 'P11_VALV': 2, # Valve (P11 VPi) - 'P33_VALV': 3, # Valve (P33 VCr) - 'P34_VALV': 4, # Valve (P34 VCb) - 'P37_VALV': 5, # Valve (P37 VCd) - 'P39_VALV': 6, # Valve (P39 VROd) - 'P6_VALV': 7, # Valve (P6 VFF) - 'NUM_OF_FP_VALVES': 8, # Number of valves - } - return unique(DialinEnum('FPValveNames', members)) +class FPTemperatureSensorNames(DialinEnum): + M3_TEMP = 0 # Temperature after pressure regulator (M3) + P8_TEMP = 1 # Temperature before inlet conductivity sensor (P8) + P13_TEMP = 2 # Temperature before RO filter (P13) + P17_TEMP = 3 # Temperature after RO filter (P17) + P46_TEMP = 4 # Temperature after sediment filter (P46) + P10_TEMP = 5 # P10 temperature from inlet conductivity sensor. + P19_TEMP = 6 # P19 temperature from outlet conductivity sensor. + P7_TEMP = 7 # Temperature at p7 flow meter + P16_TEMP = 8 # Temperature at p16 flow meter + P7_INTERNAL_TEMP = 9 # Interal Temperature at p7 flow meter + P16_INTERNAL_TEMP = 10 # Interal Temperature at p16 flow meter + NUM_OF_TEMPERATURE_SENSORS = 11 # Number of Temperature Sensors + # Aliases + FIRST_PRESSURE_SENSOR = M3_TEMP + LAST_PRESSURE_SENSOR = P46_TEMP + FIRST_CONDUCTIVITY_SENSOR = P10_TEMP + LAST_CONDUCTIVITY_SENSOR = P19_TEMP + FIRST_FLOW_SENSOR = P7_TEMP + LAST_FLOW_SENSOR = P16_TEMP - def _create_fp_all_pump_names(self): - members = { - 'P12_PUMP_RO': 0, # P14 RO Pump - 'P40_PUMP_BOOSTER': 1, # P40 Boost Pump - } - return unique(DialinEnum('FPAllPumpNames', members)) +FPTemperatureSensorNames._str_list = { + # Official Name : Accepted strings + 'M3_TEMP': ['m3'], + 'P8_TEMP': ['p8'], + 'P13_TEMP': ['p13'], + 'P17_TEMP': ['p17'], + 'P46_TEMP': ['p46'], + 'P10_TEMP': ['p10'], + 'P19_TEMP': ['p19'], + 'P7_TEMP': ['p7'], + 'P16_TEMP': ['p16'], + 'P7_INTERNAL_TEMP': ['p7 internal'], + 'P16_INTERNAL_TEMP': ['p16 internal'], + 'NUM_OF_TEMPERATURE_SENSORS': [], +} +@unique +class FPValveNames(DialinEnum): + M4_VALV = 0 # Valve (M4 VWi) + M12_VALV = 1 # Valve (M12) + P11_VALV = 2 # Valve (P11 VPi) + P33_VALV = 3 # Valve (P33 VCr) + P34_VALV = 4 # Valve (P34 VCb) + P37_VALV = 5 # Valve (P37 VCd) + P39_VALV = 6 # Valve (P39 VROd) + P6_VALV = 7 # Valve (P6 VFF) + NUM_OF_FP_VALVES = 8 # Number of valves - # ================================================== Enum Creators: Support ================================================== - def _create_fp_floater_levels(self): - members = { - 'LEVEL_STATE_EMPTY': 0, # Empty level for the FP Floater Level Sensors - 'LEVEL_STATE_LOW': 1, # Low level for the FP Floater Level Sensors - 'LEVEL_STATE_MEDIUM': 2, # Medium level for the FP Floater Level Sensors - 'LEVEL_STATE_HIGH': 3, # High level for the FP Floater Level Sensors - 'LEVEL_STATE_ILLEGAL': 4, # Illegal level for FP Floater Level Sensor (indicates investigation) - 'NUM_OF_LEVEL_STATES': 5, # Number of Level States - } - return unique(DialinEnum('FPFloaterLevels', members)) +FPValveNames._str_list = { + # Official Name : Accepted strings + 'M4_VALV': ['m4'], + 'M12_VALV': ['m12'], + 'P11_VALV': ['p11'], + 'P33_VALV': ['p33'], + 'P34_VALV': ['p34'], + 'P37_VALV': ['p37'], + 'P39_VALV': ['p39'], + 'P6_VALV': ['p6'], + 'NUM_OF_FP_VALVES': [], +} - def _create_fp_pump_attributes(self): - members = { - 'STATE': 0, # State to command attribute for Pumps - 'DUTY_CYCLE': 1, # Duty Cycle attribute for Pumps - 'FB_DUTY_CYCLE': 2, # Feedback Duty Cycle attribute for Pumps - 'SPEED': 3, # Current Speed attribute for pumps - 'TARGET_PRES': 4, # Target Pressure attribute for pumps - 'TARGET_FLOW': 5, # Target Flow attribute for pumps - 'TARGET_DUTY_CYCLE': 6, # Target Duty Cycle attribute for pumps - 'DUTY_CYCLE_PCT': 7, # Duty Cycle Percentage attribute for pumps - 'FB_DUTY_CYCLE_PCT': 8, # Feedback Duty Cycle Percentage attribute for pumps - 'NUM_OF_RO_PUMP_ATTRIBUTES': 9, # Number of pump attributes - } - return unique(DialinEnum('FPPumpAttributes', members)) +@unique +class FPAllPumpNames(DialinEnum): + P12_PUMP_RO = 0 # P12 RO Pump + P40_PUMP_BOOSTER = 1 # P40 Boost Pump + NUM_OF_PUMPS = 2 # Number of pumps +FPAllPumpNames._str_list = { + # Official Name : Accepted strings + 'P12_PUMP_RO': ['p12', 'ro pump'], + 'P40_PUMP_BOOSTER': ['p40', 'boost pump'], + 'NUM_OF_PUMPS': [], +} - def _create_fp_valve_states(self): - members = { - 'VALVE_STATE_CLOSED': 0, # Valve Closed State - 'VALVE_STATE_OPEN': 1, # Valve Open State - } - return unique(DialinEnum('FPValveStates', members)) +# ================================================== Enum Creators: Support ================================================== +@unique +class FPFloaterLevels(DialinEnum): + LEVEL_STATE_EMPTY = 0 # Empty level for the FP Floater Level Sensors + LEVEL_STATE_LOW = 1 # Low level for the FP Floater Level Sensors + LEVEL_STATE_MEDIUM = 2 # Medium level for the FP Floater Level Sensors + LEVEL_STATE_HIGH = 3 # High level for the FP Floater Level Sensors + LEVEL_STATE_ILLEGAL = 4 # Illegal level for FP Floater Level Sensor (indicates investigation) + NUM_OF_LEVEL_STATES = 5 # Number of Level States +FPFloaterLevels._str_list = { + # Official Name : Accepted strings + 'LEVEL_STATE_EMPTY': ['empty'], + 'LEVEL_STATE_LOW': ['low'], + 'LEVEL_STATE_MEDIUM': ['medium'], + 'LEVEL_STATE_HIGH': ['high'], + 'LEVEL_STATE_ILLEGAL': ['illegal'], + 'NUM_OF_LEVEL_STATES': [], +} + + +@unique +class FPPumpAttributes(DialinEnum): + STATE = 0 # State to command attribute for Pumps + DUTY_CYCLE = 1 # Duty Cycle attribute for Pumps + FB_DUTY_CYCLE = 2 # Feedback Duty Cycle attribute for Pumps + SPEED = 3 # Current Speed attribute for pumps + TARGET_PRES = 4 # Target Pressure attribute for pumps + TARGET_FLOW = 5 # Target Flow attribute for pumps + TARGET_DUTY_CYCLE = 6 # Target Duty Cycle attribute for pumps + DUTY_CYCLE_PCT = 7 # Duty Cycle Percentage attribute for pumps + FB_DUTY_CYCLE_PCT = 8 # Feedback Duty Cycle Percentage attribute for pumps + NUM_OF_RO_PUMP_ATTRIBUTES = 9 # Number of pump attributes + +FPPumpAttributes._str_list = { + # Official Name : Accepted strings + 'STATE': [], + 'DUTY_CYCLE': [], + 'FB_DUTY_CYCLE': ['feedback duty cycle'], + 'SPEED': [], + 'TARGET_PRES': ['target pressure'], + 'TARGET_FLOW': [], + 'TARGET_DUTY_CYCLE': [], + 'DUTY_CYCLE_PCT': ['duty cycle percentage'], + 'FB_DUTY_CYCLE_PCT': ['feedback duty cycle percentage'], + 'NUM_OF_RO_PUMP_ATTRIBUTES': [], +} + + +@unique +class FPValveStates(DialinEnum): + VALVE_STATE_CLOSED = 0 # Valve Closed State + VALVE_STATE_OPEN = 1 # Valve Open State + NUM_OF_VALVE_STATES = 2 # Valve Open State + +FPValveStates._str_list = { + # Official Name : Accepted strings + 'VALVE_STATE_CLOSED': ['closed'], + 'VALVE_STATE_OPEN': ['open'], + 'NUM_OF_VALVE_STATES': [], +} + + + # ================================================== Creates a singleton ================================================== -fp_enum_repository = FP_Defs() +class FP_Defs(): -# Attach listener to update function -test_config_change.add_listener(fp_enum_repository.update_enums) + FPOpModes = FPOpModes + FPFaultStates = FPFaultStates + FPServiceStates = FPServiceStates + FPPostStates = FPPostStates + FPStandbyStates = FPStandbyStates + FPPreGenPermeateStates = FPPreGenPermeateStates + FPPreGenPDefStates = FPPreGenPDefStates + FPGenPermeateStates = FPGenPermeateStates + FPGenPermeateDefStates = FPGenPermeateDefStates + FPNotLegalStates = FPNotLegalStates + FPEventList= FPEventList + FPEventDataTypes= FPEventDataTypes -BETA_IOFP_COND_SENSOR_OFFSET = dd_enum_repository.DDConductivitySensorNames.NUM_OF_CONDUCTIVITY_SENSORS.value # Offset to translate Dialin FPTemperaturesNames to DD firmware DD Conductivity Sensors enum -BETA_IOFP_PRES_SENSOR_OFFSET = dd_enum_repository.DDPressureSensorNames.NUM_OF_PRESSURE_SENSORS.value # Offset to translate Dialin FPTemperaturesNames to DD firmware DD Pressure Sensors enum -BETA_IOFP_VALVE_OFFSET = dd_enum_repository.DDValveNames.NUM_OF_DD_VALVES.value # Offset to translate Dialin FPValveNames to DD firmware DD_Valves + FPBoostPumpNames = FPBoostPumpNames + FPConductivitySensorNames = FPConductivitySensorNames + FPRORejectionRatioNames = FPRORejectionRatioNames + FPFlowSensorNames = FPFlowSensorNames + FPFloaterLevelSensorNames = FPFloaterLevelSensorNames + FPPressureSensorNames = FPPressureSensorNames + FPROPumpNames = FPROPumpNames + FPTemperatureSensorNames = FPTemperatureSensorNames + FPValveNames = FPValveNames + FPAllPumpNames = FPAllPumpNames + + FPFloaterLevels = FPFloaterLevels + FPPumpAttributes = FPPumpAttributes + FPValveStates = FPValveStates + +fp_enum_repository = FP_Defs()