Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -rc7effef22561b1c003184091240009e379835f74 --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision c7effef22561b1c003184091240009e379835f74) @@ -44,6 +44,7 @@ MSG_ID_DG_DG_VERSION_RESPONSE = 0x001E MSG_ID_LOGIN_TO_DG = 0xA000 MSG_ID_DG_SAFETY_SHUTDOWN_OVERRIDE = 0xA014 + MSG_ID_DG_SOFTWARE_RESET_REQUEST = 0xA022 # HD login password DG_LOGIN_PASSWORD = '123' @@ -303,3 +304,32 @@ self.logger.debug("Timeout!!!!") return False + def cmd_dg_software_reset_request(self): + """ + Constructs and sends an DG software reset request via CAN bus. + Constraints: + Must be logged into DG. + + \returns response message if received, False if no response received + + @return: 1 if successful, zero otherwise + + """ + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=self.MSG_ID_DG_SOFTWARE_RESET_REQUEST) + + self.logger.debug("requesting DG software reset") + + # Send message + received_message = self.can_interface.send(message) + + if received_message is not None: + if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: + self.logger.debug("DG is resetting...") + else: + self.logger.debug("DG reset request failed.") + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -rc7effef22561b1c003184091240009e379835f74 --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision c7effef22561b1c003184091240009e379835f74) @@ -15,6 +15,7 @@ ############################################################################ import struct from .accelerometer import HDAccelerometer +from .air_trap import HDAirTrap from .alarms import HDAlarms from .buttons import HDButtons from .ui_proxy import HDUIProxy @@ -41,9 +42,10 @@ # HD message IDs MSG_ID_HD_OPERATION_MODE_BROADCAST = 0x0025 + MSG_ID_POWEROFF_NOTIFY = 0x0020 MSG_ID_LOGIN_TO_HD = 0x8000 MSG_ID_HD_SAFETY_SHUTDOWN_OVERRIDE = 0x8026 - MSG_ID_POWEROFF_NOTIFY = 0x0020 + MSG_ID_HD_SOFTWARE_RESET_REQUEST = 0x8034 # broadcast message field positions START_POS_HD_OP_MODE = DenaliMessage.PAYLOAD_START_INDEX @@ -103,6 +105,7 @@ # Create command groups self.accel = HDAccelerometer(self.can_interface, self.logger) + self.air_trap = HDAirTrap(self.can_interface, self.logger) self.alarms = HDAlarms(self.can_interface, self.logger) self.buttons = HDButtons(self.can_interface, self.logger) self.ui = HDUIProxy(self.can_interface, self.logger) @@ -206,3 +209,33 @@ else: self.logger.debug("Timeout!!!!") return False + + def cmd_hd_software_reset_request(self): + """ + Constructs and sends an HD software reset request via CAN bus. + Constraints: + Must be logged into HD. + + \returns response message if received, False if no response received + + @return: 1 if successful, zero otherwise + + """ + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=self.MSG_ID_HD_SOFTWARE_RESET_REQUEST) + + self.logger.debug("requesting HD software reset") + + # Send message + received_message = self.can_interface.send(message) + + if received_message is not None: + if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: + self.logger.debug("HD is resetting...") + else: + self.logger.debug("HD reset request failed.") + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False Index: tests/air_trap_levels.py =================================================================== diff -u --- tests/air_trap_levels.py (revision 0) +++ tests/air_trap_levels.py (revision c7effef22561b1c003184091240009e379835f74) @@ -0,0 +1,44 @@ +########################################################################### +# +# Copyright (c) 2019-2019 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 air_trap_levels.py +# +# @date 23-Sep-2020 +# @author S. Nash +# +# @brief This script monitors the 2 air trap level sensors. +# +############################################################################ + +import sys +sys.path.append("..") +from dialin.hd.hemodialysis_device import HD +from time import sleep + +if __name__ == "__main__": + # create an HD object called hd + hd = HD() + sleep(2) + + #hd.cmd_log_in_to_hd() + sleep(1) + #hd.air_trap.cmd_air_trap_data_broadcast_interval_override(100) + + lower = "Air" + upper = "Air" + + while True: + if hd.air_trap.get_air_trap_lower_level() == hd.air_trap.AIR_DETECTED_AT_LEVEL: + lower = "Air" + else: + lower = "Liq" + if hd.air_trap.get_air_trap_upper_level() == hd.air_trap.AIR_DETECTED_AT_LEVEL: + upper = "Air" + else: + upper = "Liq" + print("Lower Level = " + lower + " Upper Level = " + upper) + sleep(0.1)