Index: leahi_dialin/dd/modules/levels.py =================================================================== diff -u -recd89ae316cd2afa695dd4e93ac18b6004975efb -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/levels.py (.../levels.py) (revision ecd89ae316cd2afa695dd4e93ac18b6004975efb) +++ leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -5,7 +5,7 @@ # 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 heaters.py +# @file levels.py # # @author (last) Michael Garthwaite # @date (last) 28-Oct-2024 @@ -25,6 +25,13 @@ from leahi_dialin.utils.checks import check_broadcast_interval_override_ms from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray +@unique +class DDLevelSensorEnum(DialinEnum): + D6_LEVEL = 0 # floater switch low, medium and high status + D63_LEVEL = 1 # bicarb level low or high status + D46_LEVEL = 2 # Spent dialysate air separation chamber level low or high status + NUM_OF_LEVELS = 3 + class DDLevels(AbstractSubSystem): """ @@ -42,42 +49,43 @@ self.can_interface = can_interface self.logger = logger - self.floater1 = 0 - self.bicarb_level = 0 - self.spent_dialysate_level = 0 - self.dd_levels_timestamp = 0 - if self.can_interface is not None: channel_id = DenaliChannels.dd_sync_broadcast_ch_id msg_id = MsgIds.MSG_ID_DD_LEVEL_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_heaters_sync) + self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_levels_sync) + self.d6_level = 0 + self.d63_level = 0 + self.d46_level = 0 + self.dd_levels_timestamp = 0 + + @publish(["dd_levels_timestamp", - "floater1", - "bicarb_level", - "spent_dialysate_level"]) - def _handler_heaters_sync(self, message, timestamp=0.0): + "d6_level", + "d63_level", + "d46_level"]) + def _handler_levels_sync(self, message, timestamp=0.0): """ - Handles published heaters message + Handles published levels message - @param message: published heaters data message + @param message: published levels data message @returns none """ - self.floater1 = struct.unpack('i', bytearray( + self.d6_level = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.bicarb_level = struct.unpack('i', bytearray( + self.d63_level = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.spent_dialysate_level = struct.unpack('i', bytearray( + self.d46_level = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] self.dd_levels_timestamp = timestamp def cmd_levels_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ - Constructs and sends broadcast time interval. + Constructs and sends dd levels broadcast time interval override. Constraints: - Must be logged into DG. - Given interval must be non-zero and a multiple of the DG general task interval (50 ms). + Must be logged into DD. + Given interval must be non-zero and a multiple of the DD general task interval (50 ms). @param ms: (int) Publish time interval in ms @param reset: (int) 1 to reset a previous override, 0 to override @@ -94,7 +102,7 @@ message_id=MsgIds.MSG_ID_DD_LEVELS_PUBLISH_INTERVAL_OVERRIDE_REQUEST.value, payload=payload) - self.logger.debug("Sending {} ms publish interval to the Heaters module".format(ms)) + self.logger.debug("Sending {} ms publish interval to the Levels module".format(ms)) # Send message received_message = self.can_interface.send(message) @@ -108,11 +116,10 @@ def cmd_level_status_override(self, level_sensor: int, status: int, reset: int = NO_RESET) -> int: """ - Constructs and sends heater duty cycle override command - Must be logged into DG - There must be a minimum flow available for the heaters (FMP for primary and FMD for trimmer) + Constructs and sends level status cycle override command + Must be logged into DD. - @param level_sensor the level sensor to override its value (primary, trimmer) (0-1.0 order) + @param level_sensor the level sensor to override @param status the status value to override @param reset: (int) 1 to reset a previous override, 0 to override @returns 1 if successful, zero otherwise