########################################################################### # # Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # # @file dd_defs.py # # @author (last) Zoltan Miskolci # @date (last) 25-Feb-2026 # @author (original) Peter Lucia # @date (original) 22-Jun-2021 # ############################################################################ # Module import from enum import unique # Project imports from leahi_dialin.common.disp_defs import AcidTypes, BicarbTypes from leahi_dialin.common.fp_defs import FPPressureSensorNames from leahi_dialin.common.generic_defs import RecordsBaseEnum, DataTypes from leahi_dialin.utils.enums import DialinEnum # ================================================== Enum Creators: Operations Lvl 1 ================================================== @unique class DDOpModes(DialinEnum): MODE_FAUL = 0 # Fault mode MODE_SERV = 1 # Service mode MODE_INIT = 2 # Initialization & POST mode MODE_STAN = 3 # Standby mode MODE_PREG = 4 # Pre-generate Dialysate Mode MODE_GEND = 5 # Generate Dialysate Mode MODE_POSG = 6 # Post-generate Dialysate Mode MODE_HEAT = 7 # Heat Disinfect Mode MODE_HCOL = 8 # Cooling Mode MODE_ROPS = 9 # RO Permeate Sample Mode MODE_NLEG = 10 # Not legal - an illegal mode transition occurred NUM_OF_DD_MODES = 11 # Number of Modes for the DD DDOpModes._str_list = { # Official Name : Accepted strings 'MODE_FAUL': ['fault'], 'MODE_SERV': ['service'], 'MODE_INIT': ['initialization'], 'MODE_STAN': ['standby'], 'MODE_PREG': ['pre-gen dialysate', 'pre-generate dialysate'], 'MODE_GEND': ['generate dialysate'], 'MODE_POSG': ['post-gen dialysate', 'post-generate dialysate'], 'MODE_HEAT': ['heat disinfect', 'disinfect', 'heating'], 'MODE_HCOL': ['cooling'], 'MODE_ROPS': ['sampling', 'ro sampling', 'ro permeate sampling'], 'MODE_NLEG': ['not legal'], 'NUM_OF_DD_MODES': [], } # ================================================== Enum Creators: Operations Lvl 2 ================================================== # DDOpModes.MODE_FAUL sub states @unique class DDFaultStates(DialinEnum): DD_FAULT_STATE_START = 0 # DD Fault Start State DD_FAULT_DEENERGIZED_STATE = 1 # DD Fault De-energized State DD_FAULT_ENERGIZED_STATE = 2 # DD Fault Energized State NUM_OF_FP_FAULT_STATES = 3 # Number of Fault Mode State DDFaultStates._str_list = { # Official Name : Accepted strings 'DD_FAULT_STATE_START': ['fault start'], 'DD_FAULT_DEENERGIZED_STATE': ['fault deenergized', 'deenergized'], 'DD_FAULT_ENERGIZED_STATE': ['fault energized', 'energized'], 'NUM_OF_FP_FAULT_STATES': [], } # DDOpModes.MODE_SERV sub states @unique class DDServiceStates(DialinEnum): DD_SERVICE_STATE_START = 0 # Start service mode state NUM_OF_DD_SERVICE_STATES = 1 # Number of service mode states DDServiceStates._str_list = { # Official Name : Accepted strings 'DD_SERVICE_STATE_START': ['start', 'service start'], 'NUM_OF_DD_SERVICE_STATES': [], } # DDOpModes.MODE_INIT sub states @unique class DDInitStates(DialinEnum): DD_POST_STATE_START = 0 # Post Generate Dialysate Start State DD_POST_STATE_FW_COMPATIBILITY = 1 # Firmware Compatibility State DD_POST_STATE_FW_INTEGRITY = 2 # Firmware Integrity State DD_POST_STATE_FPGA = 3 # FPGA State DD_POST_STATE_NVDATAMGMT = 4 # Non-volatile Data Management State DD_POST_STATE_TEMPERATURE_SENSORS = 5 # Temperature Sensors State DD_POST_STATE_PRESSURES = 6 # Pressure Sensors State DD_POST_STATE_DIALYSATE_PUMPS = 7 # Dialysate Pumps State DD_POST_STATE_CONCENTRATE_PUMPS = 8 # Concentrate Pumps State DD_POST_STATE_CONDUCTIVITY_SENSORS = 9 # Conductivity Sensors State DD_POST_STATE_WATCHDOG = 10 # Watchdog State DD_POST_STATE_SAFETY_SHUTDOWN = 11 # Safety Shutdown State DD_POST_STATE_COMPLETED = 12 # Post Generate Dialysate Completed State DD_POST_STATE_FAILED = 13 # Post Generate Dialysate Fail State NUM_OF_DD_POST_STATES = 14 # Number of Post Generate Dialysate States DDInitStates._str_list = { # Official Name : Accepted strings 'DD_POST_STATE_START': ['start'], 'DD_POST_STATE_FW_COMPATIBILITY': ['fw compatibility'], 'DD_POST_STATE_FW_INTEGRITY': ['fw integrity'], 'DD_POST_STATE_FPGA': ['fpga'], 'DD_POST_STATE_NVDATAMGMT': ['nv data management', 'data management'], 'DD_POST_STATE_TEMPERATURE_SENSORS': ['temperature sensors check'], 'DD_POST_STATE_PRESSURES': ['pressures check'], 'DD_POST_STATE_DIALYSATE_PUMPS': ['dialysate pumps check'], 'DD_POST_STATE_CONCENTRATE_PUMPS': ['concentrate pumps check'], 'DD_POST_STATE_CONDUCTIVITY_SENSORS': ['conductivity sensors check'], 'DD_POST_STATE_WATCHDOG': ['watchdog'], 'DD_POST_STATE_SAFETY_SHUTDOWN': ['safety shutdown'], 'DD_POST_STATE_COMPLETED': ['completed', 'done'], 'DD_POST_STATE_FAILED': ['failed'], 'NUM_OF_DD_POST_STATES': [], } # DDOpModes.MODE_STAN sub states @unique class DDStandbyStates(DialinEnum): DD_STANDBY_MODE_STATE_IDLE = 0 # Idle standby mode state DD_STANDBY_MODE_STATE_PAUSE = 1 # Pause state NUM_OF_DD_STANDBY_MODE_STATES = 2 # Number of standby mode states DDStandbyStates._str_list = { # Official Name : Accepted strings 'DD_STANDBY_MODE_STATE_IDLE': ['idle'], 'DD_STANDBY_MODE_STATE_PAUSE': ['paused'], 'NUM_OF_DD_STANDBY_MODE_STATES': [], } # DDOpModes.MODE_PREG sub states @unique class DDPreGenDialysateStates(DialinEnum): DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK = 0 # DD Pre-Gen Dialysate hyrochamber fill check DD_PRE_GEN_WET_SELF_TEST = 1 # DD Pre-Gen Wet Self Test DD_PRE_GEN_DRY_BICART_INITIAL_FILL = 2 # DD Pre-Gen DryBicart Initial Fill DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND = 3 # DD Pre-Gen Dialysate Wait for Gen Dialysate state transition NUM_OF_DD_PRE_GEN_DIALYSATE_STATES = 4 # Number of Pre-Gen Dialysate mode states DDPreGenDialysateStates._str_list = { # Official Name : Accepted strings 'DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK': ['fill check', 'hydro chamber fill check'], 'DD_PRE_GEN_WET_SELF_TEST': ['self test', 'wet self test'], 'DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND': ['wait for state transition'], 'NUM_OF_DD_PRE_GEN_DIALYSATE_STATES': [], } # DDOpModes.MODE_GEND sub states @unique class DDGenDialysateModeStates(DialinEnum): DD_GEND_STATE_START = 0 # Gen dialysate start state DD_GEND_DIALYSATE_BYPASS_STATE = 1 # Gen dialysate - Bypass dialysate state DD_GEND_DIALYSATE_DELIVERY_STATE = 2 # Gen dialysate - deliver dialysate state DD_GEND_ISOLATED_UF_STATE = 3 # Gen dialysate - Isolated ultrafiltration state DD_GEND_SPENT_CHAMBER_FILL_STATE = 4 # Gen dialysate - spent chamber fill state DD_GEND_BICARB_CHAMBER_FILL_STATE = 5 # Gen dialysate - bicarb chamber fill state DD_GEND_DIALYSATE_DELIVERY_PAUSE = 6 # Gen dialysate - dialysate delivery pause state NUM_OF_DD_GEND_MODE_STATES = 7 # Number of gen dialysate states DDGenDialysateModeStates._str_list = { # Official Name : Accepted strings 'DD_GEND_STATE_START': ['start'], 'DD_GEND_DIALYSATE_BYPASS_STATE': ['dialysate delivery bypass', 'bypass'], 'DD_GEND_DIALYSATE_DELIVERY_STATE': ['dialysate delivery'], 'DD_GEND_ISOLATED_UF_STATE': ['uf', 'ultrafiltration'], 'DD_GEND_SPENT_CHAMBER_FILL_STATE': ['spent chamber fill'], 'DD_GEND_BICARB_CHAMBER_FILL_STATE': ['bicarb chamber fill'], 'DD_GEND_DIALYSATE_DELIVERY_PAUSE': ['dialysate delivery pause', 'pause'], 'NUM_OF_DD_GEND_MODE_STATES': [], } # DDOpModes.MODE_POSG sub states @unique class DDPostGenDialysateStates(DialinEnum): DD_POST_GEN_DIALYSATE_STATE_START = 0 # DD Post-Gen Dialysate state start DD_POST_GEN_DIALYSATE_STATE_COMPLETE = 1 # DD Post-Gen Dialysate complete state NUM_OF_DD_POST_GEN_DIALYSATE_STATES = 2 # Number of Post-Gen Dialysate mode states DDPostGenDialysateStates._str_list = { # Official Name : Accepted strings 'DD_POST_GEN_DIALYSATE_STATE_START': ['start'], 'DD_POST_GEN_DIALYSATE_STATE_COMPLETE': ['complete', 'done'], 'NUM_OF_DD_POST_GEN_DIALYSATE_STATES': [], } # DDOpModes.MODE_HEAT sub states @unique class DDHeatDisinfectStates(DialinEnum): DD_HEAT_DISINFECT_STATE_START = 0 # Heat disinfect, start mode state DD_HEAT_DISINFECT_STATE_COMPLETE = 1 # Heat disinfect, complete state NUM_OF_FP_SERV_STATES = 2 # Number of heat disinfect mode states DDHeatDisinfectStates._str_list = { # Official Name : Accepted strings 'DD_HEAT_DISINFECT_STATE_START': ['start'], 'DD_HEAT_DISINFECT_STATE_COMPLETE': ['done', 'complete'], 'NUM_OF_DD_HEAT_DISINFECT_STATES': [] } # DDOpModes.MODE_HCOL sub states @unique class DDHeaterCoolingStates(DialinEnum): NUM_OF_DD_HEAT_COOL_STATES = 0 # Number of Heater Cooling states DDHeaterCoolingStates._str_list = { # Official Name : Accepted strings 'NUM_OF_DD_HEAT_COOL_STATES': [], } # DDOpModes.MODE_ROPS sub states @unique class DDROPermeateStates(DialinEnum): NUM_OF_RO_PERMEATE_STATES = 0 # Number of RO Permeate states DDROPermeateStates._str_list = { # Official Name : Accepted strings 'NUM_OF_RO_PERMEATE_STATES': [], } # DDOpModes.MODE_NLEG sub states @unique class DDNotLegalStates(DialinEnum): NUM_OF_NOT_LEGAL_STATES = 0 # Number of Not Legal states DDNotLegalStates._str_list = { # Official Name : Accepted strings 'NUM_OF_NOT_LEGAL_STATES': [], } # ================================================== Enum Creators: Operations Lvl 3 ================================================== # DDFaultStates. sub states @unique class DDFaultNVDataStates(DialinEnum): DD_NVDATA_STATE_START = 0 # DD Non-Volatile Data Management start state DD_NVDATA_STATE_RUN_NV_POSTS = 1 # DD Non-Volatile Data Management run RTC and NV data management posts DD_NVDATA_STATE_COMPLETE = 2 # DD Non-Volatile Data Management Complete NUM_OF_DD_NVDATA_STATES = 3 # Number of fault mode NV Data management states DDFaultNVDataStates._str_list = { # Official Name : Accepted strings 'DD_NVDATA_STATE_START': ['start'], 'DD_NVDATA_STATE_RUN_NV_POSTS': ['running', 'run nv posts'], 'DD_NVDATA_STATE_COMPLETE': ['complete', 'done'], 'NUM_OF_DD_INIT_NVDATA_STATES': [], } # DDStandbyStates. sub states @unique class DDStanDisinfectStates(DialinEnum): DD_DISINFECT_FLUSH_STATE = 0 # DD disinfect flush DD_DISINFECT_HEAT_STATE = 1 # DD disinfect heat DD_DISINFECT_RO_PERMEATE_SAMPLE_STATE = 2 # DD disinfect RO permeate sample DD_DISINFECT_NOT_RUNNING_STATE = 3 # DD disinfect not running NUM_OF_DD_DISINFECT_STATES = 4 # Number of DD disinfect states DDStanDisinfectStates._str_list = { # Official Name : Accepted strings 'DD_DISINFECT_FLUSH_STATE': ['flush'], 'DD_DISINFECT_HEAT_STATE': ['heat', 'heating'], 'DD_DISINFECT_RO_PERMEATE_SAMPLE_STATE': ['ro sample', 'ro permeate sample'], 'DD_DISINFECT_NOT_RUNNING_STATE': ['not running', 'on hold'], 'NUM_OF_DD_DISINFECT_STATES': [], } # DDPreGenDialysateStates.DD_PRE_GEN_WET_SELF_TEST sub states @unique class DDPreGenWetSelfTestStates(DialinEnum): DD_WET_SELF_TEST_START = 0 # DD Wet Slef test Start DD_WET_SELF_TEST_NEGATIVE_DEAERATION_PRES_CHECK = 1 # DD Wet Self Test Negative Deaeration Pressure check DD_WET_SELF_TEST_POSITIVE_DEAERATION_PRES_CHECK = 2 # DD Wet Self Test Postive Deaeration Pressure check DD_WET_SELF_TEST_SPENT_DIAL_PRES_CHECK = 3 # DD Wet Self Test Spent Dialysate Pressure check DD_WET_SELF_TEST_BAL_CHAMBER_VALV_LEAK_CHECK = 4 # DD Wet Self Test Balancing Chamber Valve Leak check DD_WET_SELF_TEST_DIAL_FLOW_PATH_LEAK_CHECK = 5 # DD Wet Self Test Dialysate flow path leak check DD_WET_SELF_TEST_UF_PRES_DROP_CHECK = 6 # DD Wet Self Test Ultrafilter pressure drop check DD_WET_SELF_TEST_BLOOD_LEAK_CHECK = 7 # DD Wet Self Test Ultrafilter pressure drop check DD_WET_SELF_TEST_BAL_CHAMBER_MEMBRANE_INTEGRITY_CHECK = 8 # DD Wet Self Test Balancing Chamber Membrane Integrity check DD_WET_SELF_TEST_LEVEL_SENSOR_CHECK = 9 # DD Wet Self Test Level Sensor check DD_WET_SELF_TEST_PAUSE = 10 # DD Wet Self Test Pause state NUM_OF_DD_PRE_GEN_WET_SELF_TEST_STATES = 11 # Number of Wet Self Test states DDPreGenWetSelfTestStates._str_list = { # Official Name : Accepted strings 'DD_WET_SELF_TEST_START': [ 'start', 'test start' ], 'DD_WET_SELF_TEST_NEGATIVE_DEAERATION_PRES_CHECK': [ 'negative check' ], 'DD_WET_SELF_TEST_POSITIVE_DEAERATION_PRES_CHECK': [ 'positive check' ], 'DD_WET_SELF_TEST_SPENT_DIAL_PRES_CHECK': [ 'spent check' ], 'DD_WET_SELF_TEST_BAL_CHAMBER_VALV_LEAK_CHECK': [ 'bc valve leak check' ], 'DD_WET_SELF_TEST_DIAL_FLOW_PATH_LEAK_CHECK': [ 'flow path leak check' ], 'DD_WET_SELF_TEST_UF_PRES_DROP_CHECK': [ 'uf check', 'ultrafiltration check' ], 'DD_WET_SELF_TEST_BLOOD_LEAK_CHECK': [ 'blood leak check' ], 'DD_WET_SELF_TEST_BAL_CHAMBER_MEMBRANE_INTEGRITY_CHECK': [ 'bc membrane integrity check' ], 'DD_WET_SELF_TEST_LEVEL_SENSOR_CHECK': [ 'level sensor check' ], 'DD_WET_SELF_TEST_PAUSE': [ 'pause', 'test pause' ], 'NUM_OF_DD_PRE_GEN_WET_SELF_TEST_STATES': [ ] } # ================================================== Enum Creators: Events ================================================== @unique class DDEventList(DialinEnum): DD_EVENT_STARTUP = 0 # DD startup event DD_EVENT_OP_MODE_CHANGE = 1 # DD Op mode change event DD_EVENT_SUB_MODE_CHANGE = 2 # DD Op sub-mode change event DD_EVENT_OPERATION_STATUS = 3 # DD operation status event DD_EVENT_D6_LEVL_CHANGE = 4 # DD floater level change event DD_EVENT_D63_LEVL_CHANGE = 5 # DD bicarb upper level change event DD_EVENT_D98_LEVL_CHANGE = 6 # DD bicarb lower level change event DD_EVENT_D46_LEVL_CHANGE = 7 # DD spent dialysate air seperation level change event DD_EVENT_TD_COMMUNICATION_LOSS = 8 # DD TD communication loss DD_EVENT_TEMPERATURE_DRIFT = 9 # DD dialysate temperature drift DD_EVENT_BLOOD_LEAK_ZEROING_REQUEST = 10 # DD blood leak zeroing request DD_EVENT_BLOOD_LEAK_ZEROING_REQUIRED = 11 # DD blood leak zeroing required DD_EVENT_BLOOD_LEAK_NUM_OF_SET_POINT_CHECK_FAILURES = 12 # DD blood leak number of setpoint check failures DD_EVENT_CPU_RAM_ERROR_STATUS = 13 # DD CPU RAM error DD_EVENT_BLOOD_LEAK_SELF_TEST_RESULT = 14 # DD blood leak self test result DD_EVENT_BC_SWITCH_ONLY_MODE_CHANGE = 15 # DD Balancing Chamber Switching Only status event DD_EVENT_BC_FILL_STATE_CHANGE = 16 # Balancing chamber state switch event DD_EVENT_HEATER_STATE_CHANGE = 17 # DD heater state change event DD_EVENT_DRY_BICART_STATE_CHANGE = 18 # DD Dry Bicart State change event NUM_OF_DD_EVENT_IDS = 19 # Total number of DD events DDEventList._str_list = { # Official Name : Accepted strings 'DD_EVENT_STARTUP': ['startup'], 'DD_EVENT_OP_MODE_CHANGE': ['op mode change', 'operation mode change'], 'DD_EVENT_SUB_MODE_CHANGE': ['sub mode change'], 'DD_EVENT_OPERATION_STATUS': ['status', 'operation status'], 'DD_EVENT_D6_LEVL_CHANGE': ['d6 level change'], 'DD_EVENT_D63_LEVL_CHANGE': ['d63 level change'], 'DD_EVENT_D46_LEVL_CHANGE': ['d46 level change'], 'DD_EVENT_TD_COMMUNICATION_LOSS': ['td communication loss'], 'DD_EVENT_TEMPERATURE_DRIFT': ['temperature drift'], 'DD_EVENT_BLOOD_LEAK_ZEROING_REQUEST': ['blood leak zeroing request'], 'DD_EVENT_BLOOD_LEAK_ZEROING_REQUIRED': ['blood leak zeroing required'], 'DD_EVENT_BLOOD_LEAK_NUM_OF_SET_POINT_CHECK_FAILURES': ['blood leak check failed'], 'DD_EVENT_BLOOD_LEAK_SELF_TEST_RESULT': ['blood leak self test'], 'DD_EVENT_CPU_RAM_ERROR_STATUS': ['cpu ram error status', 'cpu error status', 'ram error status', 'memory error status'], 'DD_EVENT_BC_SWITCH_ONLY_MODE_CHANGE': ['bc switch only change'], 'DD_EVENT_BC_FILL_STATE_CHANGE': ['bc state change'], 'DD_EVENT_HEATER_STATE_CHANGE': ['heater state change'], 'DD_EVENT_DRY_BICART_STATE_CHANGE': ['dry bicart state change'], 'NUM_OF_DD_EVENT_IDS': [], } # ================================================== Enum Creators: Names ================================================== @unique class DDConcentratePumpNames(DialinEnum): D11_CP1_ACID = 0 # Acid Concentrate Pump D10_CP2_BICARB = 1 # Bicarbonate Concentrate Pump D76_UF = 2 # Ultrafiltration Concentrate Pump NUM_OF_CONCENTRATE_PUMPS = 3 # Number of Concentrate Pumps DDConcentratePumpNames._str_list = { # Official Name : Accepted strings 'D11_CP1_ACID': ['d11', 'acid', 'acid pump'], 'D10_CP2_BICARB': ['d10', 'bicarb', 'bicarb pump'], 'D76_UF': ['d76', 'uf pump', 'ultrafiltration pump'], 'NUM_OF_CONCENTRATE_PUMPS': [], } @unique class DDConductivitySensorNames(DialinEnum): D17_COND = 0 # Closed Loop Control of Dosing for D74 Conductivity Sensor D27_COND = 1 # Closed Loop Control of Dosing for D29 Conductivity Sensor D29_COND = 2 # Water, Bicarbonate, and Acid Collective Conductivity Sensor D43_COND = 3 # Self Test Conductivity Sensor (not used for dialysate conductivity) D74_COND = 4 # Water and Bicarbonate Collective Conductivity Sensor NUM_OF_CONDUCTIVITY_SENSORS = 5 # Number of Conductivity Sensors DDConductivitySensorNames._str_list = { # Official Name : Accepted strings 'D17_COND': ['d17'], 'D27_COND': ['d27'], 'D29_COND': ['d29'], 'D43_COND': ['d43'], 'D74_COND': ['d74'], 'NUM_OF_CONDUCTIVITY_SENSORS': [] } @unique class DDDialysatePumpNames(DialinEnum): D12_PUMP = 0 # Fresh Dialysate Pump D48_PUMP = 1 # Spent Dialysate Pump NUM_OF_DIALYSATE_PUMPS = 2 # Number of Dialysate Pumps DDDialysatePumpNames._str_list = { # Official Name : Accepted strings 'D12_PUMP': ['d12'], 'D48_PUMP': ['d48'], 'NUM_OF_DIALYSATE_PUMPS': [], } @unique class DDHeaterNames(DialinEnum): D5_HEAT = 0 # Primary heater D45_HEAT = 1 # Trimmer heater NUM_OF_DD_HEATERS = 2 # Number of Heaters DDHeaterNames._str_list = { # Official Name : Accepted strings 'D5_HEAT': ['d5'], 'D45_HEAT': ['d45'], 'NUM_OF_DD_HEATERS': [], } @unique class DDLevelSensorNames(DialinEnum): D46_LEVEL = 0 # Spent dialysate air separation chamber level low or high status D63_LEVEL = 1 # bicarb lower conductivity level sensor low or high status D98_LEVEL = 2 # bicarb upper conductivity level sensor low or high status D6_LEVEL = 3 # floater switch low, medium and high status NUM_OF_LEVELS = 4 # Number of Level Sensors DDLevelSensorNames._str_list = { # Official Name : Accepted strings 'D46_LEVEL': ['d46'], 'D63_LEVEL': ['d63'], 'D98_LEVEL': ['d98'], 'D6_LEVEL': ['d6'], 'NUM_OF_LEVELS': [], } @unique class DDPistonPumpNames(DialinEnum): ACID = 0 # Acid piston pump BICARB = 1 # Bicarbonate piston pump UF = 2 # Ultrafiltration piston pump NUM_OF_PISTON_PUMPS = 3 # Number of piston pumps DDPistonPumpNames._str_list = { # Official Name : Accepted strings 'ACID': ['d11', 'acid pump'], 'BICARB': ['d10', 'bicarb pump'], 'UF': ['d76', 'uf pump', 'ultrafiltration pump'], 'NUM_OF_PISTON_PUMPS': [], } @unique class DDSubstitutionPumpNames(DialinEnum): D92_PUMP = 0 # HDF Substitution pump NUM_OF_SUB_PUMPS = 1 # Number of substituion pumps DDSubstitutionPumpNames._str_list = { # Official Name : Accepted strings 'D92_PUMP': ['d92', 'sub pump'], 'NUM_OF_SUB_PUMPS': [], } @unique class DDPressureSensorNames(DialinEnum): D9_PRES = 0 # Hydraulics outlet pressure (PHo/Pn) D66_PRES = 1 # Dry Bicarb pressure (PDB/PCb) 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 DDPressureSensorNames._str_list = { # Official Name : Accepted strings 'D9_PRES': ['d9'], 'D66_PRES': ['d66'], 'D51_PRES': ['d51'], 'D18_PRES': ['d18'], 'D41_PRES': ['d41'], 'D87_PRES': ['d87'], 'NUM_OF_PRESSURE_SENSORS': [], } class DDTemperatureSensorNames(DialinEnum): D1_TEMP = 0 # Heat exchanger Inlet temperature sensor D78_TEMP = 1 # Heat exchanger Outlet temperature sensor D4_TEMP = 2 # Hydraulics primary heater temperature sensor D50_TEMP = 3 # Trimmer heater temperature sensor D99_TEMP = 4 # D98(D99) Conductivity sensor temperature value BRD_TEMP = 5 # Barometric temperature sensor D16_TEMP = 6 # D16(D17) Conductivity sensor temperature value D28_TEMP = 7 # D28(D27) Conductivity sensor temperature value D30_TEMP = 8 # D30(D29) Conductivity sensor temperature value D44_TEMP = 9 # D44(D43) Conductivity sensor temperature value D75_TEMP = 10 # D75(D74) Conductivity sensor temperature value D4_AVG_TEMP = 11 # D4 Filtered value D50_AVG_TEMP = 12 # D50 Filtered value D99_AVG_TEMP = 13 # D99 Filtered value D28_AVG_TEMP = 14 # D28 Filtered value D30_AVG_TEMP = 15 # D30 Filtered value D78_AVG_TEMP = 16 # D78 Filtered value D1_AVG_TEMP = 17 # D1 Filtered value D9_TEMP = 18 # D9 Pressure sensor temperature value D66_TEMP = 19 # D66 Pressure sensor temperature value D51_TEMP = 20 # D51 Pressure sensor temperature value D18_TEMP = 21 # D18 Pressure sensor temperature value D41_TEMP = 22 # D41 Pressure sensor temperature value D87_TEMP = 23 # D87 Pressure sensor temperature value NUM_OF_TEMP_SENSORS = 24 # Number of Temperature Sensors # Aliases FIRST_PRESSURE_SENSOR = D9_TEMP LAST_PRESSURE_SENSOR = D87_TEMP FIRST_CONDUCTIVITY_SENSOR = D16_TEMP LAST_CONDUCTIVITY_SENSOR = D75_TEMP FIRST_AVERAGE_SENSOR = D4_AVG_TEMP LAST_AVERAGE_SENSOR = D78_AVG_TEMP DDTemperatureSensorNames._str_list = { # Official Name : Accepted strings 'D1_TEMP': ['d1'], 'D78_TEMP': ['d78'], 'D4_TEMP': ['d4'], 'D50_TEMP': ['d50'], 'D99_TEMP': ['d90'], 'BRD_TEMP': ['brd', 'board'], 'D16_TEMP': ['d16'], 'D28_TEMP': ['d28'], 'D30_TEMP': ['d30'], 'D44_TEMP': ['d44'], 'D75_TEMP': ['d75'], 'D4_AVG_TEMP': ['d4 avg', 'd4 average'], 'D50_AVG_TEMP': ['d50 avg', 'd50 average'], 'D99_AVG_TEMP': ['d99 avg', 'd99 average'], 'D28_AVG_TEMP': ['d28 avg', 'd28 average'], 'D30_AVG_TEMP': ['d39 avg', 'd39 average'], 'D1_AVG_TEMP': ['d1 avg', 'd1 average'], 'D9_TEMP': ['d9'], 'D66_TEMP': ['d66'], 'D51_TEMP': ['d51'], 'D18_TEMP': ['d18'], 'D41_TEMP': ['d41'], 'D87_TEMP': ['d87'], 'NUM_OF_TEMP_SENSORS': [], } @unique class DDValveNames(DialinEnum): D14_VALV = 0 # Valve Hydraulics Outlet (D14) D52_VALV = 1 # Valve Thermal Disinfect (D52) D8_VALV = 2 # Valve Hydraulics Bypass (D8) D54_VALV = 3 # Valve Rinse Port (D54) D53_VALV = 4 # Valve Drain (D53) D34_VALV = 5 # Valve Dialyzer Bypass (D34) D64_VALV = 6 # Valve Purge 1 (D64) D31_VALV = 7 # Valve Pressure Test (D31) D65_VALV = 8 # Valve DryBcarb Inlet (D65) D35_VALV = 9 # Valve Dialyzer Inlet (D35) D40_VALV = 10 # Valve Dialyzer Outlet (D40) D47_VALV = 11 # Valve Dialysate Out Purge 2 (D47) D3_VALV = 12 # Valve Hydraulics Inlet (D3) D80_VALV = 13 # Valve Dry Bicarb (D80) D81_VALV = 14 # Valve De-scaler (D81) D85_VALV = 15 # Valve De-scaler (D85) D23_VALV = 16 # Balancing chamber Valve 1 (D23) D19_VALV = 17 # Balancing chamber Valve 2 (D19) D25_VALV = 18 # Balancing chamber Valve 3 (D25) D21_VALV = 19 # Balancing chamber Valve 4 (D21) D24_VALV = 20 # Balancing chamber Valve 5 (D24) D20_VALV = 21 # Balancing chamber Valve 6 (D20) D26_VALV = 22 # Balancing chamber Valve 7 (D26) D22_VALV = 23 # Balancing chamber Valve 8 (D22) D88_D79_VALV = 24 # D88 Valve (2.0+) or D79 pump valve (1.0-1.9) mapped to Spare Valve 0 D83_VALV = 25 # D83 De-scaler Valve mapped to Spare Valve 1 D91_VALV = 26 # D91 De-scaler Valve mapped to Spare Valve 2 D104_VALV = 27 # D104 Valve mapped to Spare Valve 3 D95_VALV = 28 # D95 Valve mapped to Spare Valve 4 SPARE5_VALV = 29 # Spare Valve 5 D100_VALV = 30 # D100 De-scaler Valve mapped to Spare Valve 6 SPARE7_VALV = 31 # Spare Valve 7 NUM_OF_DD_VALVES = 32 # Number of Valves for the DD DDValveNames._str_list = { # Official Name : Accepted strings 'D14_VALV': ['d14'], 'D52_VALV': ['d52'], 'D8_VALV': ['d8'], 'D54_VALV': ['d54'], 'D53_VALV': ['d53'], 'D34_VALV': ['d34'], 'D64_VALV': ['d64'], 'D31_VALV': ['d31'], 'D65_VALV': ['d65'], 'D35_VALV': ['d35'], 'D40_VALV': ['d40'], 'D47_VALV': ['d47'], 'D3_VALV': ['d3'], 'D80_VALV': ['d80'], 'D81_VALV': ['d81'], 'D85_VALV': ['d85'], 'D23_VALV': ['d23'], 'D19_VALV': ['d19'], 'D25_VALV': ['d25'], 'D21_VALV': ['d21'], 'D24_VALV': ['d24'], 'D20_VALV': ['d20'], 'D26_VALV': ['d26'], 'D22_VALV': ['d22'], 'D88_D79_VALV': ['d79', 'd79_valv', 'd79_pmp_valv', 'd88', 'd88_valv'], 'D83_VALV': ['d83'], 'D91_VALV': ['d91'], 'D104_VALV': ['d104'], 'D95_VALV': ['d95'], 'SPARE5_VALV': ['spare5'], 'D100_VALV': ['d100'], 'SPARE7_VALV': ['spare7'], 'NUM_OF_DD_VALVES': [], } @unique class DDMonitoredVoltages(DialinEnum): MONITORED_LINE_1_2V = 0 # Processor voltage (1.2V) MONITORED_LINE_3_3V = 1 # Logic voltage (3.3V) MONITORED_LINE_5V_LOGIC = 2 # Logic voltage (5V) MONITORED_LINE_24V_1 = 3 # Actuators voltage (24V) MONITORED_LINE_24V_2 = 4 # Actuators regen voltage (24V) MONITORED_LINE_FPGA_VCC_V = 5 # FPGA Vcc (3V) MONITORED_LINE_FPGA_AUX_V = 6 # FPGA Vaux (3V) MONITORED_LINE_FPGA_PVN_V = 7 # FPGA Vpvn (1V) FPGA_AC_DC_POWER_SUPPY_VOLTAGE = 8 # FPGA power supply voltage, not-monitored FPGA_AC_DC_POWER_SUPPY_CURRENT = 9 # FPGA power supply current, not-monitored FPGA_AC_HEATER_VOLTAGE = 10 # FPGA heater voltage, not-monitored FPGA_AC_HEATER_CURRENT = 11 # FPGA heater current, not-monitored NUM_OF_MONITORED_VOLTAGE_LINES = 12 # Number of TD operation modes DDMonitoredVoltages._str_list = { # Official Name : Accepted strings 'MONITORED_LINE_1_2V': ['1.2v'], 'MONITORED_LINE_3_3V': ['3.3v'], 'MONITORED_LINE_5V_LOGIC': ['5v'], 'MONITORED_LINE_24V_1': ['24v line 1'], 'MONITORED_LINE_24V_2': ['24v line 1'], 'MONITORED_LINE_FPGA_VCC_V': ['fpga vcc'], 'MONITORED_LINE_FPGA_AUX_V': ['fpga aux'], 'MONITORED_LINE_FPGA_PVN_V': ['fpga pvn'], 'FPGA_AC_DC_POWER_SUPPY_VOLTAGE': ['power supply voltage'], 'FPGA_AC_DC_POWER_SUPPY_CURRENT': ['power supply current'], 'FPGA_AC_HEATER_VOLTAGE':['ac heater voltage'], 'FPGA_AC_HEATER_CURRENT':['ac heater current'], 'NUM_OF_MONITORED_VOLTAGE_LINES': [], } # ================================================== Enum Creators: Support ================================================== @unique class DDBalancingChamberStates(DialinEnum): BAL_CHAMBER_STATE_START = 0 # Initial state of balancing chamber BAL_CHAMBER_STATE1_FILL_START = 1 # Balancing chamber state 1 fill start state BAL_CHAMBER_STATE1_BICARB_ACID_DOSING_CNTRL = 2 # Balancing Chamber state 1 Bicarb and acid dosing control state BAL_CHAMBER_STATE1_FILL_END = 3 # Balancing Chamber state 1 fill end state BAL_CHAMBER_STATE2_FILL_START = 4 # Balancing chamber state 2 fill start state BAL_CHAMBER_STATE2_BICARB_ACID_DOSING_CNTRL = 5 # Balancing Chamber state 2 Bicarb and acid dosing control state BAL_CHAMBER_STATE2_FILL_END = 6 # Balancing Chamber state 2 fill end state NUM_OF_BAL_CHAMBER_EXEC_STATES = 7 # Number of balancing chamber states DDBalancingChamberStates._str_list = { # Official Name : Accepted strings 'BAL_CHAMBER_STATE_START': ['start'], 'BAL_CHAMBER_STATE1_FILL_START': ['state 1 fill start'], 'BAL_CHAMBER_STATE1_BICARB_ACID_DOSING_CNTRL': ['state 1 bicarb acid dosing control', 'state 1 dosing control'], 'BAL_CHAMBER_STATE1_FILL_END': ['state 1 fill end'], 'BAL_CHAMBER_STATE2_FILL_START': ['state 2 fill start'], 'BAL_CHAMBER_STATE2_BICARB_ACID_DOSING_CNTRL': ['state 2 bicarb acid dosing control', 'state 2 dosing control'], 'BAL_CHAMBER_STATE2_FILL_END': ['state 2 fill end'], 'NUM_OF_BAL_CHAMBER_EXEC_STATES': [], } @unique class DDBalancingChamberSwitchStates(DialinEnum): BAL_CHAMBER_SW_STATE1 = 0 # Balancing chamber switching state 1 (V2,V5 and V3, V8 open, rest closed) BAL_CHAMBER_SW_STATE2 = 1 # Balancing chamber switching state 2 ( V1,V6 and V4, V7 open, rest closed) NUM_OF_BAL_CHAMBER_SW = 2 # Number of balancing chamber states DDBalancingChamberSwitchStates._str_list = { # Official Name : Accepted strings 'BAL_CHAMBER_SW_STATE1': ['state 1'], 'BAL_CHAMBER_SW_STATE2': ['state 2'], 'NUM_OF_BAL_CHAMBER_SW': [], } @unique class DDBicarbChFillExecStates(DialinEnum): BICARB_CHAMBER_START_STATE = 0 # Initial state of Chamber F fill BICARB_CARTRIDGE_FILL_WATER_START_STATE = 1 # Dry bicart fill water start state while dialysate delivery BICARB_CARTRIDGE_FILL_WATER_END_STATE = 2 # Dry bicart fill water end state while dialysate delivery BICARB_CHAMBER_CHECK_LEVEL_STATE = 3 # Bicarb Chamber check level state BICARB_CHAMBER_FILL_STATE = 4 # Bicarb Chamber fill start state BICARB_CHAMBER_PRESSURE_CHECK_STATE = 5 # Bicarb Chamber pressure check start state BICARB_SUPPLY_VENT_START_STATE = 6 # Bicarb Chamber supply vent cartridge and Chamber F start state BICARB_SUPPLY_VENT_END_STATE = 7 # Bicarb Chamber supply vent cartridge and Chamber F end state NUM_OF_BICARB_CHAMBER_FILL_EXEC_STATES = 8 # Number of Bicarb chamber fill state DDBicarbChFillExecStates._str_list = { # Official Name : Accepted strings 'BICARB_CHAMBER_START_STATE': ['start'], 'BICARB_CARTRIDGE_FILL_WATER_START_STATE': ['cartridge fill start', 'cartridge priming start'], 'BICARB_CARTRIDGE_FILL_WATER_END_STATE': ['cartridge fill end', 'cartridge priming end'], 'BICARB_CHAMBER_CHECK_LEVEL_STATE': ['chamber level check'], 'BICARB_CHAMBER_FILL_STATE': ['champer fill'], 'BICARB_CHAMBER_PRESSURE_CHECK_STATE': ['chamber pressure check'], 'BICARB_SUPPLY_VENT_START_STATE': ['vent start', 'supply vent start'], 'BICARB_SUPPLY_VENT_END_STATE': ['vent end', 'supply vent end'], 'NUM_OF_BICARB_CHAMBER_FILL_EXEC_STATES': [], } @unique class DDBloodLeakStates(DialinEnum): BLOOD_LEAK_WAIT_FOR_POST_STATE = 0 # BLOOD_LEAK_CHECK_SET_POINT_STATE = 1 # BLOOD_LEAK_INIT_STATE = 2 # BLOOD_LEAK_CHECK_ZERO_AND_SELF_TEST_STATE = 3 # BLOOD_LEAK_VERIFY_INTENSITY_AFTER_ZEROING_STATE = 4 # BLOOD_LEAK_NORMAL_STATE = 5 # BLOOD_LEAK_RECOVER_BLOOD_DETECT_STATE = 6 # NUM_OF_BLOOD_LEAK_STATES = 7 # Number of blood leak states DDBloodLeakStates._str_list = { # Official Name : Accepted strings 'BLOOD_LEAK_WAIT_FOR_POST_STATE': ['wait for post', 'wait'], 'BLOOD_LEAK_CHECK_SET_POINT_STATE': ['check set point'], 'BLOOD_LEAK_INIT_STATE': ['init'], 'BLOOD_LEAK_CHECK_ZERO_AND_SELF_TEST_STATE': ['check zero and self test'], 'BLOOD_LEAK_VERIFY_INTENSITY_AFTER_ZEROING_STATE': ['verify', 'verify intensity after zeroing'], 'BLOOD_LEAK_NORMAL_STATE': ['normal'], 'BLOOD_LEAK_RECOVER_BLOOD_DETECT_STATE': ['recover blood', 'recover blood detect'], 'NUM_OF_BLOOD_LEAK_STATES': [], } @unique class DDConcentratePumpAttributes(DialinEnum): CURRENT_STATE = 0 # Current State Concentrate Pump Attribute CURRENT_SET_SPEED = 1 # Current Set Speed Concentrate Pump Attribute MEASURED_SPEED = 2 # Measured Speed Concentrate Pump Attribute TARGET_SPEED = 3 # Target Speed Concentrate Pump Attribute PULSE_US = 4 # Hall Sensor Pulse Width (in micro seconds) Concentrate Pump Attribute TARGET_REV_COUNT = 5 # Target Revolutions Concentrate Pump Attribute MEASURED_REV_COUNT = 6 # Measured Revolutions Concentrate Pump Attribute PARKED = 7 # Parked Concentrate Pump Attribute PARK_FAULT = 8 # Park Fault Concentrate Pump Attribute NUM_OF_D10_D11_CONCENTRATE_PUMP_ATTRIBUTES = 9 # Number of Acid (D11) and Bicarbonate (D10) Concentrate Pump Attributes DDConcentratePumpAttributes._str_list = { # Official Name : Accepted strings 'CURRENT_STATE': ['current state'], 'CURRENT_SET_SPEED': ['current speed'], 'MEASURED_SPEED': ['measured speed'], 'TARGET_SPEED': ['target speed'], 'PULSE_US': ['pulse'], 'TARGET_REV_COUNT': ['target revolutions count', 'target rev count'], 'MEASURED_REV_COUNT': ['measured revolutions count', 'measured rev count'], 'PARKED': ['parked'], 'PARK_FAULT': ['fault', 'park fault'], 'NUM_OF_D10_D11_CONCENTRATE_PUMP_ATTRIBUTES': [], } @unique class DDConcentratePumpStates(DialinEnum): CONCENTRATE_PUMP_OFF_STATE = 0 # Concentrate Pump Off State CONCENTRATE_PUMP_RAMP_TO_TARGET_SPEED_STATE = 1 # Ramp to Target Speed Concentrate Pump State CONCENTRATE_PUMP_CONTROL_TARGET_SPEED_STATE = 2 # Control Target Speed Concentrate Pump State NUM_OF_CONCENTRATE_PUMP_STATES = 3 # Number of Concentrate Pump States DDConcentratePumpStates._str_list = { # Official Name : Accepted strings 'CONCENTRATE_PUMP_OFF_STATE': ['off'], 'CONCENTRATE_PUMP_RAMP_TO_TARGET_SPEED_STATE': ['ramp to target speed'], 'CONCENTRATE_PUMP_CONTROL_TARGET_SPEED_STATE': ['control target speed'], 'NUM_OF_CONCENTRATE_PUMP_STATES': [], } @unique class DDDialysatePumpAttributes(DialinEnum): TARGET_RPM = 0 # Target RPM Dialysate Pump Attribute MEASURED_SPEED = 1 # Measured Speed Dialysate Pump Attribute CURRENT_SPEED = 2 # Current Speed Dialysate Pump Attribute STATE = 3 # State to command Dialysate Pump Attribute TARGET_PRESSURE = 4 # Target Pressure Dialysate Pump Attribute MEASURED_PRESSURE = 5 # Measured Pressure Dialysate Pump Attribute MEASURED_CURRENT = 6 # Measured Current Dialysate Pump Attribute CONTROL = 7 # Pump Run/Stop Control Pump Attribute DIRECTION_ERROR_COUNT = 8 # Direction Error Count Dialysate Pump Attribute MEASURED_DIRECTION = 9 # Measured Direction Dialysate Pump Attribute NUM_OF_DIALYSATE_PUMP_ATTRIBUTES = 10 # Number of Dialysate Pump Attributes DDDialysatePumpAttributes._str_list = { # Official Name : Accepted strings 'TARGET_RPM': ['target rp,'], 'MEASURED_SPEED': ['measured speed'], 'CURRENT_SPEED': ['current speed'], 'STATE': ['state'], 'TARGET_PRESSURE': ['target pressure'], 'MEASURED_PRESSURE': ['measured pressure'], 'MEASURED_CURRENT': ['measured pressure'], 'CONTROL': ['control'], 'DIRECTION_ERROR_COUNT': ['direction error count', 'error count'], 'MEASURED_DIRECTION': ['measured direction'], 'NUM_OF_DIALYSATE_PUMP_ATTRIBUTES': [], } @unique class DDDialysatePumpsStates(DialinEnum): DIALYSATE_PUMP_OFF_STATE = 0 # Dialysate Pump Off State DIALYSATE_PUMP_RAMP_UP_STATE = 1 # Dialysate Pump Ramp Up State DIALYSATE_PUMP_CONTROL_TO_TARGET_STATE = 2 # Dialysate Pump Control to Target State NUM_OF_DIALYSATE_PUMP_STATES = 3 # Number of Dialysate Pump States DDDialysatePumpsStates._str_list = { # Official Name : Accepted strings 'DIALYSATE_PUMP_OFF_STATE': ['off'], 'DIALYSATE_PUMP_RAMP_UP_STATE': ['ramp up'], 'DIALYSATE_PUMP_CONTROL_TO_TARGET_STATE': ['control to target'], 'NUM_OF_DIALYSATE_PUMP_STATES': [], } @unique class DDDryBicartDrainExecStates(DialinEnum): DRY_BICART_DRAIN_START_STATE = 0 # Initial state of dry bicart drain DRY_BICART_FLUID_DRAIN_STATE = 1 # Dry bicart fluid drain state DRY_BICART_FLUID_DRAIN_DURATION_CHECK_STATE = 2 # Dry bicart drain duration check state DRY_BICART_FLUID_DRAIN_END_STATE = 3 # Dry bicart drain end state NUM_OF_DRY_BICART_DRAIN_EXEC_STATES = 4 # Number of dry bicart drain states DDDryBicartDrainExecStates._str_list = { # Official Name : Accepted strings 'DRY_BICART_DRAIN_START_STATE': ['start', 'drain start'], 'DRY_BICART_FLUID_DRAIN_STATE': ['draining', 'drain in progress'], 'DRY_BICART_FLUID_DRAIN_DURATION_CHECK_STATE': ['drain duration check'], 'DRY_BICART_FLUID_DRAIN_END_STATE': ['end', 'drain end'], 'NUM_OF_DRY_BICART_DRAIN_EXEC_STATES': [], } @unique class DDDryBicartFillExecStates(DialinEnum): DRY_BICART_START_STATE = 0 # Initial state of dry bicart fill DRY_BICART_FILL_WATER_START_STATE = 1 # Dry bicart fill start state DRY_BICART_FILL_WATER_END_STATE = 2 # Dry bicart fill end state DRY_BICART_DEGAS_START_STATE = 3 # Dry bicart vent start state DRY_BICART_DEGAS_END_STATE = 4 # Dry bicart vent end state DRY_BICART_FILL_DURATION_CHECK_STATE = 5 # Dry bicart fill duration check state DRY_BICART_FILL_COMPLETE_STATE = 6 # Dry bicart fill complete state NUM_OF_DRY_BICART_FILL_EXEC_STATES = 7 # Number of dry bicart fill states DDDryBicartFillExecStates._str_list = { # Official Name : Accepted strings 'DRY_BICART_START_STATE': ['start'], 'DRY_BICART_FILL_WATER_START_STATE': ['fill water start'], 'DRY_BICART_FILL_WATER_END_STATE': ['fill water end'], 'DRY_BICART_DEGAS_START_STATE': ['degas start', 'degasing start'], 'DRY_BICART_DEGAS_END_STATE': ['degas end', 'degasing end'], 'DRY_BICART_FILL_DURATION_CHECK_STATE': ['fill duration check', 'duration check'], 'DRY_BICART_FILL_COMPLETE_STATE': ['fill complete', 'complete', 'done'], 'NUM_OF_DRY_BICART_FILL_EXEC_STATES': [], } @unique class DDHeaterStartStop(DialinEnum): STOP = 0 # Stop heater START = 1 # Start heater NUM_OF_HEATER_STATES = 2 # Number of Heater states DDHeaterStartStop._str_list = { # Official Name : Accepted strings 'STOP': [], 'START': [], 'NUM_OF_HEATER_STATES': [], } @unique class DDHeaterAttributes(DialinEnum): HEAT_DUTY_CYCLE = 0 # Heat Duty Cycle Attribute for Heaters HEAT_TARGET_TEMP = 1 # Target Temperature Attribute for Heaters HEAT_STATE = 2 # State to command Attribute for Heaters FEED_FORWARD = 3 # Feed Forward Attribute for Heaters PWM_PERIOD = 4 # Pulse Width Modulation Attribute for Heaters ADJUSTED_TARGET_TEMP = 5 # Adjusted Target Temperature Attribute for Heaters TARGET_TEMP_TD = 6 # Target Temperature Attribute for Heaters NUM_OF_DD_HEATER_ATTRIBUTES = 7 # Number of Heater Attributes DDHeaterAttributes._str_list = { # Official Name : Accepted strings 'HEAT_DUTY_CYCLE': ['duty cycle'], 'HEAT_TARGET_TEMP': ['target temperature', 'target temp'], 'HEAT_STATE': ['state', 'heat state'], 'FEED_FORWARD': [], 'PWM_PERIOD': ['pwm', 'pwm period'], 'ADJUSTED_TARGET_TEMP': ['adjusted target temperature', 'adj target temp'], 'TARGET_TEMP_TD': ['target temperature td', 'target temp td'], 'NUM_OF_DD_HEATER_ATTRIBUTES': [], } @unique class DDHeaterExecState(DialinEnum): HEATER_EXEC_STATE_OFF = 0 # Heater Execution Off State HEATER_EXEC_STATE_RAMP_TO_TARGET = 1 # Heater Execution Ramp to Target State HEATER_EXEC_STATE_CONTROL_TO_TARGET = 2 # Heater Execution Control to Target State HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET = 3 # Heater Execution Control to Disinfection State NUM_OF_HEATERS_EXEC_STATE = 4 # Number of Heater Execution States DDHeaterExecState._str_list = { # Official Name : Accepted strings 'HEATER_EXEC_STATE_OFF': ['heater off', 'off'], 'HEATER_EXEC_STATE_RAMP_TO_TARGET': ['ramp to target'], 'HEATER_EXEC_STATE_CONTROL_TO_TARGET': ['control to target'], 'HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET': ['control to disinfect target'], 'NUM_OF_HEATERS_EXEC_STATE': [], } @unique class DDPistonPumpAttributes(DialinEnum): CONTROL_STATE = 0 # Control State for the Piston Pumps SW_COUNTER = 1 # Software counter attribute for the Piston Pumps CYCLE_COUNTER = 2 # Cycle Counter for the Piston Pumps NUM_OF_PISTON_PUMP_ATTRIBUTES = 3 # Number of Piston Pump Attributes DDPistonPumpAttributes._str_list = { # Official Name : Accepted strings 'CONTROL_STATE': ['control', 'control state'], 'SW_COUNTER': ['sw', 'sw counter', 'software counter'], 'CYCLE_COUNTER': ['cycle', 'cycle counter'], 'NUM_OF_PISTON_PUMP_ATTRIBUTES': [], } @unique class DDSpentChFillExecState(DialinEnum): SPENT_CHAMBER_FILL_STATE_START = 0 # Initial state of spent chamber fill SPENT_CHAMBER_FILL_STATE1_FILL_START = 1 # Spent chamber fill state 1 fill start state SPENT_CHAMBER_FILL_STATE1_DOSING_CNTRL = 2 # Spent chamber fill state 1 dosing control SPENT_CHAMBER_FILL_STATE1_FILL_END = 3 # Spent chamber fill state 1 fill end state SPENT_CHAMBER_FILL_STATE2_FILL_START = 4 # Spent chamber fill state 2 fill start state SPENT_CHAMBER_FILL_STATE2_DOSING_CNTRL = 5 # Spent chamber fill state 2 dosing control SPENT_CHAMBER_FILL_STATE2_FILL_END = 6 # Spent chamber fill state 2 fill end state NUM_OF_SPENT_CHAMBER_FILL_EXEC_STATES = 7 # Number of spent chamber fill states DDPistonPumpAttributes._str_list = { # Official Name : Accepted strings 'SPENT_CHAMBER_FILL_STATE_START': ['start'], 'SPENT_CHAMBER_FILL_STATE1_FILL_START': ['state 1 start'], 'SPENT_CHAMBER_FILL_STATE1_DOSING_CNTRL': ['state 1 dosing'], 'SPENT_CHAMBER_FILL_STATE1_FILL_END': ['state 1 end'], 'SPENT_CHAMBER_FILL_STATE2_FILL_START': ['state 2 start'], 'SPENT_CHAMBER_FILL_STATE2_DOSING_CNTRL': ['state 2 dosing'], 'SPENT_CHAMBER_FILL_STATE2_FILL_END': ['state 2 end'], 'NUM_OF_SPENT_CHAMBER_FILL_EXEC_STATES': [], } @unique class DDValveStates(DialinEnum): VALVE_STATE_CLOSED = 0 # Valve Closed State VALVE_STATE_OPEN = 1 # Valve Open State NUM_OF_VALVE_STATES = 2 # Number of Valve states DDValveStates._str_list = { # Official Name : Accepted strings 'VALVE_STATE_CLOSED': ['closed'], 'VALVE_STATE_OPEN': ['open'], 'NUM_OF_VALVE_STATES': [], } @unique class DDCancelModes(DialinEnum): CANCELLATION_MODE_NONE = 0 # Cancellation mode none. CANCELLATION_MODE_BASIC = 1 # Cancellation mode basic. CANCELLATION_MODE_HOT = 2 # Cancellation mode hot. CANCELLATION_MODE_COLD = 3 # Cancellation mode cold. CANCELLATION_MODE_WATER = 4 # Cancellation mode water. NUM_OF_CANCELLATION_MODES = 5 # Number of cancellation modes. DDValveStates._str_list = { # Official Name : Accepted strings 'CANCELLATION_MODE_NONE': ['none'], 'CANCELLATION_MODE_BASIC': ['basic'], 'CANCELLATION_MODE_HOT': ['hot'], 'CANCELLATION_MODE_COLD': ['cold'], 'CANCELLATION_MODE_WATER': ['water'], 'NUM_OF_CANCELLATION_MODES': [], } @unique class DDSubstitutionPumpAttributes(DialinEnum): TARGET_SPEED = 0 # Target RPM Substitution Pump Attribute CURRENT_SPEED = 1 # Current Speed Substitution Pump Attribute STATE = 2 # State to command Substitution Pump Attribute MEASURED_SPEED = 3 # Measured Speed Substitution Pump Attribute NUM_OF_DIALYSATE_PUMP_ATTRIBUTES = 4 # Number of Substitution Pump Attributes DDSubstitutionPumpAttributes._str_list = { # Official Name : Accepted strings 'TARGET_SPEED': ['target rp,'], 'CURRENT_SPEED': ['current speed'], 'STATE': ['state'], 'MEASURED_SPEED': ['measured speed'], 'NUM_OF_DIALYSATE_PUMP_ATTRIBUTES': [], } @unique class DDConductivityResistanceAttributes(DialinEnum): CONDUCTIVITY = 0 # Conductivity CONDUCTIVITY_RESISTANCE = 1 # raw conductivity resistance Attribute RTD_RESISTANCE = 2 # raw RTD resistance Attribute UNCOMPENSATED_COND = 3 # Uncompensated Conductivity NUM_OF_RESISTANCE_ATTRIBUTES = 4 # Number of conductivity sensor Attributes DDConductivityResistanceAttributes._str_list = { # Official Name : Accepted strings 'CONDUCTIVITY': ['conductivity,'], 'CONDUCTIVITY_RESISTANCE': ['conductivity resistance'], 'RTD_RESISTANCE' : ['rtd resistance'], 'UNCOMPENSATED_COND' : ['uncompensated conductivity'], 'NUM_OF_RESISTANCE_ATTRIBUTES': [], } # ================================================== Enum Creators: Record Sub Fields ================================================== @unique class DDCalibRecordAccelerometerFields(RecordsBaseEnum): ACCEL_X_OFFSET = (0, DataTypes.F32) # DD accelerometer X axis offset ACCEL_Y_OFFSET = (1, DataTypes.F32) # DD accelerometer Y axis offset ACCEL_Z_OFFSET = (2, DataTypes.F32) # DD accelerometer Z axis offset CALIBRATION_TIME = (3, DataTypes.U32) # Calibration time NUM_OF_CALIBRATION_RECORD_ACCELEROMETER_FIELDS = (4, DataTypes.NONE) # Number of Calibration Record Accelerometer's Fields DDCalibRecordAccelerometerFields._str_list = { # Official Name : Accepted strings 'ACCEL_X_OFFSET': [], 'ACCEL_Y_OFFSET': [], 'ACCEL_Z_OFFSET': [], 'CALIBRATION_TIME': [], 'NUM_OF_CALIBRATION_RECORD_ACCELEROMETER_FIELDS': [], } @unique class DDCalibRecordBloodLeakFields(RecordsBaseEnum): SET_POINT = (0, DataTypes.U16) # DD Blood leak sensor set point CALIBRATION_TIME = (1, DataTypes.U32) # Calibration time NUM_OF_CALIBRATION_RECORD_BLOOD_LEAK_FIELDS = (2, DataTypes.NONE) # Number of Calibration Record Accelerometer's Fields DDCalibRecordBloodLeakFields._str_list = { # Official Name : Accepted strings 'SET_POINT': [], 'CALIBRATION_TIME': [], 'NUM_OF_CALIBRATION_RECORD_BLOOD_LEAK_FIELDS': [], } @unique class DDCalibRecordConcentrateFields(RecordsBaseEnum): CONCENTRATE_MIX_RATIO = (0, DataTypes.F32) # Acid or Bicarb Concentrate mix ratio. FULL_BOTTLE_VOLUME_ML = (1, DataTypes.F32) # Acid or Bicarb full bottle volume in milliliters. CONDUCTIVITY_USPCM = (2, DataTypes.F32) # Acid or Bicarb conductivity in uS/cm. BOTTLE_TEMPERATURE_C = (3, DataTypes.F32) # Acid or Bicarb bottle temperature in C. CALIBRATION_TIME = (4, DataTypes.U32) # Calibration time NUM_OF_CALIBRATION_RECORD_CONCENTRATE_FIELDS = (5, DataTypes.NONE) # Number of Calibration Record Acid and Bicarb Concentrate's Fields DDCalibRecordConcentrateFields._str_list = { # Official Name : Accepted strings 'CONCENTRATE_MIX_RATIO': [], 'FULL_BOTTLE_VOLUME_ML': [], 'CONDUCTIVITY_USPCM': [], 'BOTTLE_TEMPERATURE_C': [], 'CALIBRATION_TIME': [], 'NUM_OF_CALIBRATION_RECORD_CONCENTRATE_FIELDS': [], } @unique class DDCalibRecordConductivityFields(RecordsBaseEnum): K_HIGH = (0, DataTypes.F32) # Cell Coefficient High ALPHA_HIGH = (1, DataTypes.F32) # Temperature correction High ETA_HIGH = (2, DataTypes.F32) # Resistance Scale Factor High ZETA_HIGH = (3, DataTypes.F32) # Resistance Offset High K_LOW = (4, DataTypes.F32) # Cell Coefficient Low ALPHA_LOW = (5, DataTypes.F32) # Temperature correction Low ETA_LOW = (6, DataTypes.F32) # Resistance Scale Factor Low ZETA_LOW = (7, DataTypes.F32) # Resistance Offset Low BETA = (8, DataTypes.F32) # Temperature Scale Factor DELTA = (9, DataTypes.F32) # Temperature Offset RSRVD_1 = (10, DataTypes.F32) # Reserved slot RSRVD_2 = (11, DataTypes.F32) # Reserved slot CALIBRATION_TIME = (12, DataTypes.U32) # Calibration time NUM_OF_CALIBRATION_RECORD_CONDUCTIVITY_FIELDS = (13, DataTypes.NONE) # Number of Calibration Record Conductivity Fields DDCalibRecordConductivityFields._str_list = { # Official Name : Accepted strings 'K_HIGH': [], 'ALPHA_HIGH': [], 'ETA_HIGH': [], 'ZETA_HIGH': [], 'K_LOW': [], 'ALPHA_LOW': [], 'ETA_LOW': [], 'ZETA_LOW': [], 'BETA': [], 'DELTA': [], 'RSRVD_1': [], 'RSRVD_2': [], 'CALIBRATION_TIME': [], 'NUM_OF_CALIBRATION_RECORD_CONCENTRATE_FIELDS': [], } @unique class DDCalibRecordSensorFields(RecordsBaseEnum): GAIN = (0, DataTypes.F32) # Sensor's Gain OFFSET = (1, DataTypes.F32) # Sensor's Offset CALIBRATION_TIME = (2, DataTypes.U32) # Sensor's Calibration time NUM_OF_CALIBRATION_RECORD_SENSOR_FIELDS = (3, DataTypes.NONE) # Number of Calibration Record Sensor's Fields DDCalibRecordSensorFields._str_list = { # Official Name : Accepted strings 'GAIN': [], 'OFFSET': [], 'CALIBRATION_TIME': [], 'NUM_OF_CALIBRATION_RECORD_SENSOR_FIELDS': [], } # ================================================== Enum Creators: Record Fields ================================================== @unique class DDSystemRecordFields(RecordsBaseEnum): IS_RO_FEATURED = (0, DataTypes.BOOL) # Is RO featured or defeatured IS_RO_BOOST_PUMP_ADDED = (1, DataTypes.BOOL) # Is RO have boost pump or not TOP_LEVEL_PN = (2, DataTypes.U08, 10) # Top level part number TOP_LEVEL_SN = (3, DataTypes.U08, 20) # Top level serial number MFG_LOCATION = (4, DataTypes.U08) # Manufacturing Location MFG_DATE = (5, DataTypes.U32) # Manufacturing Date NUM_OF_SYSTEM_RECORD_FIELDS = (6, DataTypes.NONE) # Number of System Record Fields DDSystemRecordFields._str_list = { # Official Name : Accepted strings 'TOP_LEVEL_PN': ['pn', 'part number'], 'TOP_LEVEL_SN': ['sn', 'serial number'], 'MFG_LOCATION': ['location', 'manufacturing location'], 'MFG_DATE': ['date', 'manufacturing date'], 'NUM_OF_SYSTEM_RECORD_FIELDS': [], } @unique class DDServiceRecordFields(RecordsBaseEnum): IS_HDF_ONLINE_FLUID = (0, DataTypes.BOOL) # DD Is HDF Online WATER_RECOVERY = (1, DataTypes.U32) # DD Water Recovery SERVICE_LOC = (2, DataTypes.U08) # DD service location LAST_SERVICE_EPOCH_DATE = (3, DataTypes.U32) # DD last service date in epoch SERVICE_INTERVAL_SECONDS = (4, DataTypes.U32) # DD service interval in seconds LAST_RESET_TIME_EPOCH = (5, DataTypes.U32) # Last time the record was reset in epoch NUM_OF_SERVICE_RECORD_FIELDS = (6, DataTypes.NONE) # Number of Service Record Fields DDServiceRecordFields._str_list = { # Official Name : Accepted strings 'IS_HDF_ONLINE_FLUID': [], 'WATER_RECOVERY': [], 'SERVICE_LOC': [], 'LAST_SERVICE_EPOCH_DATE': [], 'SERVICE_INTERVAL_SECONDS': [], 'LAST_RESET_TIME_EPOCH': [], 'NUM_OF_SERVICE_RECORD_FIELDS': [], } def get_calibration_record_fields() -> RecordsBaseEnum: # Creating the enum members list i = 0 members = {} for pres_sensor in DDPressureSensorNames: if 'num_' in pres_sensor.name.lower(): continue for field_name in DDCalibRecordSensorFields: if 'num_' in field_name.name.lower(): continue members[f'PRES__{pres_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for pres_sensor in FPPressureSensorNames: if 'num_' in pres_sensor.name.lower(): continue for field_name in DDCalibRecordSensorFields: if 'num_' in field_name.name.lower(): continue members[f'PRES__{pres_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for temp_sensor in DDTemperatureSensorNames: if 'num_' in temp_sensor.name.lower(): continue elif temp_sensor.value >= DDTemperatureSensorNames.FIRST_CONDUCTIVITY_SENSOR.value: continue for field_name in DDCalibRecordSensorFields: if 'num_' in field_name.name.lower(): continue members[f'TEMP__{temp_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for conc_pump in DDConcentratePumpNames: if 'num_' in conc_pump.name.lower(): continue for field_name in DDCalibRecordSensorFields: if 'num_' in field_name.name.lower(): continue members[f'CONC__{conc_pump.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for dial_pump in DDDialysatePumpNames: if 'num_' in dial_pump.name.lower(): continue elif 'd12' in dial_pump.name.lower(): members[f'DIAL__{dial_pump.name}__TARGET_SPEED'] = (i, DataTypes.F32) i += 1 members[f'DIAL__{dial_pump.name}__{DDCalibRecordSensorFields.CALIBRATION_TIME.name}'] = (i, DDCalibRecordSensorFields.CALIBRATION_TIME.datatype()) i += 1 else: for field_name in DDCalibRecordSensorFields: if 'num_' in field_name.name.lower(): continue members[f'DIAL__{dial_pump.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for acid in AcidTypes: if 'num_' in acid.name.lower(): continue for field_name in DDCalibRecordConcentrateFields: if 'num_' in field_name.name.lower(): continue members[f'ACID__{acid.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for bicarb in BicarbTypes: if 'num_' in bicarb.name.lower(): continue for field_name in DDCalibRecordConcentrateFields: if 'num_' in field_name.name.lower(): continue members[f'BICARB__{bicarb.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 for field_name in DDCalibRecordAccelerometerFields: if 'num_' in field_name.name.lower(): continue members[f'ACCEL__{field_name.name}'] = (i, field_name.datatype()) i += 1 for field_name in DDCalibRecordBloodLeakFields: if 'num_' in field_name.name.lower(): continue members[f'BLOOD_LEAK__{field_name.name}'] = (i, field_name.datatype()) i += 1 for cond_sensor in DDConductivitySensorNames: if 'num_' in cond_sensor.name.lower(): continue for field_name in DDCalibRecordConductivityFields: if 'num_' in field_name.name.lower(): continue members[f'COND__{cond_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) i += 1 members[f'NUM_OF_CALIBRATION_RECORD_FIELDS'] = (i, DataTypes.NONE) # Enum creation DDCalibrationRecordFields = RecordsBaseEnum('DDCalibrationRecordFields', members,) # Setting the _str_list values for the enum DDCalibrationRecordFields._str_list = {} for member in members: DDCalibrationRecordFields._str_list[member] = [] return DDCalibrationRecordFields @unique class DDInstitutionalRecordBasicFields(RecordsBaseEnum): MIN_DIALYSATE_SYSTEM_FLOW_MLPM = (0, DataTypes.U32) # Min dialysate flow in mL/min MAX_DIALYSATE_SYSTEM_FLOW_MLPM = (1, DataTypes.U32) # Max dialysate flow in mL/min MIN_DIALYSATE_TEMP_C = (2, DataTypes.F32) # Min dialysate temperature in C MAX_DIALYSATE_TEMP_C = (3, DataTypes.F32) # Max dialysate temperature in C MIN_ACID_CONCENTRATE = (4, DataTypes.U32) # Min Acid concentrate MAX_ACID_CONCENTRATE = (5, DataTypes.U32) # Max Acid concentrate MIN_BICARB_CARTRIDGE_SIZE_G = (6, DataTypes.U32) # Min Bicarbonate cartridge size in grams MAX_BICARB_CARTRIDGE_SIZE_G = (7, DataTypes.U32) # Max Bicarbonate cartridge size in grams MIN_SODIUM_MEQPL = (8, DataTypes.U32) # Min sodium in mEq/L MAX_SODIUM_MEQPL = (9, DataTypes.U32) # Max sodium in mEq/L MIN_BICARBONATE_MEQPL = (10, DataTypes.U32) # Min bicarbonate in mEq/L MAX_BICARBONATE_MEQPL = (11, DataTypes.U32) # Max bicarbonate in mEq/L MIN_RO_REJECTION_RATIO_PCT = (12, DataTypes.F32) # Min RO rejection ratio in percent DISINFECTION_FREQUENCY = (13, DataTypes.U32) # Disinfection days between cycles DISINFECTION_CYCLE_TIME = (14, DataTypes.F32) # Disinfection Cycle Time MIN_INLET_WATER_CIND_AKARN_LIMIT_USPCM = (15, DataTypes.F32) # Min inlet water conductivity alarm limit in uS/cm MAX_INLET_WATER_CIND_AKARN_LIMIT_USPCM = (16, DataTypes.F32) # Max inlet water conductivity alarm limit in uS/cm ACID_CONCENTRATE_JUG_SIZE_L = (17, DataTypes.F32) # acid concentrate jug size in Liters MIN_ACID_ALARM_LIMIT_PCT = (18, DataTypes.F32) # Min acid alarm limit in percent MIN_BICARB_ALARM_LIMIT_PCT = (19, DataTypes.F32) # Min bicarbonate alarm limit in percent POST_TREAT_DRAIN_OPTION = (20, DataTypes.U32) # Dialysate Post Treatment Drain OptionĀ  POST_TREAT_DRY_BICARB_OPTION = (21, DataTypes.U32) # Dry Bicarbonate Post Treatment OptionĀ  CALIBRATION_TIME = (22, DataTypes.U32) # Calibration time in epoch. NUM_OF_INSTITUTIONAL_RECORD_BASIC_FIELDS = (23, DataTypes.NONE) # Number of Institutional Record Basic Fields DDInstitutionalRecordBasicFields._str_list = { # Official Name : Accepted strings 'MIN_DIALYSATE_SYSTEM_FLOW_MLPM': [], 'MAX_DIALYSATE_SYSTEM_FLOW_MLPM': [], 'MIN_DIALYSATE_TEMP_C': [], 'MAX_DIALYSATE_TEMP_C': [], 'ACID_CONCENTRATE': [], 'BICARB_CARTRIDGE_SIZE_G': [], 'MIN_SODIUM_MEQPL': [], 'MAX_SODIUM_MEQPL': [], 'MIN_BICARBONATE_MEQPL': [], 'MAX_BICARBONATE_MEQPL': [], 'MIN_RO_REJECTION_RATIO_PCT': [], 'DISINFECTION_FREQUENCY': [], 'DISINFECTION_CYCLE_TIME': [], 'MIN_INLET_WATER_CIND_AKARN_LIMIT_USPCM': [], 'MAX_INLET_WATER_CIND_AKARN_LIMIT_USPCM': [], 'ACID_CONCENTRATE_JUG_SIZE_L': [], 'MIN_ACID_ALARM_LIMIT_PCT': [], 'MIN_BICARB_ALARM_LIMIT_PCT': [], 'POST_TREAT_DRAIN_OPTION': [], 'POST_TREAT_DRY_BICARB_OPTION': [], 'CALIBRATION_TIME': [], 'NUM_OF_INSTITUTIONAL_RECORD_BASIC_FIELDS': [], } @unique class DDInstitutionalRecordAdvancedFields(RecordsBaseEnum): CALIBRATION_TIME = (0, DataTypes.U32) # Calibration time in epoch. NUM_OF_INSTITUTIONAL_RECORD_ADVANCED_FIELDS = (1, DataTypes.NONE) # Number of Institutional Record Advanced Fields DDInstitutionalRecordAdvancedFields._str_list = { # Official Name : Accepted strings 'CALIBRATION_TIME': [], 'NUM_OF_INSTITUTIONAL_RECORD_FIELDS': [], } @unique class DDInstitutionalRecordAdditionalFields(RecordsBaseEnum): CALIBRATION_TIME = (0, DataTypes.U32) # Calibration time in epoch. NUM_OF_INSTITUTIONAL_RECORD_ADDITIONAL_FIELDS = (1, DataTypes.NONE) # Number of Institutional Record Additional Fields DDInstitutionalRecordAdditionalFields._str_list = { # Official Name : Accepted strings 'CALIBRATION_TIME': [], 'NUM_OF_INSTITUTIONAL_RECORD_ADDITIONAL_FIELDS': [], } @unique class DDUsageInformationRecordFields(RecordsBaseEnum): RO_WATER_GEN_TOTAL_L = (0, DataTypes.F32) # Total RO water generated in liters. (Cannot be reset) RO_WATER_GEN_SINCE_LAST_SERVICE_L = (1, DataTypes.F32) # RO water generated since last treatment in liters LAST_BASIC_FLUSH_COMPLETE_DATE_EPOCH = (2, DataTypes.U32) # Last basic flush complete date in epoch. LAST_HEAT_DISINFECT_COMPLETE_DATE_EPOCH = (3, DataTypes.U32) # Last heat disinfect complete date in epoch. LAST_HEAT_ACTIVE_COOL_COMPLETE_DATE_EPOCH = (4, DataTypes.U32) # Last heat disinfect active cool complete date in epoch. LAST_FILTER_FLUSH_COMPLETE_DATE_EPOCH = (5, DataTypes.U32) # Last filter flush complete date in epoch. LAST_RESET_TIME_EPOCH = (6, DataTypes.U32) # Last time the record was reset in epoch. NUM_OF_USAGE_INFO_RECORD_FIELDS = (7, DataTypes.NONE) # Number of Usage Information Record Fields DDUsageInformationRecordFields._str_list = { # Official Name : Accepted strings 'RO_WATER_GEN_TOTAL_L': [], 'RO_WATER_GEN_SINCE_LAST_SERVICE_L': [], 'LAST_BASIC_FLUSH_COMPLETE_DATE_EPOCH': [], 'LAST_HEAT_DISINFECT_COMPLETE_DATE_EPOCH': [], 'LAST_HEAT_ACTIVE_COOL_COMPLETE_DATE_EPOCH': [], 'LAST_FILTER_FLUSH_COMPLETE_DATE_EPOCH': [], 'LAST_RESET_TIME_EPOCH': [], 'NUM_OF_USAGE_INFO_RECORD_FIELDS': [], }