Index: leahi_dialin/td/modules/valves.py =================================================================== diff -u -r90e9dd322da3b2acde64c2a205693e9ad937a9cb -rfc99e89f17c6c06ee5b783d92eabf405de39abf9 --- leahi_dialin/td/modules/valves.py (.../valves.py) (revision 90e9dd322da3b2acde64c2a205693e9ad937a9cb) +++ leahi_dialin/td/modules/valves.py (.../valves.py) (revision fc99e89f17c6c06ee5b783d92eabf405de39abf9) @@ -52,7 +52,8 @@ class TDValves(AbstractSubSystem): """ - Hemodialysis Device (HD) Dialin API sub-class for valves related commands. + + Treatment Delivery (TD) Dialin API sub-class for valves related commands. """ # Valves states publish message field positions # Note the MsgFieldPosition was not used since some of the published data are S16 @@ -74,7 +75,7 @@ def __init__(self, can_interface, logger: Logger): """ - DGDrainPump constructor + TDValves constructor @param can_interface: (DenaliCanMessenger) - Denali CAN messenger object. @param logger: (Logger) - Dialin logger @@ -94,6 +95,34 @@ self.valves_status = {ValvesEnum.VBA.name: {}, ValvesEnum.VBV.name: {}} + @publish(["td_valves_timestamp","valves_status"]) + def _handler_valves_sync(self, message: dict, timestamp=0.0) -> None: + """ + Handles published valves data messages. TD valves data are captured + for reference. + + @param message: published TD valves data message + @returns none + """ + vlv_id = struct.unpack('i', bytearray( + message['message'][self.START_POS_VALVES_ID:self.END_POS_VALVES_ID]))[0] + state_id = struct.unpack('i', bytearray( + message['message'][self.START_VALVES_STATE:self.END_VALVES_STATE]))[0] + pos_id = struct.unpack('i', bytearray( + message['message'][self.START_POS_VALVES_CURR_POS_ID:self.END_POS_VALVES_CURR_POS_ID]))[0] + pos_cnt = struct.unpack('h', bytearray( + message['message'][self.START_POS_VALVES_CURR_POS:self.END_POS_VALVES_CURR_POS]))[0] + next_pos = struct.unpack('h', bytearray( + message['message'][self.START_POS_VALVES_NEXT_POS:self.END_POS_VALVES_NEXT_POS]))[0] + + # To make sure values of the enums are not out of range + if ValvesEnum.has_value(vlv_id) and ValvesPositions.has_value(pos_id) and ValvesStates.has_value(pos_id): + vlv_name = ValvesEnum(vlv_id).name + # Update the valves dictionary + self.valves_status[vlv_name] = {'Valve': vlv_name, 'PosID': ValvesPositions(pos_id).name, 'PosCnt': pos_cnt, + 'Cmd': next_pos, 'State': ValvesStates(state_id).name} + self.td_valves_timestamp = timestamp + def cmd_valves_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends broadcast time interval @@ -273,30 +302,3 @@ self.logger.debug("TD valve position override Timeout!!!") return False - @publish(["td_valves_timestamp","valves_status"]) - def _handler_valves_sync(self, message: dict, timestamp=0.0) -> None: - """ - Handles published valves data messages. TD valves data are captured - for reference. - - @param message: published TD valves data message - @returns none - """ - vlv_id = struct.unpack('i', bytearray( - message['message'][self.START_POS_VALVES_ID:self.END_POS_VALVES_ID]))[0] - state_id = struct.unpack('i', bytearray( - message['message'][self.START_VALVES_STATE:self.END_VALVES_STATE]))[0] - pos_id = struct.unpack('i', bytearray( - message['message'][self.START_POS_VALVES_CURR_POS_ID:self.END_POS_VALVES_CURR_POS_ID]))[0] - pos_cnt = struct.unpack('h', bytearray( - message['message'][self.START_POS_VALVES_CURR_POS:self.END_POS_VALVES_CURR_POS]))[0] - next_pos = struct.unpack('h', bytearray( - message['message'][self.START_POS_VALVES_NEXT_POS:self.END_POS_VALVES_NEXT_POS]))[0] - - # To make sure values of the enums are not out of range - if ValvesEnum.has_value(vlv_id) and ValvesPositions.has_value(pos_id) and ValvesStates.has_value(pos_id): - vlv_name = ValvesEnum(vlv_id).name - # Update the valves dictionary - self.valves_status[vlv_name] = {'Valve': vlv_name, 'PosID': ValvesPositions(pos_id).name, 'PosCnt': pos_cnt, - 'Cmd': next_pos, 'State': ValvesStates(state_id).name} - self.td_valves_timestamp = timestamp \ No newline at end of file