Index: dialin/dg/chemical_disinfect.py =================================================================== diff -u -rc3fa0bd1ad54dddd9f7faee36d806961959f362c -r628a7b586e102eabed5db5bd4ab6651cd300d11c --- dialin/dg/chemical_disinfect.py (.../chemical_disinfect.py) (revision c3fa0bd1ad54dddd9f7faee36d806961959f362c) +++ dialin/dg/chemical_disinfect.py (.../chemical_disinfect.py) (revision 628a7b586e102eabed5db5bd4ab6651cd300d11c) @@ -13,15 +13,14 @@ # @date (original) 02-May-2021 # ############################################################################ -import struct from enum import unique from logging import Logger -from ..common.msg_defs import MsgIds, MsgFieldPositions -from ..protocols.CAN import DenaliChannels +from ..common.msg_defs import MsgIds +from ..protocols.CAN import DenaliChannels, DenaliMessage from ..utils.base import AbstractSubSystem, publish, DialinEnum +from ..utils.conversions import * - @unique class ChemCancellationModes(DialinEnum): CANCELLATION_MODE_NONE = 0 @@ -45,7 +44,7 @@ self.overall_elapsed_time = 0 self.state_elapsed_time = 0 self.chemical_disinfect_target_time = 0 - self.chemical_disinfect_elapsed_time = 0 + self.chemical_disinfect_count_down_time = 0 self.cancellation_mode = 0 self.r1_level = 0 self.r2_level = 0 @@ -67,16 +66,17 @@ @publish(["chemical_disinfect_elapsed_time", "chemical_disinfect_target_time"]) def _handler_chemical_disinfect_to_ui_sync(self, message): """ - Handles published chemical disinfect message + Handles published chemical disinfect message - @param message: published chemical disinfect to UI data message - @returns none - """ - disinfect_target_time = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - disinfect_elapsed_time = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + @param message: published chemical disinfect to UI data message + @returns none + """ + payload = message['message'] + index = DenaliMessage.PAYLOAD_START_INDEX + disinfect_target_time, index = bytearray_to_integer(payload, index, False) + disinfect_elapsed_time, index = bytearray_to_integer(payload, index, False) + self.chemical_disinfect_target_time = int(disinfect_target_time / 1000) self.chemical_disinfect_elapsed_time = int(disinfect_elapsed_time / 1000) @@ -90,25 +90,19 @@ @param message: published chemical disinfect data message @returns none """ - state = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - elapsed_time = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - state_elapsed_time = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - cancellation_mode = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - r1 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - r2 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - target_post_rinse_cnt = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - current_post_rinse_cnt = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - chem_ui_state = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] + payload = message['message'] + index = DenaliMessage.PAYLOAD_START_INDEX + state, index = bytearray_to_integer(payload, index, False) + elapsed_time, index = bytearray_to_integer(payload, index, False) + state_elapsed_time, index = bytearray_to_integer(payload, index, False) + cancellation_mode, index = bytearray_to_integer(payload, index, False) + r1, index = bytearray_to_float(payload, index, False) + r2, index = bytearray_to_float(payload, index, False) + target_post_rinse_cnt, index = bytearray_to_integer(payload, index, False) + current_post_rinse_cnt, index = bytearray_to_integer(payload, index, False) + chem_ui_state, index = bytearray_to_integer(payload, index, False) + self.chemical_disinfect_state = state self.overall_elapsed_time = int(elapsed_time / 1000) self.state_elapsed_time = int(state_elapsed_time / 1000) @@ -118,3 +112,91 @@ self.target_post_rinse_count = target_post_rinse_cnt self.current_post_rinse_count = current_post_rinse_cnt self.chemical_disinfect_ui_state = chem_ui_state + + def get_chem_disinfect_target_time(self) -> int: + """ + Get Chemical Disinfection target time + + @return: (int) + """ + return self.chemical_disinfect_target_time + + def get_chem_disinfect_elapsed_time(self) -> int: + """ + Get Chemical Disinfection elapsed time + + @return: (int) + """ + return self.chemical_disinfect_elapsed_time + + def get_chem_disinfect_state(self) -> int: + """ + Gets Chemical Disinfection state + + @return: (int) + """ + return self.chemical_disinfect_state + + def get_chem_disinfect_overall_elapsed_time(self) -> int: + """ + Gets Chemical Disinfection overall elapsed time + + @return: (int) + """ + return self.overall_elapsed_time + + def get_chem_disinfect_state_elapsed_time(self) -> int: + """ + Gets Chemical Disinfection state elapsed time + + @return: (int) + """ + return self.state_elapsed_time + + def get_chem_disinfect_cancellation_mode(self) -> int: + """ + Gets Chemical Disinfection cancellation mode + + @return: (int) + """ + return self.cancellation_mode + + def get_chem_disinfect_r1_level(self) -> int: + """ + Gets Chemical Disinfection r1 level + + @return: (int) + """ + return self.r1_level + + def get_chem_disinfect_r2_level(self) -> int: + """ + Gets Chemical Disinfection r2 level + + @return: (int) + """ + return self.r2_level + + def get_chem_disinfect_target_post_rinse_count(self) -> int: + """ + Gets Chemical Disinfection target post rinse count + + @return: (int) + """ + return self.target_post_rinse_count + + def get_chem_disinfect_current_post_rinse_count(self) -> int: + """ + Gets Chemical Disinfection current post rinse count + + @return: (int) + """ + return self.current_post_rinse_count + + def get_chem_disinfect_chemical_disinfect_ui_state(self) -> int: + """ + Gets Chemical Disinfection UI state + + @return: (int) + """ + return self.chemical_disinfect_ui_state Index: dialin/ui/dg_simulator.py =================================================================== diff -u -r1bf1193409e2c8b723e52a2eabc6c532e0e64215 -r628a7b586e102eabed5db5bd4ab6651cd300d11c --- dialin/ui/dg_simulator.py (.../dg_simulator.py) (revision 1bf1193409e2c8b723e52a2eabc6c532e0e64215) +++ dialin/ui/dg_simulator.py (.../dg_simulator.py) (revision 628a7b586e102eabed5db5bd4ab6651cd300d11c) @@ -445,28 +445,43 @@ self.can_interface.send(message, 0) def cmd_send_version_dg_data(self, major: int, minor: int, micro: int, build: int, - fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int) -> None: + fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int, + compatibility_rev: int) -> None: """ + [0x1E00] # 30 0x080 Rsp Y DG All + DG f/w version + U08=Major + U08=Minor + U08=Micro + U16=Build + U08=FPGA ID + U08=FPGA Major + U08=FPGA Minor + U08=FPGA Lab + U32=compatibility rev + --- the dg version response message method - @param major: integer - Major version number - @param minor: integer - Minor version number - @param micro: integer - Micro version number - @param build: integer - Build version number - @param fpga_id: integer - FPGA id version number - @param fpga_major: integer - FPGA Major version number - @param fpga_minor: integer - FPGA Minor version number - @param fpga_lab: integer - FPGA Lab version number + @param major: (uint) - Major version number + @param minor: (uint) - Minor version number + @param micro: (uint) - Micro version number + @param build: (uint) - Build version number + @param fpga_id: (int) - FPGA id version number + @param fpga_major: (int) - FPGA Major version number + @param fpga_minor: (int) - FPGA Minor version number + @param fpga_lab: (int) - FPGA Lab version number + @param compatibility_rev: (uint) - The FWs/UI compatibility revision @return: None """ - payload = byte_to_bytearray(major) - payload += byte_to_bytearray(minor) - payload += byte_to_bytearray(micro) - payload += short_to_bytearray(build) - payload += byte_to_bytearray(fpga_id) - payload += byte_to_bytearray(fpga_major) - payload += byte_to_bytearray(fpga_minor) - payload += byte_to_bytearray(fpga_lab) + payload = unsigned_byte_to_bytearray(major) + payload += unsigned_byte_to_bytearray(minor) + payload += unsigned_byte_to_bytearray(micro) + payload += unsigned_short_to_bytearray(build) + payload += unsigned_byte_to_bytearray(fpga_id) + payload += unsigned_byte_to_bytearray(fpga_major) + payload += unsigned_byte_to_bytearray(fpga_minor) + payload += unsigned_byte_to_bytearray(fpga_lab) + payload += unsigned_integer_to_bytearray(compatibility_rev) message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_DG_VERSION.value, @@ -591,7 +606,7 @@ has_parameters: bool = False, parameters_payload: any = 0x00) -> None: """ - a general method to send any standard response message, by it's id and list of paramters. + a general method to send any standard response message, by it's id and list of parameters. @param message_id: the id of the message @param accepted: the standard accepted parameter of any response message @param reason: the standard rejection reason parameter of any response message @@ -607,7 +622,7 @@ payload += integer_to_bytearray(reason) if has_parameters: - payload += parameters_payload + payload = parameters_payload message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_to_ui_ch_id, message_id=message_id,