Index: dialin/protocols/CAN.py =================================================================== diff -u -rda00dd6fd659901cce93ebedeb6fa9ae1220e889 -r458f1c2912c317eea92fb77863e719accf4625f3 --- dialin/protocols/CAN.py (.../CAN.py) (revision da00dd6fd659901cce93ebedeb6fa9ae1220e889) +++ dialin/protocols/CAN.py (.../CAN.py) (revision 458f1c2912c317eea92fb77863e719accf4625f3) @@ -648,7 +648,7 @@ if self.ui_received_function_ptr is not None: self.thread_pool_executor.submit( self.ui_received_function_ptr, - complete_dialin_message + complete_dialin_message, message.timestamp ) if dialin_ch_id in self.sync_response_dictionary.keys() and \ Index: dialin/ui/dg_simulator.py =================================================================== diff -u -racd09d02879e8add4cf7f694f5db8e423a76c341 -r458f1c2912c317eea92fb77863e719accf4625f3 --- dialin/ui/dg_simulator.py (.../dg_simulator.py) (revision acd09d02879e8add4cf7f694f5db8e423a76c341) +++ dialin/ui/dg_simulator.py (.../dg_simulator.py) (revision 458f1c2912c317eea92fb77863e719accf4625f3) @@ -37,11 +37,14 @@ self.console_out = console_out self.can_interface = DenaliCanMessenger(can_interface=can_interface, logger=self.logger, - log_can=self._log_manager.log_level == "CAN_ONLY", console_out=console_out, passive_mode=passive_mode) self.can_interface.start() + self.ui_dg_set_rtc_req_timestamp = 0.0 + self.ui_dg_fw_version_req_timestamp = 0.0 + self.ui_service_info_req_timestamp = 0.0 + if self.can_interface is not None: channel_id = DenaliChannels.ui_to_dg_ch_id if auto_response: @@ -55,13 +58,14 @@ MsgIds.MSG_ID_UI_REQUEST_SERVICE_INFO.value, self._handler_system_usage_response) - def _handler_system_usage_response(self) -> None: + def _handler_system_usage_response(self,message,timestamp=0.0) -> None: """ Handles a request for system usage @return: None """ self.logger.debug("Handling request for system usage.") + self.ui_service_info_req_timestamp = timestamp payload = integer_to_bytearray(1619628663) payload += integer_to_bytearray(1619887863) @@ -72,7 +76,7 @@ self.can_interface.send(message, 0) - def _handler_set_rtc_request(self, message: dict) -> None: + def _handler_set_rtc_request(self, message: dict,timestamp=0.0) -> None: """ Handles a request to set the DG RTC @param message: (dict) the message content @@ -81,7 +85,7 @@ epoch = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - + self.ui_dg_set_rtc_req_timestamp = timestamp self.logger.debug("DG: Request to set the DG epoch to {0}".format(epoch)) self.cmd_send_set_rtc_response(YES, 0) @@ -420,14 +424,14 @@ self.can_interface.send(message, 0) - def _handler_request_dg_version(self) -> None: + def _handler_request_dg_version(self, message,timestamp=0.0) -> None: """ Handles a request for the HD version @return: None """ self.logger.debug("Handling request for dg version.") - + self.ui_dg_fw_version_req_timestamp = timestamp self.cmd_send_version_dg_data(9, 9, 9, 9, 9, 9, 9, 9) self.cmd_send_dg_serial_number() Index: dialin/ui/hd_simulator.py =================================================================== diff -u -rdfedb9e75921e1dc2f9186575b2705741a438d3c -r458f1c2912c317eea92fb77863e719accf4625f3 --- dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision dfedb9e75921e1dc2f9186575b2705741a438d3c) +++ dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 458f1c2912c317eea92fb77863e719accf4625f3) @@ -61,11 +61,21 @@ self.console_out = console_out self.can_interface = DenaliCanMessenger(can_interface=can_interface, logger=self.logger, - log_can=self._log_manager.log_level == "CAN_ONLY", console_out=console_out, passive_mode=passive_mode) self.can_interface.start() + self.ui_initiate_treatment_req_timestamp = 0.0 + self.ui_set_uf_volume_parameter_timestamp = 0.0 + self.ui_new_treatment_parameters_timestamp = 0.0 + self.ui_user_confirm_treatment_parameters_timestamp = 0.0 + self.ui_tx_end_cmd_timestamp = 0.0 + self.ui_hd_set_rtc_req_timestamp = 0.0 + self.ui_fw_versions_req_timestamp = 0.0 + self.ui_service_info_req_timestamp = 0.0 + self.ui_version_info_response_timestamp = 0.0 + self.ui_version_info_compatibility_timestamp = 0.0 + if self.can_interface is not None: channel_id = DenaliChannels.ui_to_hd_ch_id if auto_response: @@ -154,13 +164,13 @@ """ return self.ui_version - def _handler_system_usage_response(self) -> None: + def _handler_system_usage_response(self, message, timestamp=0.0) -> None: """ Handles a request for system usage @return: None """ - + self.ui_service_info_req_timestamp = timestamp payload = integer_to_bytearray(1619628663) payload += integer_to_bytearray(1619887863) @@ -170,7 +180,7 @@ self.can_interface.send(message, 0) - def _handler_set_rtc_request(self, message: dict) -> None: + def _handler_set_rtc_request(self, message: dict, timestamp=0.0) -> None: """ Handles a UI request to set the HD RTC @param message: (dict) the message containing the request @@ -179,6 +189,7 @@ epoch = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.ui_hd_set_rtc_req_timestamp = timestamp self.logger.debug("Request to set the HD epoch to {0}".format(epoch)) @@ -304,7 +315,7 @@ payload=None) self.can_interface.send(message, 0) - def _handler_ui_confirm_treatment(self, message): + def _handler_ui_confirm_treatment(self, message, timestamp=0.0): """ Handler function to detect when a treatment is confirmed @@ -314,7 +325,7 @@ request = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - + self.ui_user_confirm_treatment_parameters_timestamp = timestamp if request == 0: self.logger.debug("Received UI cancel confirmation of Treatment Parameters. ") return @@ -331,7 +342,7 @@ sleep(0.05) self.logger.debug("Finished priming.") - def _handler_ui_pre_treatment_uf_request(self, message): + def _handler_ui_pre_treatment_uf_request(self, message, timestamp=0.0): """ Handles the ui pre treatment uf request and sends a response @param message: The ui pretreatment uf request message @@ -342,10 +353,10 @@ message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] self.logger.debug("Received UF Volume: {0} mL".format(uf_volume)) - + self.ui_set_uf_volume_parameter_timestamp = timestamp self.cmd_send_uf_treatment_response(1, 0, uf_volume) - def _handler_ui_initiate_treatment(self, message): + def _handler_ui_initiate_treatment(self, message,timestamp=0.0): """ Handler function to start a treatment @@ -366,6 +377,7 @@ self.logger.debug("Starting treatment") self.cmd_send_hd_operation_mode(HDOpModes.MODE_TREA.value) + self.ui_initiate_treatment_req_timestamp = timestamp self.cmd_initiate_treatment_response(YES, 0) def cmd_initiate_treatment_response(self, response: int, reason: int): @@ -441,7 +453,7 @@ self.can_interface.send(message, 0) - def _handler_ui_validate_parameters(self) -> None: + def _handler_ui_validate_parameters(self, message, timestamp=0.0) -> None: """ handler for UI parameters validation @@ -467,7 +479,7 @@ self.treatment_parameter_rejections.param_heparin_bolus_volume, self.treatment_parameter_rejections.param_dialysate_temp ] - + self.ui_new_treatment_parameters_timestamp = timestamp self.cmd_send_treatment_parameter_validation_response(rejections) def test_started(self, test_name: str): @@ -1370,7 +1382,7 @@ self.can_interface.send(message, 0) - def _handler_ui_end_treatment(self, message: dict) -> None: + def _handler_ui_end_treatment(self, message: dict, timestamp=0.0) -> None: """ Handler function when received a request to end a treatment @@ -1380,7 +1392,7 @@ self.logger.debug("End treatment requested") request = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - + self.ui_tx_end_cmd_timestamp = timestamp if request == 0: self.logger.debug("Request to start rinseback") self.cmd_send_treatment_adjust_end_response(accepted=YES, reason=0) @@ -1457,13 +1469,13 @@ self.can_interface.send(message, 0) - def _handler_request_hd_version(self) -> None: + def _handler_request_hd_version(self,message,timestamp=0.0) -> None: """ Handles a request for the HD version @return: None """ - + self.ui_fw_versions_req_timestamp = timestamp self.logger.debug("Handling request for hd version.") self.cmd_send_version_hd_data(9, 9, 9, 9, 9, 9, 9, 9) self.cmd_send_hd_serial_number() @@ -1951,7 +1963,7 @@ self.can_interface.send(message, 0) @publish(["ui_version"]) - def _handler_ui_version(self, message) -> None: + def _handler_ui_version(self, message, timestamp=0.0) -> None: """ Handles the ui version response @param message: The ui version response message @@ -1964,7 +1976,7 @@ micro, index = bytearray_to_byte(payload, index, False) build, index = bytearray_to_short(payload, index, False) compt, index = bytearray_to_integer(payload, index, False) - + self.ui_version_info_response_timestamp = timestamp self.ui_version = f"v{major}.{minor}.{micro}.{build}.{compt}" self.logger.debug(f"UI VERSION: {self.ui_version}") @@ -2075,7 +2087,7 @@ payload=payload) self.can_interface.send(message, 0) - def _handler_ui_post_ui_version_compatibility(self, message: dict) -> None: + def _handler_ui_post_ui_version_compatibility(self, message: dict, timestamp=0.0) -> None: """ Handles the UI's reporting of its version during the power on self tests @@ -2093,6 +2105,7 @@ message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] ui_compatibility = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + self.ui_version_info_compatibility_timestamp = timestamp self.logger.debug("UI version power on self test received: " "Major: {0} " "Minor: {1} "