Index: leahi_dialin/common/__init__.py =================================================================== diff -u -rc0bd3c89009d0faaf5cb51b3f7da5bdaee7908c8 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/common/__init__.py (.../__init__.py) (revision c0bd3c89009d0faaf5cb51b3f7da5bdaee7908c8) +++ leahi_dialin/common/__init__.py (.../__init__.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -21,7 +21,7 @@ else: from .alarm_defs import * from .alarm_priorities import * - from .td_defs import td_enum_repository - from .dd_defs import dd_enum_repository - from .fp_defs import fp_enum_repository + from .td_defs_proxy import td_enum_repository + from .dd_defs_proxy import dd_enum_repository + from .fp_defs_proxy import fp_enum_repository from .ui_defs import * Index: leahi_dialin/common/td_defs.py =================================================================== diff -u -r20c821bd230fc7689a0275a2918981669ff5cc19 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/common/td_defs.py (.../td_defs.py) (revision 20c821bd230fc7689a0275a2918981669ff5cc19) +++ leahi_dialin/common/td_defs.py (.../td_defs.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -581,13 +581,21 @@ STATE = 0 # TD Air Pump State to command attribute DUTY_CYCLE = 1 # TD Air Pump Duty Cycle attribute RPM = 2 # TD Air Pump RPM attribute - NUM_OF_AIR_PUMP_ATTRIBUTES = 3 # Number of Air Pump attributes + # TODO remove after feature validation + FPGA_RPM = 3 # TD Air Pump FPGA_RPM attribute + #TODO remove after feature validation + SCALAR_POWER = 4 # TD Air Pump scalar power + NUM_OF_AIR_PUMP_ATTRIBUTES = 5 # Number of Air Pump attributes TDAirPumpAttributes._str_list = { # Official Name : Accepted strings 'STATE': [], 'DUTY_CYCLE': [], 'RPM': [], + # TODO remove after feature validation + 'FPGA_RPM': [], + # TODO remove after feature validation + 'SCALAR_POWER': [], 'NUM_OF_AIR_PUMP_ATTRIBUTES': [], } Index: leahi_dialin/common/test_config_defs.py =================================================================== diff -u -re2bdf2b26c4d68d43a5fd36990b4a1e83cca3256 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/common/test_config_defs.py (.../test_config_defs.py) (revision e2bdf2b26c4d68d43a5fd36990b4a1e83cca3256) +++ leahi_dialin/common/test_config_defs.py (.../test_config_defs.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -33,7 +33,8 @@ TEST_CONFIG_DD_DISABLE_UF_PUMP_SPEED_COMP = 10 # (DD) Test configuration to disable Ultrafiltration speed compensation TEST_CONFIG_DD_DRY_BICART_TEST = 11 # (DD) Test configuration DD to test initial fill , drain and initial chamber fill in pre-gen TEST_CONFIG_DD_RUN_SOLO = 12 # (DD) Test configuration to run DD alone without the other subsystems - NUM_OF_TEST_CONFIGS = 13 # Number of Test Configs + TEST_CONFIG_FP_DISABLE_RO_CURRENT_ALARMS = 13 # (FP) Test configuration to disable RO current alarms + NUM_OF_TEST_CONFIGS = 14 # Number of Test Configs DDFPTestConfigOptions._str_list = {} @unique Index: leahi_dialin/dd/modules/gen_dialysate.py =================================================================== diff -u -r55a8c10a40d37ca346976b11dd5fdc0c8ee76c97 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/dd/modules/gen_dialysate.py (.../gen_dialysate.py) (revision 55a8c10a40d37ca346976b11dd5fdc0c8ee76c97) +++ leahi_dialin/dd/modules/gen_dialysate.py (.../gen_dialysate.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -47,12 +47,12 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_gen_dialysate_mode_data, self._handler_gen_dialysate_sync) - self.execution_state = 0 - self.dialysate_delivery_in_progress = 0 - self.dialysate_good_to_deliver = 0 - self.targetQd = 0.0 - self.isBalancingChamberSwitchingActive = 0 - self.dd_gen_dialysate_timestamp = 0 + self.dd_gen_dialysate_timestamp = 0 #: The timestamp of the last message + self.execution_state = 0 #: The Execution state + self.dialysate_delivery_in_progress = 0 #: Is Dialysate delivery in progress or not + self.dialysate_good_to_deliver = 0 #: The Dialysate is good to delover or not + self.targetQd = 0.0 #: The Target Qd + self.isBalancingChamberSwitchingActive = 0 #: Is the balancing chamber switching or not @publish(["msg_id_dd_gen_dialysate_mode_data", Index: leahi_dialin/dd/modules/temperature_sensors.py =================================================================== diff -u -redccc0fd295ef1c384046edbcc3a83901bfc9bc9 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision edccc0fd295ef1c384046edbcc3a83901bfc9bc9) +++ leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -18,7 +18,7 @@ from logging import Logger from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.dd_defs import dd_enum_repository +from leahi_dialin.common import dd_enum_repository from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliChannels @@ -34,8 +34,16 @@ self.can_interface = can_interface self.logger: Logger = logger - # Dictionary of the temperature sensors - self.dd_temperatures_timestamp = 0.0 + + if self.can_interface is not None: + channel_id = DenaliChannels.dd_sync_broadcast_ch_id + self.msg_id_dd_temperature_data = MsgIds.MSG_ID_DD_TEMPERATURE_DATA.value + self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_temperature_data, + self._handler_temperature_sensors_sync) + + self.dd_temperatures_timestamp = 0.0 #: The timestamp of the latest message + + #: The Temperature Sensors data in dictionary format self.dd_temperatures = { dd_enum_repository.DDTemperatureSensorNames.D1_TEMP.name: 0.0, dd_enum_repository.DDTemperatureSensorNames.D78_TEMP.name: 0.0, @@ -61,13 +69,7 @@ dd_enum_repository.DDTemperatureSensorNames.D87_TEMP.name: 0.0 } - if self.can_interface is not None: - channel_id = DenaliChannels.dd_sync_broadcast_ch_id - self.msg_id_dd_temperature_data = MsgIds.MSG_ID_DD_TEMPERATURE_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_temperature_data, - self._handler_temperature_sensors_sync) - @publish(["msg_id_dd_temperature_data", "dd_temperatures", "dd_temperatures_timestamp"]) def _handler_temperature_sensors_sync(self, message,timestamp=0.0): """ Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -r3326a8c26aa1b50d0b11d51ce0f85a32c5a42e1f -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 3326a8c26aa1b50d0b11d51ce0f85a32c5a42e1f) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -33,7 +33,7 @@ from .proxies.dd_proxy import DDProxy from ..common.constants import NO_RESET -from ..common.fp_defs import fp_enum_repository +from ..common import fp_enum_repository from ..common.msg_defs import MsgIds, MsgFieldPositions, MsgFieldPositionsFWVersions from ..common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from ..protocols.CAN import DenaliMessage, DenaliCanMessenger, DenaliChannels @@ -99,38 +99,49 @@ self.cmd_log_in_to_fp() # create properties - self.fp_defeatured = False - self.fp_defeatured_timestamp = 0.0 - self.fp_op_mode_timestamp = 0.0 - self.fp_debug_events_timestamp = 0.0 - self.fp_version_response_timestamp = 0.0 - self.fp_operation_mode = fp_enum_repository.FPOpModes.MODE_INIT.value - self.fp_operation_sub_mode = 0 - self.fp_logged_in = False + self.fp_defeatured = False #: The FP is defeaturized or not + self.fp_defeatured_timestamp = 0.0 #: The timestamp of the latest defeatured message + self.fp_op_mode_timestamp = 0.0 #: The timestamp of the latest operation mode message + self.fp_debug_events_timestamp = 0.0 #: The timestamp of the latest events message + self.fp_version_response_timestamp = 0.0 #: The timestamp of the latest FP version info message + self.fp_operation_mode = fp_enum_repository.FPOpModes.MODE_INIT.value #: The Operation Mode's value + self.fp_operation_sub_mode = 0 #: The Operation Sub-Mode's value + self.fp_logged_in = False #: The value showing if the user is logged in or not self.fp_set_logged_in_status(False) - self.fp_version = None - self.fp_fpga_version = None - self.fp_debug_events = [''] * self._FP_DEBUG_EVENT_LIST_COUNT - self.fp_debug_event_index = 0 - self.fp_last_debug_event = '' + self.fp_version = None #: The FP's version value + self.fp_fpga_version = None #: The FP's FPGA version value + self.fp_debug_events = [''] * self._FP_DEBUG_EVENT_LIST_COUNT #: The Debug Event's list + self.fp_debug_event_index = 0 #: The index of the last Event + self.fp_last_debug_event = '' #: The name of the last Event # Create command groups - self.alarms = FPAlarms(self.can_interface, self.logger) - self.boost_pump = FPBoostPump(self.can_interface, self.logger) - self.conductivity = FPConductivitySensors(self.can_interface, self.logger) - self.events = FPEvents(self.can_interface, self.logger) - self.flows = FPFlowSensors(self.can_interface, self.logger) - self.fluid_pumps = FPPumps(self.can_interface, self.logger) - self.levels = FPLevels(self.can_interface, self.logger) - self.permeate_tank = FPPermeateTank(self.can_interface, self.logger) - self.pressures = FPPressureSensors(self.can_interface, self.logger) - self.ro_pump = FPROPump(self.can_interface, self.logger) - self.temperatures = FPTemperatureSensors(self.can_interface, self.logger) - self.test_configs = FPTestConfig(self.can_interface, self.logger) - self.valves = FPValves(self.can_interface, self.logger) - self.dd_proxy = DDProxy(self.can_interface, self.logger, fp = self) + self.alarms = FPAlarms(self.can_interface, self.logger) #: The Alarms module + self.boost_pump = FPBoostPump(self.can_interface, self.logger) #: The Boost Pump module + self.conductivity = FPConductivitySensors(self.can_interface, self.logger) #: The Conductivity Sensors module + self.events = FPEvents(self.can_interface, self.logger) #: The Events module + self.flows = FPFlowSensors(self.can_interface, self.logger) #: The Flows module + self.fluid_pumps = FPPumps(self.can_interface, self.logger) #: The Fluid Pumps module + self.levels = FPLevels(self.can_interface, self.logger) #: The Levels module + self.permeate_tank = FPPermeateTank(self.can_interface, self.logger) #: The Permeate Tank module + self.pressures = FPPressureSensors(self.can_interface, self.logger) #: The Pressure Sensors module + self.ro_pump = FPROPump(self.can_interface, self.logger) #: The RO Pump module + self.temperatures = FPTemperatureSensors(self.can_interface, self.logger) #: The Temperature Sensors module + self.test_configs = FPTestConfig(self.can_interface, self.logger) #: The Test Configs module + self.valves = FPValves(self.can_interface, self.logger) #: The Valves module + self.dd_proxy = DDProxy(self.can_interface, self.logger, fp = self) #: The DD Proxy module (imitates commands sent by DD) + + def fp_set_logged_in_status(self, logged_in: bool = False): + """ + Callback for fp logged in status change. + + @param logged_in: Logged in status for FP + @return: None + """ + self.fp_logged_in = logged_in + + @publish(["msg_id_fp_debug_event", "fp_debug_events_timestamp","fp_debug_events"]) def _handler_fp_debug_event_sync(self, message, timestamp = 0.0): """ @@ -159,16 +170,6 @@ self.fp_debug_event_index = 0 - @publish(["fp_logged_in"]) - def fp_set_logged_in_status(self, logged_in: bool = False): - """ - Callback for fp logged in status change. - @param logged_in boolean logged in status for FP - @return: none - """ - self.fp_logged_in = logged_in - - @publish(["msg_id_fp_version_response", "fp_version, fp_fpga_version"]) def _handler_fp_version_response_sync(self,message, timestamp = 0.0): """ Index: leahi_dialin/fp/modules/ro_pump.py =================================================================== diff -u -rf7be27f77aef9eea867a3a19babeee5fd6542577 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/fp/modules/ro_pump.py (.../ro_pump.py) (revision f7be27f77aef9eea867a3a19babeee5fd6542577) +++ leahi_dialin/fp/modules/ro_pump.py (.../ro_pump.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -18,7 +18,7 @@ from logging import Logger from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.fp_defs import fp_enum_repository +from leahi_dialin.common import fp_enum_repository from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliChannels @@ -45,6 +45,9 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_ro_pump_data, self._handler_pump_sync) + self.ro_pump_timestamp = 0.0 #: The timestamp of the last message + + # The RO Pump data in dictionary format self.ro_pump = { fp_enum_repository.FPROPumpNames.P12_PUMP.name: { fp_enum_repository.FPPumpAttributes.STATE.name: 0, @@ -59,9 +62,7 @@ } } - self.ro_pump_timestamp = 0.0 - @publish(["msg_id_fp_ro_pump_data", "ro_pump", "ro_pump_timestamp" ]) def _handler_pump_sync(self, message, timestamp=0.0): """ Index: leahi_dialin/fp/modules/temperatures.py =================================================================== diff -u -r1c5aaf6ff938d0d3fab965e90ac33a5e65d1b1ac -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/fp/modules/temperatures.py (.../temperatures.py) (revision 1c5aaf6ff938d0d3fab965e90ac33a5e65d1b1ac) +++ leahi_dialin/fp/modules/temperatures.py (.../temperatures.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -18,7 +18,8 @@ from logging import Logger from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.fp_defs import fp_enum_repository, BETA_IOFP_COND_SENSOR_OFFSET, BETA_IOFP_PRES_SENSOR_OFFSET +from leahi_dialin.common import fp_enum_repository +from leahi_dialin.common.fp_defs import BETA_IOFP_COND_SENSOR_OFFSET, BETA_IOFP_PRES_SENSOR_OFFSET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliChannels @@ -39,7 +40,10 @@ self.msg_id_fp_temperature_data = MsgIds.MSG_ID_FP_TEMPERATURE_DATA.value self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_temperature_data, self._handler_temperature_sensors_sync) - self.fp_temperature_sensors_timestamp = 0 + + self.fp_temperature_sensors_timestamp = 0 #: The timestamp of the last message + + # The Temperature data in dictionary format self.fp_temperatures = { fp_enum_repository.FPTemperatureSensorNames.M3_TEMP.name: 0.0, fp_enum_repository.FPTemperatureSensorNames.P8_TEMP.name: 0.0, Index: leahi_dialin/fp/modules/valves.py =================================================================== diff -u -rfa006d9b5cfefb4ee1aa2deecd7e80a4aa4a9883 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/fp/modules/valves.py (.../valves.py) (revision fa006d9b5cfefb4ee1aa2deecd7e80a4aa4a9883) +++ leahi_dialin/fp/modules/valves.py (.../valves.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -19,7 +19,8 @@ from collections import OrderedDict from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.fp_defs import fp_enum_repository, BETA_IOFP_VALVE_OFFSET +from leahi_dialin.common import fp_enum_repository +from leahi_dialin.common.fp_defs import BETA_IOFP_VALVE_OFFSET from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels @@ -50,47 +51,29 @@ super().__init__() self.can_interface = can_interface self.logger = logger - self.valves_sensed_states = OrderedDict() - self.fp_valves_states_timestamp = 0.0 if self.can_interface is not None: channel_id = DenaliChannels.fp_sync_broadcast_ch_id self.msg_id_fp_valves_states_data = MsgIds.MSG_ID_FP_VALVES_STATES_DATA.value self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_valves_states_data, self._handler_valves_sync) - self.valve_states_all = 0x0000 - self.m4_valv = {"id": fp_enum_repository.FPValveNames.M4_VALV.value, "state": DEENERGIZED} - self.m12_valv = {"id": fp_enum_repository.FPValveNames.M12_VALV.value, "state": DEENERGIZED} - self.p11_valv = {"id": fp_enum_repository.FPValveNames.P11_VALV.value, "state": DEENERGIZED} - self.p33_valv = {"id": fp_enum_repository.FPValveNames.P33_VALV.value, "state": DEENERGIZED} - self.p34_valv = {"id": fp_enum_repository.FPValveNames.P34_VALV.value, "state": DEENERGIZED} - self.p37_valv = {"id": fp_enum_repository.FPValveNames.P37_VALV.value, "state": DEENERGIZED} - self.p39_valv = {"id": fp_enum_repository.FPValveNames.P39_VALV.value, "state": DEENERGIZED} - self.p6_valv = {"id": fp_enum_repository.FPValveNames.P6_VALV.value, "state": DEENERGIZED} + self.fp_valves_states_timestamp = 0.0 #: The timestamp of the last message + self.valve_states_all = 0x0000 #: States of all the vales in binary format + self.valves_sensed_states = OrderedDict() #: The Valve's Sensed State data in dictionary format + self.m4_valv = {"id": fp_enum_repository.FPValveNames.M4_VALV.value, "state": DEENERGIZED} #: The M4 valve's value + self.m12_valv = {"id": fp_enum_repository.FPValveNames.M12_VALV.value, "state": DEENERGIZED} #: The M12 valve's value + self.p11_valv = {"id": fp_enum_repository.FPValveNames.P11_VALV.value, "state": DEENERGIZED} #: The P11 valve's value + self.p33_valv = {"id": fp_enum_repository.FPValveNames.P33_VALV.value, "state": DEENERGIZED} #: The P33 valve's value + self.p34_valv = {"id": fp_enum_repository.FPValveNames.P34_VALV.value, "state": DEENERGIZED} #: The P34 valve's value + self.p37_valv = {"id": fp_enum_repository.FPValveNames.P37_VALV.value, "state": DEENERGIZED} #: The P37 valve's value + self.p39_valv = {"id": fp_enum_repository.FPValveNames.P39_VALV.value, "state": DEENERGIZED} #: The P39 valve's value + self.p6_valv = {"id": fp_enum_repository.FPValveNames.P6_VALV.value, "state": DEENERGIZED} #: The P6 valve's value - # NOTE: The len function counts the enums with the same number only once. + #: States of all the vales in list format self.valve_states_enum = [0 for _ in range(fp_enum_repository.FPValveNames.NUM_OF_FP_VALVES.value - 1)] for valve in fp_enum_repository.FPValveNames.__members__: self.valves_sensed_states[valve] = '' - - - def get_valve_states(self): - """ - Gets the valve states - - @return: All valve states - """ - return [ - self.m4_valv.get("state"), - self.m12_valv.get("state"), - self.p11_valv.get("state"), - self.p33_valv.get("state"), - self.p34_valv.get("state"), - self.p37_valv.get("state"), - self.p39_valv.get("state"), - self.p6_valv.get("state") - ] @staticmethod Index: leahi_dialin/fp/modules/water_pumps.py =================================================================== diff -u -r38e8dd31728056dbb7f9304c98ab16d7147b75a2 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/fp/modules/water_pumps.py (.../water_pumps.py) (revision 38e8dd31728056dbb7f9304c98ab16d7147b75a2) +++ leahi_dialin/fp/modules/water_pumps.py (.../water_pumps.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -18,7 +18,7 @@ from enum import unique from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.fp_defs import fp_enum_repository +from leahi_dialin.common import fp_enum_repository from leahi_dialin.common.msg_defs import MsgIds from leahi_dialin.common.override_templates import cmd_generic_override from leahi_dialin.protocols.CAN import DenaliChannels Index: leahi_dialin/td/modules/air_pump.py =================================================================== diff -u -r20c821bd230fc7689a0275a2918981669ff5cc19 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/td/modules/air_pump.py (.../air_pump.py) (revision 20c821bd230fc7689a0275a2918981669ff5cc19) +++ leahi_dialin/td/modules/air_pump.py (.../air_pump.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -23,7 +23,7 @@ from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish -from leahi_dialin.utils.conversions import integer_to_bytearray +from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray MAX_AIR_PUMP_POWER_LEVEL = 255 #Maximum air pump power allowed @@ -55,7 +55,11 @@ td_enum_repository.TDAirPumpNames.H12_AIR_PUMP.name: { td_enum_repository.TDAirPumpAttributes.STATE.name: 0, td_enum_repository.TDAirPumpAttributes.DUTY_CYCLE.name: 0, - td_enum_repository.TDAirPumpAttributes.RPM.name: 0 + td_enum_repository.TDAirPumpAttributes.RPM.name: 0, + # TODO remove after FPGA air pump speed validation + td_enum_repository.TDAirPumpAttributes.FPGA_RPM.name: 0, + # TODO remove after FPGA air pump speed validation + td_enum_repository.TDAirPumpAttributes.SCALAR_POWER.name: 0 } } @@ -70,8 +74,12 @@ """ sensor_list =[] sensor_list.append((td_enum_repository.TDAirPumpAttributes.STATE.name, 'i')) - sensor_list.append((td_enum_repository.TDAirPumpAttributes.DUTY_CYCLE.name, 'i')) + sensor_list.append((td_enum_repository.TDAirPumpAttributes.DUTY_CYCLE.name, 'f')) sensor_list.append((td_enum_repository.TDAirPumpAttributes.RPM.name, 'i')) + # TODO remove after FPGA air pump speed validation + sensor_list.append((td_enum_repository.TDAirPumpAttributes.FPGA_RPM.name, 'i')) + # TODO remove after FPGA air pump speed validation + sensor_list.append((td_enum_repository.TDAirPumpAttributes.SCALAR_POWER.name, 'i')) i = 1 for sensor in sensor_list: @@ -118,13 +126,12 @@ if dutyCycle < 0 or dutyCycle > 100: return 0 - power = int((dutyCycle/100) * MAX_AIR_PUMP_POWER_LEVEL) sts = integer_to_bytearray(state) - pwr = integer_to_bytearray(power) + pwr = float_to_bytearray(dutyCycle) payload = sts + pwr state_name = 'start with power' if state == 2 else 'stopped' - power_value = f'{str(power)}' if state == 2 else '' + power_value = f'{str(dutyCycle)}' if state == 2 else '' return cmd_generic_override( payload = payload, reset = NO_RESET, Index: leahi_dialin/td/modules/air_trap.py =================================================================== diff -u -re8bdeec38984b4b800f6d0eca8b9097800efbf40 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/td/modules/air_trap.py (.../air_trap.py) (revision e8bdeec38984b4b800f6d0eca8b9097800efbf40) +++ leahi_dialin/td/modules/air_trap.py (.../air_trap.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -20,7 +20,7 @@ from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override -from leahi_dialin.common.td_defs import td_enum_repository +from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish from leahi_dialin.utils.conversions import integer_to_bytearray @@ -51,6 +51,9 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_air_trap_data, self._handler_air_trap_sync) + self.td_air_trap_timestamp = 0.0 #: The timestamp of the last message + + #: The Air Trap Level Sensors data in dictionary format self.air_trap_level_sensors = { td_enum_repository.TDAirTrapLevelSensorNames.H17_LEVEL.name: { td_enum_repository.TDAirTrapLevelSensorAttributes.LEVEL.name: self.AIR_DETECTED_AT_LEVEL, @@ -61,17 +64,18 @@ td_enum_repository.TDAirTrapLevelSensorAttributes.RAW.name: self.AIR_DETECTED_AT_LEVEL } } + + #: The Air Trap Valves data in dictionary format self.air_trap_valve_states = { td_enum_repository.TDAirTrapValveNames.H13_VALV.name: 0, td_enum_repository.TDAirTrapValveNames.H20_VALV.name: 0 } - self.air_control = 0 - self.airTrapState = 0 + self.air_control = 0 #: Is Air Trap FW logic is activated or not + self.airTrapState = 0 #: The Air Trap's state value # TODO remove after testing self.AirPumpLowerPowerLevel = 0 # TODO remove after testing self.AirPumpRaisePowerLevel = 0 - self.td_air_trap_timestamp = 0.0 @publish(["msg_id_td_air_trap_data", Index: leahi_dialin/td/modules/ejector.py =================================================================== diff -u -r3715028b608b10e1d440a8a738c8a4f70d3d411b -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/td/modules/ejector.py (.../ejector.py) (revision 3715028b608b10e1d440a8a738c8a4f70d3d411b) +++ leahi_dialin/td/modules/ejector.py (.../ejector.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -20,7 +20,7 @@ from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override -from leahi_dialin.common.td_defs import td_enum_repository +from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import DenaliChannels from leahi_dialin.protocols.CAN import DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish @@ -48,6 +48,9 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_ejector_data, self._handler_ejector_sync) + self.td_ejector_timestamp = 0 #: The timestamp of the last message + + #: The TD Ejector data in dictionary format self.h5_motor = { td_enum_repository.TDEjectorNames.H5_MOTOR.name: { td_enum_repository.TDEjectorAttributes.STATE.name: 0, @@ -56,7 +59,6 @@ td_enum_repository.TDEjectorAttributes.OPT_SNSR_ENGAGE: 0 # H24 Optical Sensor } } - self.td_ejector_timestamp = 0 @publish(["msg_id_td_ejector_data", "h5_motor", "td_ejector_timestamp"]) Index: leahi_dialin/td/treatment_delivery.py =================================================================== diff -u -r20c821bd230fc7689a0275a2918981669ff5cc19 -rfc671af6d1a18c900812e68c42ca14da3280e4f1 --- leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 20c821bd230fc7689a0275a2918981669ff5cc19) +++ leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) @@ -14,8 +14,11 @@ # ############################################################################ +# Module imports import struct +from time import sleep +# Project imports from .modules.air_pump import TDAirPump from .modules.air_trap import TDAirTrap from .modules.alarms import TDAlarms @@ -362,7 +365,7 @@ @return: None """ - return cmd_generic_override( + resp = cmd_generic_override( payload = None, reset = NO_RESET, channel_id = DenaliChannels.dialin_to_td_ch_id, @@ -371,6 +374,10 @@ override_text = '', logger = self.logger, can_interface = self.can_interface) + + sleep(1) # Wait for reboot to happen + resp_login = self.cmd_log_in_to_td() + return resp and resp_login def cmd_td_safety_shutdown_override(self, active: int, reset: int = NO_RESET) -> int: