Index: dialin/common/alarm_defs.py =================================================================== diff -u -r7fd727b8384b76ab352ded19bf408bab1aed28e6 -r410627f2a7a611e5c8c0115a1dafaed44e4df57b --- dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 7fd727b8384b76ab352ded19bf408bab1aed28e6) +++ dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 410627f2a7a611e5c8c0115a1dafaed44e4df57b) @@ -1,6 +1,6 @@ ########################################################################### # -# Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +# Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. Index: dialin/common/dg_defs.py =================================================================== diff -u -rcd08a00ac2b71457691eb7397dc40aa0fa7c0e4a -r410627f2a7a611e5c8c0115a1dafaed44e4df57b --- dialin/common/dg_defs.py (.../dg_defs.py) (revision cd08a00ac2b71457691eb7397dc40aa0fa7c0e4a) +++ dialin/common/dg_defs.py (.../dg_defs.py) (revision 410627f2a7a611e5c8c0115a1dafaed44e4df57b) @@ -1,6 +1,6 @@ ########################################################################### # -# Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +# Copyright (c) 2021-2022 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. Index: dialin/common/hd_defs.py =================================================================== diff -u -rcd08a00ac2b71457691eb7397dc40aa0fa7c0e4a -r410627f2a7a611e5c8c0115a1dafaed44e4df57b --- dialin/common/hd_defs.py (.../hd_defs.py) (revision cd08a00ac2b71457691eb7397dc40aa0fa7c0e4a) +++ dialin/common/hd_defs.py (.../hd_defs.py) (revision 410627f2a7a611e5c8c0115a1dafaed44e4df57b) @@ -1,6 +1,6 @@ ########################################################################### # -# Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +# Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. Index: dialin/common/msg_ids.py =================================================================== diff -u -r47b174d31647920ed7357b167e885960ee2a58bb -r410627f2a7a611e5c8c0115a1dafaed44e4df57b --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 47b174d31647920ed7357b167e885960ee2a58bb) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 410627f2a7a611e5c8c0115a1dafaed44e4df57b) @@ -1,6 +1,6 @@ ########################################################################### # -# Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +# Copyright (c) 2021-2022 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. @@ -317,7 +317,7 @@ MSG_ID_HD_SYRINGE_PUMP_FORCE_SENSOR_DAC_CALIBRATE = 0x8077 MSG_ID_HD_STOP_RTC_CLOCK = 0x8078 MSG_ID_HD_FANS_DUTY_CYCLE_OVERRIDE = 0x8079 - MSG_ID_HD_SYRINGE_PUMP_HEPRIN_BOLUS_TARGET_RATE_OVERRIDE = 0x807A + MSG_ID_HD_HEPRIN_BOLUS_TARGET_RATE_OVERRIDE = 0x807A MSG_ID_HD_REQ_CURRENT_TREATMENT_PARAMETERS = 0x807B MSG_ID_HD_RES_CURRENT_TREATMENT_PARAMETERS = 0x807C Index: dialin/hd/blood_flow.py =================================================================== diff -u -rcec28c09233d5aebc2c0e19212bd7c3840366100 -r410627f2a7a611e5c8c0115a1dafaed44e4df57b --- dialin/hd/blood_flow.py (.../blood_flow.py) (revision cec28c09233d5aebc2c0e19212bd7c3840366100) +++ dialin/hd/blood_flow.py (.../blood_flow.py) (revision 410627f2a7a611e5c8c0115a1dafaed44e4df57b) @@ -1,6 +1,6 @@ ########################################################################### # -# Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +# Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -rc5cba1c9d4ba781699360ebc3d24dc9e633f8780 -r410627f2a7a611e5c8c0115a1dafaed44e4df57b --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision c5cba1c9d4ba781699360ebc3d24dc9e633f8780) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 410627f2a7a611e5c8c0115a1dafaed44e4df57b) @@ -1,6 +1,6 @@ ########################################################################### # -# Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +# Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. Index: dialin/hd/treatment.py =================================================================== diff -u -ra40950b1f2123b9f9123a9746cf564429fb7a8a5 -r410627f2a7a611e5c8c0115a1dafaed44e4df57b --- dialin/hd/treatment.py (.../treatment.py) (revision a40950b1f2123b9f9123a9746cf564429fb7a8a5) +++ dialin/hd/treatment.py (.../treatment.py) (revision 410627f2a7a611e5c8c0115a1dafaed44e4df57b) @@ -1,6 +1,6 @@ ########################################################################### # -# Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +# Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. Index: dialin/ui/hd_simulator.py =================================================================== diff -u -r3296c4c943e4a6581a4c9a4c3423664896617e29 -r410627f2a7a611e5c8c0115a1dafaed44e4df57b --- dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 3296c4c943e4a6581a4c9a4c3423664896617e29) +++ dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 410627f2a7a611e5c8c0115a1dafaed44e4df57b) @@ -1,20 +1,21 @@ ########################################################################### # -# Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +# Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. # # 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 hd_simulator.py # -# @author (last) Quang Nguyen -# @date (last) 11-Aug-2021 +# @author (last) Behrouz NematiPour +# @date (last) 07-Feb-2022 # @author (original) Peter Lucia # @date (original) 06-Aug-2020 # ############################################################################ import enum from time import sleep +from typing import Callable from . import messageBuilder from ..common import * @@ -42,7 +43,7 @@ def __init__(self, can_interface: str = "can0", log_level: bool = None, console_out: bool = False, - passive_mode: bool = False, + passive_mode: bool = True, auto_response: bool = False): """ The HDSimulator constructor @@ -54,6 +55,7 @@ super().__init__() HDSimulator.instance_count = HDSimulator.instance_count + 1 + self.auto_response = auto_response self._log_manager = LogManager(log_level=log_level, log_filepath=self.__class__.__name__ + ".log") self.logger = self._log_manager.logger self.console_out = console_out @@ -103,6 +105,24 @@ # initialize variables that will be populated by UI version response self.ui_version = None + def add_publication(self, channel_id: DenaliChannels, message_id: MsgIds, function_ptr: Callable) -> None: + """ + Allows later addition of publication to the HDSimulator + @param channel_id: (DenaliChannels) the channel id of the message + @param message_id: (MsgIds) the message id + @param function_ptr: (Callable) the pointer to the message handler function + @return: None + """ + if self.auto_response: + if channel_id > 0 and message_id != MsgIds.MSG_ID_UNUSED and function_ptr is not None: + self.can_interface.register_receiving_publication_function(channel_id, + message_id, + function_ptr) + else: + self.logger.debug("rejected publication registration {0}, {1}, {2}".format(channel_id, + message_id, + function_ptr)) + def get_ui_version(self): """ Gets the ui version @@ -1294,6 +1314,7 @@ payload = float_to_bytearray(target) payload += float_to_bytearray(current) + payload += float_to_bytearray(0) message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, message_id=MsgIds.MSG_ID_HD_BLOOD_PRIME_PROGRESS.value, @@ -1857,7 +1878,7 @@ def cmd_send_hd_disinfect_chemical_confirm(self, accepted: bool, reason: int) -> None: """ - the HD response to the UI sending the user chimical disinfection steps confirm. + the HD response to the UI sending the user chemical disinfection steps confirm. @param accepted: boolean accepted or rejected @param reason: the rejection reason @return: None @@ -1878,21 +1899,20 @@ @param message: The ui version response message @return: None """ - major = struct.unpack('B', bytearray( - message['message'][self.START_POS_MAJOR:self.END_POS_MAJOR])) - minor = struct.unpack('B', bytearray( - message['message'][self.START_POS_MINOR:self.END_POS_MINOR])) - micro = struct.unpack('B', bytearray( - message['message'][self.START_POS_MICRO:self.END_POS_MICRO])) - build = struct.unpack('H', bytearray( - message['message'][self.START_POS_BUILD:self.END_POS_BUILD])) - compatibility = struct.unpack('H', bytearray( - message['message'][self.START_POS_COMPAT:self.END_POS_COMPAT])) + payload = message['message'] + index = DenaliMessage.PAYLOAD_START_INDEX + major, index = bytearray_to_byte(payload, index, False) + minor, index = bytearray_to_byte(payload, index, False) + micro, index = bytearray_to_byte(payload, index, False) + build, index = bytearray_to_short(payload, index, False) + compt, index = bytearray_to_integer(payload, index, False) - if all([len(each) > 0 for each in [major, minor, micro, build]]): - self.ui_version = f"v{major[0]}.{minor[0]}.{micro[0]}-{build[0]}-{compatibility[0]}" - self.logger.debug(f"UI VERSION: {self.ui_version}") + self.ui_version = f"v{major}.{minor}.{micro}.{build}.{compt}" + self.logger.debug(f"UI VERSION: {self.ui_version}") + if self.console_out: + print("Version:", self.ui_version) + def cmd_send_hd_request_ui_version(self) -> None: """ send HD request for UI version