Index: leahi_dialin/common/td_defs.py =================================================================== diff -u -r4064308ce07e6e48ad62e9dececd4964af2288f9 -r4d2710b034b98dcae6da6260b751e5968c05ad3b --- leahi_dialin/common/td_defs.py (.../td_defs.py) (revision 4064308ce07e6e48ad62e9dececd4964af2288f9) +++ leahi_dialin/common/td_defs.py (.../td_defs.py) (revision 4d2710b034b98dcae6da6260b751e5968c05ad3b) @@ -855,6 +855,38 @@ @unique +class TDBatteryRegisterNames(DialinEnum): + REMAINING_CAPACITY = 0 # Remaining capacity in mAh + BATTERY_STATUS = 1 # Battery pack status + BATTERY_CHARGE_STATUS = 2 # Battery charge status + BATTERY_I2C_STATUS = 3 # Battery I2C status + FAULT_STATUS = 4 # Charger fault status + THERMISTOR_PCT = 5 # Thermistor percentage + BATTERY_VOLTAGE = 6 # Battery voltage in mV + SYSTEM_VOLTAGE = 7 # System voltage in mV + BATTERY_CURRENT = 8 # Battery current in mAh + RELATIVE_STATE_OF_CHARGE = 9 # Relative state of charge + FULL_CHARGE_CAPACITY = 10 # Full charge capacity in mAh + NUM_OF_BATTERIES = 11 # Number of Batteries + +TDBatteryRegisterNames._str_list = { + # Official Name : Accepted strings + 'REMAINING_CAPACITY': [], + 'BATTERY_STATUS': [], + 'BATTERY_CHARGE_STATUS': [], + 'BATTERY_I2C_STATUS': [], + 'FAULT_STATUS': [], + 'THERMISTOR_PCT': [], + 'BATTERY_VOLTAGE': [], + 'SYSTEM_VOLTAGE': [], + 'BATTERY_CURRENT': [], + 'RELATIVE_STATE_OF_CHARGE': [], + 'FULL_CHARGE_CAPACITY': [], + 'NUM_OF_BATTERIES': [], +} + + +@unique class TDEjectorNames(DialinEnum): H5_MOTOR = 0 # TD Ejector Motor NUM_OF_EJECTOR_MOTORS = 1 # Number of Ejector Motors @@ -977,7 +1009,20 @@ 'NUM_OF_AIR_PUMP_ATTRIBUTES': [], } +class TDAirPumpStates(DialinEnum): + AIR_PUMP_STATE_INIT = 0 # Air Pump Initialize state + AIR_PUMP_STATE_OFF = 1 # Air Pump Off state + AIR_PUMP_STATE_ON = 2 # Air Pump On state + NUM_OF_AIR_PUMP_STATES = 3 # Number of air pump states +TDAirPumpStates._str_list = { + 'AIR_PUMP_STATE_INIT': ['init'], + 'AIR_PUMP_STATE_OFF': ['off'], + 'AIR_PUMP_STATE_ON': ['on'], + 'NUM_OF_AIR_PUMP_STATES ': [] +} + + @unique class TDAirTrapLevelSensorAttributes(DialinEnum): LEVEL = 0 # Level attribute for Air Trap Level Sensor @@ -1138,47 +1183,37 @@ @unique class TDValvePositions(DialinEnum): - VALVE_POSITION_NOT_IN_POSITION = 0 # Valve not in Position - VALVE_POSITION_A_INSERT_LOAD = 1 # Insert/Eject Valve Position - VALVE_POSITION_B_OPEN_BLOOD = 2 # Open Valve Position - VALVE_POSITION_C_CLOSE_SALINE = 3 # Closed Valve Position - VALVE_POSITION_C_PARTIAL_CLOSE = 4 # Partial Close Valve Position - NUM_OF_VALVE_POSITIONS = 5 # Partial Close Valve Position + NOT_IN_POSITION = 0 # Valve not in Position + A_INSERT_INSERT_EJECT = 1 # Insert/Eject Valve Position + B_OPEN_BLOOD = 2 # Open Valve Position + C_CLOSE = 3 # Closed Valve Position + NUM_OF_VALVE_POSITIONS = 4 # Number of valve positions TDValvePositions._str_list = { # Official Name : Accepted strings - 'VALVE_POSITION_NOT_IN_POSITION': ['not in position'], - 'VALVE_POSITION_A_INSERT_LOAD': ['a', 'insert/eject', 'insert', 'eject', 'load'], - 'VALVE_POSITION_B_OPEN_BLOOD': ['b', 'open', 'blood'], - 'VALVE_POSITION_C_CLOSE_SALINE': ['c', 'close', 'closed', 'saline'], - 'VALVE_POSITION_C_PARTIAL_CLOSE': [], + 'NOT_IN_POSITION': ['not in position'], + 'A_INSERT_INSERT_EJECT': ['a', 'insert/eject', 'insert', 'eject', 'load'], + 'B_OPEN_BLOOD': ['b', 'open', 'blood'], + 'C_CLOSE': ['c', 'close', 'closed', 'saline'], 'NUM_OF_VALVE_POSITIONS': [], } @unique class TDValveStates(DialinEnum): - VALVE_STATE_WAIT_FOR_POST = 0 # Waiting for POST Valve State - VALVE_STATE_RESET_VALVE = 1 # Valve state reset valve. - VALVE_STATE_RESET_ENCODER = 2 # Valve state reset encoder. - VALVE_STATE_ENABLE_VALVE = 3 # Valve state enable valve. - VALVE_STATE_HOMING_NOT_STARTED = 4 # Valve state homing not started. - VALVE_STATE_HOMING_FIND_ENERGIZED_EDGE = 5 # Valve state homing find energized edge. - VALVE_STATE_HOMING_FIND_DEENERGIZED_EDGE = 6 # Valve state homing find. - VALVE_STATE_IDLE = 7 # Idle Valve State. - VALVE_STATE_IN_TRANSITION = 8 # Valve state in transition. + WAIT_FOR_POST = 0 # Waiting for POST Valve State + HOMING_NOT_HOMED = 1 # Valve state homing not homed. + IDLE = 2 # Idle Valve State. + IN_TRANSITION = 3 # Valve state in transition. + NUM_OF_VALVE_STATES = 4 # Number of valve states. TDValveStates._str_list = { # Official Name : Accepted strings - 'VALVE_STATE_WAIT_FOR_POST': ['wait', 'wait for post'], - 'VALVE_STATE_RESET_VALVE': ['reset valve'], - 'VALVE_STATE_RESET_ENCODER': ['reset encoder'], - 'VALVE_STATE_ENABLE_VALVE': ['enable', 'enable valve'], - 'VALVE_STATE_HOMING_NOT_STARTED': ['homing not started', 'not started'], - 'VALVE_STATE_HOMING_FIND_ENERGIZED_EDGE': ['homing find energized edge'], - 'VALVE_STATE_HOMING_FIND_DEENERGIZED_EDGE': ['homing find deenergized edge'], - 'VALVE_STATE_IDLE': ['idle'], - 'VALVE_STATE_IN_TRANSITION': [], + 'WAIT_FOR_POST': ['wait', 'wait for post'], + 'HOMING_NOT_HOMED': ['homing not started', 'not started'], + 'IDLE': ['idle'], + 'IN_TRANSITION': [], + 'NUM_OF_VALVE_STATES': [], } Index: leahi_dialin/td/modules/alarms.py =================================================================== diff -u -rc2f174da6eec4d8ce0e76a1926beb5ca1d9680ea -r4d2710b034b98dcae6da6260b751e5968c05ad3b --- leahi_dialin/td/modules/alarms.py (.../alarms.py) (revision c2f174da6eec4d8ce0e76a1926beb5ca1d9680ea) +++ leahi_dialin/td/modules/alarms.py (.../alarms.py) (revision 4d2710b034b98dcae6da6260b751e5968c05ad3b) @@ -156,6 +156,16 @@ self.alarm_table = {} #: The Alarm Table with Alarm Property details + def get_active_alarms(self): + """ + Get the currently active alarms + """ + result = [] + for alarm in AlarmList: + if self.alarm_states[alarm.value]: + result.append(alarm) + return result + def clear_dialin_alarms(self): """ Clears the alarms states in Dialin. Index: leahi_dialin/td/modules/syringe_pump.py =================================================================== diff -u -r12f6d9b3476d413d861dc9589635ec05bf8e6f9d -r4d2710b034b98dcae6da6260b751e5968c05ad3b --- leahi_dialin/td/modules/syringe_pump.py (.../syringe_pump.py) (revision 12f6d9b3476d413d861dc9589635ec05bf8e6f9d) +++ leahi_dialin/td/modules/syringe_pump.py (.../syringe_pump.py) (revision 4d2710b034b98dcae6da6260b751e5968c05ad3b) @@ -34,7 +34,7 @@ def __init__(self, can_interface: CanMessenger, logger: Logger): """ - @param can_interface: Denali Can Messenger object + @param can_interface: Can Messenger object """ super().__init__() self.can_interface = can_interface Index: leahi_dialin/td/proxies/ui_proxy.py =================================================================== diff -u -r3e8c15745640db0568536912a36704a567bd73c2 -r4d2710b034b98dcae6da6260b751e5968c05ad3b --- leahi_dialin/td/proxies/ui_proxy.py (.../ui_proxy.py) (revision 3e8c15745640db0568536912a36704a567bd73c2) +++ leahi_dialin/td/proxies/ui_proxy.py (.../ui_proxy.py) (revision 4d2710b034b98dcae6da6260b751e5968c05ad3b) @@ -447,3 +447,35 @@ override_text = 'N/A', logger = self.logger, can_interface = self.can_interface) + + + def cmd_send_ui_cartridge_install_confirm_response (self) -> None: + """ + Constructs and sends a UI response for confirming cartridge installation. + + :return: none + """ + cmd_generic_override(payload = None, + reset = None, + channel_id = CanChannels.ui_to_td_ch_id, + msg_id = MsgIds.MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST, + entity_name = 'UI Confirm Cartridge Installation response', + override_text = 'N/A', + logger = self.logger, + can_interface = self.can_interface) + + + def cmd_send_ui_cartridge_removal_confirm_response (self) -> None: + """ + Constructs and sends a UI response for confirming cartridge removal. + + :return: none + """ + cmd_generic_override(payload = None, + reset = None, + channel_id = CanChannels.ui_to_td_ch_id, + msg_id = MsgIds.MSG_ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_REQUEST, + entity_name = 'UI Confirm Cartridge Removal response', + override_text = 'N/A', + logger = self.logger, + can_interface = self.can_interface) Index: leahi_dialin/td/treatment_delivery.py =================================================================== diff -u -r5da4d355d70170b4a8bb2a99893667c629a8946e -r4d2710b034b98dcae6da6260b751e5968c05ad3b --- leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 5da4d355d70170b4a8bb2a99893667c629a8946e) +++ leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 4d2710b034b98dcae6da6260b751e5968c05ad3b) @@ -22,13 +22,16 @@ from .modules.air_pump import TDAirPump from .modules.air_trap import TDAirTrap from .modules.alarms import TDAlarms +from .modules.battery import TDBattery from .modules.blood_flow import TDBloodFlow +from .modules.blood_pressure import TDBloodPressure from .modules.bubble_detector import TDBubbleDetector from .modules.buttons import TDButtons from .modules.dry_self_test import TDDrySelfTest from .modules.ejector import TDEjector from .modules.events import TDEvents from .modules.pressure_sensors import TDPressureSensors +from .modules.records import TDRecords from .modules.switches import TDSwitches from .modules.syringe_pump import TDSyringePump from .modules.temperature_sensors import TDTemperatureSensors @@ -129,13 +132,16 @@ self.air_pump = TDAirPump(self.can_interface, self.logger) #: The Air Pump module self.air_trap = TDAirTrap(self.can_interface, self.logger) #: The Air Trap module self.alarms = TDAlarms(self.can_interface, self.logger) #: The Alarms module + self.battery = TDBattery(self.can_interface, self.logger) #: The Battery module self.blood_flow = TDBloodFlow(self.can_interface, self.logger) #: The Blood Flow module + self.blood_pressure = TDBloodPressure(self.can_interface, self.logger) #: The Blood Pressure module self.bubbles = TDBubbleDetector(self.can_interface, self.logger) #: The Bubble Detector module self.buttons = TDButtons(self.can_interface, self.logger) #: The Buttons module self.dry_self_test = TDDrySelfTest(self.can_interface, self.logger) #: The Dry Self Test module self.ejector = TDEjector(self.can_interface, self.logger) #: The Ejector module self.events = TDEvents(self.can_interface, self.logger) #: The Events module self.pressure_sensors = TDPressureSensors(self.can_interface, self.logger) #: The Pressure Sensors module + self.records = TDRecords(self.can_interface, self.logger) #: The Records module self.switches = TDSwitches(self.can_interface, self.logger) #: The Switches module self.syringe_pump = TDSyringePump(self.can_interface, self.logger) #: The Syringe Pump module self.temperature_sensors = TDTemperatureSensors(self.can_interface, self.logger) #: The Temperature Sensors module Index: leahi_dialin/ui/fp_messaging.py =================================================================== diff -u -r49b711a972d5843dd6d5bd7850f3db5c8f8bb1bc -r4d2710b034b98dcae6da6260b751e5968c05ad3b --- leahi_dialin/ui/fp_messaging.py (.../fp_messaging.py) (revision 49b711a972d5843dd6d5bd7850f3db5c8f8bb1bc) +++ leahi_dialin/ui/fp_messaging.py (.../fp_messaging.py) (revision 4d2710b034b98dcae6da6260b751e5968c05ad3b) @@ -306,7 +306,7 @@ payload += conversions.float_to_bytearray(avgRORejectionRatioTankFill ) payload += conversions.unsigned_integer_to_bytearray(genPermeateState ) - message = CAN.DenaliMessage.build_message( + message = CAN.CanMessage.build_message( channel_id=CAN.CanChannels.fp_sync_broadcast_ch_id, message_id=msg_ids.MsgIds.MSG_ID_FP_RO_REJECTION_RATIO_DATA.value, payload=payload)