Index: leahi_dialin/fp/modules/valves.py =================================================================== diff -u -ra4ec379f84f2a737f2f5c16fb925f1371c9fd55a -ree0ca62a34e13183d43fb3830b774f3fed9989b6 --- leahi_dialin/fp/modules/valves.py (.../valves.py) (revision a4ec379f84f2a737f2f5c16fb925f1371c9fd55a) +++ leahi_dialin/fp/modules/valves.py (.../valves.py) (revision ee0ca62a34e13183d43fb3830b774f3fed9989b6) @@ -7,8 +7,8 @@ # # @file valves.py # -# @author (last) Micahel Garthwaite -# @date (last) 17-Aug-2023 +# @author (last) Zoltan Miskolci +# @date (last) 08-Dec-2025 # @author (original) Peman Montazemi # @date (original) 19-May-2020 # @@ -39,8 +39,10 @@ """ # Valves states publish message field positions - START_POS_VALVES_STATES = DenaliMessage.PAYLOAD_START_INDEX - END_POS_VALVES_STATES = START_POS_VALVES_STATES + 2 # Valves States come in as a U16 value (2 bytes) + START_IO_VALVES_STATES = DenaliMessage.PAYLOAD_START_INDEX + END_IO_VALVES_STATES = START_IO_VALVES_STATES + 1 # IO Valves States come in as a U08 value (1 byte) + START_FP_VALVES_STATES = END_IO_VALVES_STATES + END_FP_VALVES_STATES = START_FP_VALVES_STATES + 1 # FP Valves States come in as a U08 value (1 byte) def __init__(self, can_interface, logger: Logger): """ @@ -113,19 +115,25 @@ @param message: published FP valves states message @return: none """ - vst = struct.unpack('H', bytearray(message['message'][self.START_POS_VALVES_STATES:self.END_POS_VALVES_STATES])) - self.valve_states_all = vst[0] - # Extract each valve state from U16 valves states using bit-masking - self.m4_valv["state"] = self._binary_to_valve_state(vst[0] & 1) - self.m12_valv["state"] = self._binary_to_valve_state(vst[0] & 2) - self.p11_valv["state"] = self._binary_to_valve_state(vst[0] & 4) - self.p33_valv["state"] = self._binary_to_valve_state(vst[0] & 8) - self.p34_valv["state"] = self._binary_to_valve_state(vst[0] & 16) - self.p37_valv["state"] = self._binary_to_valve_state(vst[0] & 32) - self.p39_valv["state"] = self._binary_to_valve_state(vst[0] & 64) - self.p6_valv["state"] = self._binary_to_valve_state(vst[0] & 128) - start = self.END_POS_VALVES_STATES + # Extract each valve state from U08 valves states using bit-masking + io_valves = struct.unpack('B', bytearray(message['message'][self.START_IO_VALVES_STATES:self.END_IO_VALVES_STATES])) + self.m4_valv["state"] = self._binary_to_valve_state(io_valves[0] & 1) + self.m12_valv["state"] = self._binary_to_valve_state(io_valves[0] & 2) + self.valve_states_all = io_valves[0] + + # Extract each valve state from U08 valves states using bit-masking + fp_valves = struct.unpack('B', bytearray(message['message'][self.START_FP_VALVES_STATES:self.END_FP_VALVES_STATES])) + self.p11_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 1) + self.p33_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 2) + self.p34_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 4) + self.p37_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 8) + self.p39_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 16) + self.p6_valv["state"] = self._binary_to_valve_state(fp_valves[0] & 32) + self.valve_states_all += fp_valves[0] << 8 + + # Extract each valve sensed state from U08 valves states using bit-masking + start = self.END_FP_VALVES_STATES end = start + 1 for valve_id in self.valves_sensed_states: valve_state_number = struct.unpack('B', bytearray(message['message'][start:end]))[0]