########################################################################### # # Copyright (c) 2020-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 td_defs.py # # @author (last) Vinayakam Mani # @date (last) 10-May-2024 # @author (original) Peter Lucia # @date (original) 04-Dec-2020 # ############################################################################ from enum import unique from numbers import Number from ..utils.base import DialinEnum @unique class TDOpModes(DialinEnum): MODE_FAUL = 0 # Fault mode MODE_SERV = 1 # Service mode MODE_INIT = 2 # Initialization & POST mode MODE_STAN = 3 # Standby mode MODE_TPAR = 4 # Treatment Parameters mode MODE_PRET = 5 # Pre-Treatment mode MODE_TREA = 6 # Treatment mode MODE_POST = 7 # Post-Treatment mode MODE_NLEG = 8 # Not legal - an illegal mode transition occurred NUM_OF_MODES = 9 # Number of TD operation modes @unique class TDStandbyStates(DialinEnum): STANDBY_START_STATE = 0 # Start standby (home actuators). STANDBY_WAIT_FOR_TREATMENT_STATE = 1 # Wait for treatment. STANDBY_WAIT_FOR_DISINFECT_STATE = 2 # Wait for UI to send disinfect option. STANDBY_WAIT_FOR_DG_CLEANING_MODE_CMD_RESPONSE_STATE = 3 # Wait for DG cleaning mode command response state. STANDBY_WAIT_FOR_DG_CLEANING_MODE_TO_START_STATE = 4 # Wait for DG cleaning mode to start state. STANDBY_CLEANING_MODE_IN_PROGRESS_STATE = 5 # Cleaning mode in progress state. NUM_OF_STANDBY_STATES = 6 # Number of standby states (sub-modes). @unique class TDInitStates(DialinEnum): POST_STATE_START = 0 # Start initialize & POST mode state POST_STATE_FW_INTEGRITY = 1 # Run firmware integrity test state POST_STATE_NVDATAMGMT = 2 # Run NV Data Mgmt. test state POST_STATE_WATCHDOG = 3 # Run watchdog test state POST_STATE_SAFETY_SHUTDOWN = 4 # Run safety shutdown test state POST_STATE_BLOOD_FLOW = 5 # Run blood flow test state POST_STATE_VALVES = 6 # Run valves test state POST_STATE_SYRINGE_PUMP = 7 # Run syringe pump test state POST_STATE_PRES_OCCL = 8 # Run pressure occlusion state POST_STATE_ALARM_AUDIO = 9 # Run alarm audio test state POST_STATE_ALARM_LAMP = 10 # Run alarm lamp test state POST_STATE_TEMPERATURES = 11 # Run temperatures POST state POST_STATE_FANS = 12 # Run fans POST state POST_STATE_STUCK_BUTTON = 13 # Run stuck button test state POST_STATE_UI_POST = 14 # Check whether UI passed its POST tests POST_STATE_FW_COMPATIBILITY = 15 # Run firmware compatibility test state POST_STATE_FPGA = 16 # Run FPGA test state POST_STATE_COMPLETED = 17 # POST self-tests completed state POST_STATE_FAILED = 18 # POST self-tests failed state NUM_OF_POST_STATES = 19 # Number of initialize & POST mode states @unique class TDTreatmentParamStates(DialinEnum): TD_TREATMENT_PARAMS_MODE_STATE_WAIT_4_UI_2_SEND = 0 # Wait for UI to send treatment params mode state TD_TREATMENT_PARAMS_MODE_STATE_WAIT_4_UI_2_CONFIRM = 1 # Wait for UI to confirm treatment params mode state NUM_OF_TD_TREATMENT_PARAMS_MODE_STATES = 2 # Number of treatment params mode states @unique class TDPreTreatmentModesStates(DialinEnum): TD_PRE_TREATMENT_WATER_SAMPLE_STATE = 0 # Water sample state TD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE = 1 # Consumable self-tests state TD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE = 2 # No cartridge self-tests state TD_PRE_TREATMENT_CART_INSTALL_STATE = 3 # Consumable and cartridge installation state TD_PRE_TREATMENT_SELF_TEST_DRY_STATE = 4 # Self-tests when the cartridge is dry state TD_PRE_TREATMENT_PRIME_STATE = 5 # Prime blood and dialysate circuits and run wet self-tests state TD_PRE_TREATMENT_RECIRCULATE_STATE = 6 # Re-circulate blood and dialysate circuits state TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE = 7 # Patient connection state NUM_OF_TD_PRE_TREATMENT_STATES = 8 # Number of pre-treatment mode states @unique class TDPostTreatmentStates(DialinEnum): TD_POST_TREATMENT_DRAIN_RESERVOIRS_STATE = 0 # Drain reservoirs state TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE = 1 # Patient disconnection state TD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE = 2 # Disposable removal state TD_POST_TREATMENT_VERIFY_STATE = 3 # Verify cartridge removed, syringe removed, and reservoirs drained state NUM_OF_TD_POST_TREATMENT_STATES = 4 # Number of post-treatment mode states @unique class TDPreTreatmentPrimeStates(DialinEnum): TD_PRIME_WAIT_FOR_USER_START_STATE = 0 # Wait for user to start prime state TD_PRIME_SALINE_SETUP_STATE = 1 # Saline setup state TD_PRIME_SALINE_PURGE_AIR_STATE = 2 # Saline purge air state TD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE = 3 # Circulate blood circuit state TD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE = 4 # Wait for reservoir 1 fill complete TD_PRIME_DIALYSATE_DIALYZER_STATE = 5 # Dialysate dialyzer fluid path state TD_PRIME_SALINE_DIALYZER_SETUP_STATE = 6 # Saline dialyzer setup state TD_PRIME_SALINE_DIALYZER_STATE = 7 # Saline dialyzer fluid path state TD_PRIME_RESERVOIR_TWO_FILL_COMPLETE_STATE = 8 # Wait for reservoir 2 fill complete TD_PRIME_DIALYSATE_BYPASS_STATE = 9 # Dialysate bypass fluid path state TD_PRIME_WET_SELF_TESTS_STATE = 10 # Perform wet self-tests after priming complete TD_PRIME_PAUSE = 11 # Prime pause state, waits to be resumed TD_PRIME_COMPLETE = 12 # Prime complete state NUM_OF_TD_PRIME_STATES = 13 # Number of prime sub-mode states @unique class TDFaultStates(DialinEnum): TD_FAULT_ENERGIZED_STATE = 0 # TD fault mode energized state TD_FAULT_DEENERGIZED_STATE = 1 # TD fault mode deenergized state NUM_OF_TD_FAULT_STATES = 2 # Number of fault mode states @unique class TDTreatmentStates(DialinEnum): TREATMENT_START_STATE = 0 # Start treatment - initialize treatment and go to blood prime state TREATMENT_BLOOD_PRIME_STATE = 1 # Prime blood-side of dialyzer with gradual ramp for 1 min. while dialyzer is bypassed. No dialysis or UF taking place. No treatment time. TREATMENT_DIALYSIS_STATE = 2 # Perform dialysis. Deliver UF as prescribed. TREATMENT_PAUSED_STATE = 3 # Treatment paused. All pumps off. Dializer bypassed TREATMENT_RINSEBACK_STATE = 4 # Perform rinseback with saline. Dialyzer bypassed. Dialysate recirculating TREATMENT_RECIRC_STATE = 5 # Recirculate saline and dialysate while patient disconnected. Blood lines open and shunted. Dialyzer is bypassed TREATMENT_END_STATE = 6 # Dialysis has ended. Blood pump slowed. Dialyzer is bypassed. Dialysate is recirculated. User can rinseback TREATMENT_ISO_UF_STATE = 7 # Isolated ultrafiltration. No dialysate flow. Ultrafiltration only. TREATMENT_SALINE_BOLUS_STATE = 8 # Deliver a saline bolus. Blood pump draws from saline bag. Dialyzer bypassed. TREATMENT_DIALYSATE_PAUSED_STATE = 9 # No dialysate flow. Dialyzer bypassed. NUM_OF_TREATMENT_STATES = 10 # Number of treatment states (sub-modes) @unique class TDDialysisStates(DialinEnum): DIALYSIS_UF_STATE = 0 # Ultrafiltration state of the dialysis sub-mode state machine DIALYSIS_UF_PAUSED_STATE = 1 # Ultrafiltration Paused state of the dialysis sub-mode state machine NUM_OF_DIALYSIS_STATES = 2 # Number of dialysis sub-mode states @unique class TDServiceStates(DialinEnum): TD_SERVICE_STATE_START = 0 # Start service mode state NUM_OF_TD_SERVICE_STATES = 1 # Number of service mode states @unique class TDNotLegalStates(DialinEnum): NUM_OF_NOT_LEGAL_STATES = 0 # TODO: populate with Not Legal states @unique class TDEventList(DialinEnum): TD_EVENT_STARTUP = 0 # TD startup event TD_EVENT_OP_MODE_CHANGE = 1 # TD Op mode change event TD_EVENT_SUB_MODE_CHANGE = 2 # TD Op sub-mode change event TD_EVENT_DRY_SELF_TEST_CARTRIDGE_RESULT = 3 # TD dry self test cartridge result TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT = 4 # TD dry self test pressure result TD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT = 5 # TD wet self test displacement result TD_EVENT_CPU_RAM_ERROR_STATUS = 6 # TD CPU RAM error status TD_EVENT_CAL_RECORD_UPDATE = 7 # TD new calibration record updated TD_EVENT_SYSTEM_RECORD_UPDATE = 8 # TD new system record has been updated TD_EVENT_SERVICE_UPDATE = 9 # TD new service record has been updated TD_EVENT_USAGE_INFO_UPDATE = 10 # TD new usage information has been updated TD_EVENT_SW_CONFIG_UPDATE = 11 # TD new software configuration has been updated TD_EVENT_BUTTON = 12 # TD button pressed/released TD_EVENT_SAFETY_LINE = 13 # TD safety line pulled/released TD_EVENT_SUB_STATE_CHANGE = 14 # TD Op sub-state change event TD_EVENT_RSRVR_UF_RATE = 15 # TD ultrafiltration measured and expected rates TD_EVENT_OPERATION_STATUS = 16 # TD operation status event. TD_EVENT_AIR_TRAP_FILL = 17 # TD initiated an air trap fill (opened VBT briefly). TD_EVENT_AIR_TRAP_LOWER = 18 # TD started/stopped an air trap lower level operation TD_EVENT_AIR_PUMP_ON_OFF = 19 # TD turned air pump on or off. TD_EVENT_DRY_SELF_TEST_PRESSURE_DECAY_WAIT_PERIOD = 20 # TD dry self test pressure decay wait period TD_EVENT_INSTIT_RECORD_UPDATE = 21 # TD new institutional record has been updated. TD_EVENT_VALVE_POS_CHANGE = 22 # TD pinch valve position change TD_EVENT_VALVE_HOMED_POS_SETTING = 23 # TD pinch valve homed encoder positions for A/B/C NUM_OF_EVENT_IDS = 24 # Total number of TD events @unique class TDEventDataType(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 @unique class TDAirPumpNames(DialinEnum): H12_AIR_PUMP = 0 # TD Air Pump NUM_OF_AIR_PUMPS = 1 # Number of TD Air pumps @unique class TDAirPumpAttributes(DialinEnum): STATE = 0 # TD Air Pump State to command attribute POWER = 1 # TD Air Pump Power attribute NUM_OF_AIR_PUMP_ATTRIBUTES = 2 # Number of Air Pump attributes @unique class TDAirTrapValves(DialinEnum): H13_VALV = 0 # Air trap intake valve H20_VALV = 1 # Air trap outlet valve NUM_OF_AIR_TRAP_VALVES = 2 # Number of Air Trap Valves @unique class TDAirTrapLevelSensors(DialinEnum): H17_LEVEL = 0 # Lower Level Sensor H16_LEVEL = 1 # Upper Level Sensor NUM_OF_AIR_TRAP_LEVEL_SENSORS = 2 # Number of TD Air Trap Level Sensors @unique class TDAirTrapLevelSensorsAttributes(DialinEnum): LEVEL = 0 # Level attribute for Air Trap Level Sensor RAW = 1 # Raw reading attribute for Air Trap Level Sensor NUM_OF_AIR_TRAP_LEVEL_SENSOR_ATTRIBUTES = 2 # Number of Air Trap Level Sensor attributes @unique class TDAirTrapState(DialinEnum): STATE_CLOSED = 0 # Closed state for Air Trap STATE_OPEN = 1 # Open state for Air Trap @unique class TDBloodFlowMotorAttributes(DialinEnum): SET_BLOOD_FLOW_RATE = 0 # Set Blood Flow Rate for Blood Flow Motor MEASURED_BLOOD_FLOW_RATE = 1 # Measured Blood Flow Rate for Blood Flow Motor MEASURED_BLOOD_PUMP_ROTOR_SPEED = 2 # Measured Bloop Pump Rotor Speed for Blood Flow Motor MEASURED_BLOOD_PUMP_SPEED = 3 # Measured Blood Pump Speed for Blood Flow Motor MEASURED_BLOOD_PUMP_MOTOR_CURRENT = 4 # Measured Blood Pump Motor Current for Blood Flow Motor SET_RPM = 5 # Set Revolutions per minute for Blood Flow Motor ROTOR_COUNT = 6 # Rotor Count for Blood Flow Motor PRES_BLOOD_FLOW_RATE = 7 # Pressure Blood Flow Rate for Blood Flow Motor ROTOR_HALL_STATE = 8 # Rotor Hall State for Blood Flow Motor MEASURED_BLOOD_PUMP_TORQUE = 9 # Measured Blood Pump torque NUM_OF_BLOOD_FLOW_MOTOR_ATTRIBUTES = 10 # Number of Blood Flow Motor Attributes @unique class TDAirBubbleDetectorNames(DialinEnum): H18_ADV = 0 # H18 Air Bubble Detector Venous NUM_OF_AIR_BUBBLE_DETECTORS = 1 # Number of Air Bubble Detectors @unique class TDAirBubbleDetectorAttributes(DialinEnum): STATUS = 0 # Status of the Air Bubble Detector STATE = 1 # State of the Air Bubble Detector NUM_OF_AIR_BUBBLE_DETECTOR_ATTRIBUTES = 2 # Number of Air Bubble Detector Attributes @unique class TDEjectorNames(DialinEnum): H5_MOTOR = 0 # TD Ejector Motor NUM_OF_EJECTOR_MOTORS = 1 # Number of Ejector Motors @unique class TDEjectorAttributes(DialinEnum): STATE = 0 # Ejector State to command SET_SPEED = 1 # Ejector Set Speed NUM_OF_EJECTOR_ATTRIBUTES = 2 # Number of Ejector Attributes @unique class TDPressureSensorNames(DialinEnum): H2_PRES = 0 # Arterial Pressure Sensor H14_PRES = 1 # Venous Pressure Sensor NUM_OF_PRESSURE_SENSORS = 2 # Number of Pressure Sensors @unique class TDPressureSensorAttributes(DialinEnum): PRES = 0 # Pressure attribute of pressure sensor LONG_FILTERED_PRESSURE = 1 # Long Filtered Pressure attribute of pressure sensor PRES_LIMIT_MIN = 2 # Pressure Minimum Limit attribute of pressure sensor PRES_LIMIT_MAX = 3 # Pressure Maximum Limit attribute of pressure sensor NUM_OF_PRESSURE_ATTRIBUTES = 4 # Number of Pressure Sensor Attributes @unique class TDSwitchStatus(DialinEnum): CLOSED = 0 # Closed State of the TD Switch OPEN = 1 # Open State of the TD Switch @unique class TDSwitchesNames(DialinEnum): H9_FRONT_DOOR = 0 # Front Door Switch for TD NUM_OF_DOORS_AND_SWITCHES = 1 # Number of Doors and Switches @unique class TDTreatmentParameters(DialinEnum): TREATMENT_PARAM_BLOOD_FLOW = 0 # Blood flow rate (in mL/min) TREATMENT_PARAM_DIALYSATE_FLOW = 1 # Dialysate flow rate (in mL/min) TREATMENT_PARAM_TREATMENT_DURATION = 2 # Treatment duration (in minutes) TREATMENT_PARAM_SALINE_BOLUS_VOLUME = 3 # Saline bolus volume (in mL) TREATMENT_PARAM_HEPARIN_STOP_TIME = 4 # Heparin stop time (in minutes) TREATMENT_PARAM_HEPARIN_TYPE = 5 # Heparin type (enum) TREATMENT_PARAM_ACID_CONCENTRATE = 6 # Acid concentrate type (enum) TREATMENT_PARAM_BICARB_CONCENTRATE = 7 # Bicarbonate concentrate type (enum) TREATMENT_PARAM_DIALYZER_TYPE = 8 # Dialysate type (enum) TREATMENT_PARAM_BP_MEAS_INTERVAL = 9 # Blood pressure measurement interval (in minutes) TREATMENT_PARAM_RINSEBACK_FLOW_RATE = 10 # Rinseback flow rate (in mL/min) TREATMENT_PARAM_RINSEBACK_VOLUME = 11 # Rinseback volume (in mL) TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW = 12 # Arterial pressure alarm limit window (in mmHg) TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW = 13 # Venous pressure alarm limit window (in mmHg) TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC = 14 # Venous pressure alarm limit asymmetric (in mmHg) TREATMENT_PARAM_TMP_PRES_LIMIT_WINDOW = 15 # TMP alarm limit window (in mmHg) TREATMENT_PARAM_DIALYSATE_TEMPERATURE = 16 # Dialysate temperature (in degC) TREATMENT_PARAM_HEPARIN_DISPENSE_RATE = 17 # Heparin dispense rate (in mL/hr) TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME = 18 # Heparin bolus volume (in mL) TREATMENT_PARAM_UF_VOLUME = 19 # Ultrafiltration volume (in liters) - provided separately by UI NUM_OF_TREATMENT_PARAMS = 20 # Total number of treatment parameters @unique class TDValvesEnum(DialinEnum): H1_VALV = 0 # H1 Valve for TD H19_VALV = 1 # H19 Valve for TD @unique class TDValvesPositions(DialinEnum): VALVE_POSITION_NOT_IN_POSITION = 0 # Valve not in Position VALVE_POSITION_A_INSERT_EJECT = 1 # Insert/Eject Valve Position VALVE_POSITION_B_OPEN = 2 # Open Valve Position VALVE_POSITION_C_CLOSE = 3 # Closed Valve Position @unique class TDValvesStates(DialinEnum): VALVE_STATE_WAIT_FOR_POST = 0 # Waiting for POST Valve State VALVE_STATE_HOMING_NOT_STARTED = 1 # Homing not started Valve State VALVE_STATE_HOMING_FIND_ENERGIZED_EDGE = 2 # Homing Find Energized Edge Valve State VALVE_STATE_HOMING_FIND_DEENERGIZED_EDGE = 3 # Homing Find De-energized Edge Valve State VALVE_STATE_IDLE = 4 # Idle Valve State VALVE_STATE_IN_TRANSITION = 5 # Valve state in transition # Monitored voltages @unique class TDMonitoredVoltages(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_5V_SENSORS = 3 # Sensors voltage (5V) MONITORED_LINE_24V = 4 # Actuators voltage (24V) MONITORED_LINE_24V_REGEN = 5 # Actuators regen voltage (24V) MONITORED_LINE_FPGA_REF_V = 6 # FPGA ADC reference voltage (1V) MONITORED_LINE_PBA_REF_V = 7 # PBA ADC reference voltage (3V) MONITORED_LINE_FPGA_VCC_V = 8 # FPGA Vcc (3V) MONITORED_LINE_FPGA_AUX_V = 9 # FPGA Vaux (3V) MONITORED_LINE_FPGA_PVN_V = 10 # FPGA Vpvn (1V) NUM_OF_MONITORED_VOLTAGE_LINES = 11 # Number of TD operation modes