Index: dialin/common/msg_ids.py =================================================================== diff -u -rbdd8d24d7c305261b03a27cec62e0d19aa6a75eb -r962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed --- dialin/common/msg_ids.py (.../msg_ids.py) (revision bdd8d24d7c305261b03a27cec62e0d19aa6a75eb) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed) @@ -241,8 +241,8 @@ MSG_ID_HD_AIR_TRAP_SEND_INTERVAL_OVERRIDE = 0X8032 MSG_ID_HD_AIR_TRAP_LEVEL_SENSOR_OVERRIDE = 0X8033 MSG_ID_HD_SOFTWARE_RESET_REQUEST = 0X8034 - MSG_ID_BLOOD_FLOW_SIG_STRENGTH_OVERRIDE = 0X8035 - MSG_ID_DIAL_IN_FLOW_SIG_STRENGTH_OVERRIDE = 0X8036 + MSG_ID___AVAILABLE_3 = 0X8035 + MSG_ID___AVAILABLE_4 = 0X8036 MSG_ID_BLOOD_PUMP_HOME_CMD = 0X8037 MSG_ID_DIAL_IN_PUMP_HOME_CMD = 0X8038 MSG_ID_DIAL_OUT_PUMP_HOME_CMD = 0X8039 @@ -284,16 +284,16 @@ MSG_ID_HD_BUBBLE_STATUS_OVERRIDE = 0X805E MSG_ID_HD_BLOOD_PRIME_VOLUME_OVERRIDE = 0X805F MSG_ID_HD_BUBBLE_SELF_TEST_REQUEST = 0X8060 - MSG_ID_HD_BLOOD_PRIME_SAFETY_VOLUME_OVERRIDE = 0X8061 - MSG_ID_HD_SWITCHES_STATUS_OVERRIDE = 0X8062 - MSG_ID_HD_SWITCHES_PUBLISH_INTERVAL_OVERRIDE = 0X8063 + MSG_ID_HD___AVAILABLE_1 = 0X8061 + MSG_ID_HD_SWITCHES_STATUS_OVERRIDE = 0x8062 + MSG_ID_HD_SWITCHES_PUBLISH_INTERVAL_OVERRIDE = 0x8063 MSG_ID_HD_BATTERY_REMAINING_PERCENT_OVERRIDE = 0x8064 MSG_ID_HD_TEMPERATURES_VALUE_OVERRIDE = 0x8065 MSG_ID_HD_TEMPERATURES_PUBLISH_INTERVAL_OVERRIDE = 0x8066 MSG_ID_HD_FANS_PUBLISH_INTERVAL_OVERRIDE = 0x8067 MSG_ID_HD_FANS_RPM_OVERRIDE = 0x8068 MSG_ID_HD_RINSEBACK_VOLUME_OVERRIDE = 0x8069 - MSG_ID_HD_RINSEBACK_SAFETY_VOLUME_OVERRIDE = 0x806A + MSG_ID_HD___AVAILABLE_2 = 0x806A MSG_ID_HD_ALARM_STATUS_PUBLISH_INTERVAL_OVERRIDE = 0x806B MSG_ID_HD_TREATMENT_TIME_DATA_PUBLISH_INTERVAL_OVERRIDE = 0x806C MSG_ID_HD_TREATMENT_RANGES_PUBLISH_INTERVAL_OVERRIDE = 0x806D Index: dialin/dg/dialysate_flow_sensor.py =================================================================== diff -u -r5eaad5d4949085de6030d945d309b04d65dc027e -r962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed --- dialin/dg/dialysate_flow_sensor.py (.../dialysate_flow_sensor.py) (revision 5eaad5d4949085de6030d945d309b04d65dc027e) +++ dialin/dg/dialysate_flow_sensor.py (.../dialysate_flow_sensor.py) (revision 962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed) @@ -14,7 +14,6 @@ # ############################################################################ import struct -from enum import unique from logging import Logger from .constants import RESET, NO_RESET Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -r3dc6f8a5072178c107f7f273aae5f34ca1d06e4d -r962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 3dc6f8a5072178c107f7f273aae5f34ca1d06e4d) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed) @@ -1,28 +1,26 @@ ########################################################################### # -# Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +# Copyright (c) 2019-2021 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 dialysate_generator.py +# @file dialysate_generator.py # -# @author (last) Peter Lucia -# @date (last) 10-Nov-2020 -# @author (original) Peter Lucia -# @date (original) 02-Apr-2020 +# @author (last) Quang Nguyen +# @date (last) 30-Aug-2021 +# @author (original) Peter Lucia +# @date (original) 02-Apr-2020 # ############################################################################ -from enum import unique - from .accelerometer import DGAccelerometer from .alarms import DGAlarms from .calibration_record import DGCalibrationNVRecord from .chemical_disinfect import ChemicalDisinfect from .concentrate_pumps import ConcentratePumps from .conductivity_sensors import ConductivitySensors -from .constants import RESET, NO_RESET +from .constants import RESET from .drain_pump import DGDrainPump from .fans import Fans from .dialysate_flow_sensor import DialysateFlowSensor @@ -46,13 +44,15 @@ from .uv_reactors import UVReactors from .valves import DGValves from .voltages import DGVoltages +from .events import DGEvents from ..common.msg_defs import MsgIds, MsgFieldPositions +from enum import unique +from .constants import NO_RESET from ..protocols.CAN import DenaliCanMessenger, DenaliMessage, DenaliChannels from ..utils import * from ..utils.base import AbstractSubSystem, publish, LogManager, DialinEnum from ..utils.conversions import integer_to_bytearray, unsigned_short_to_bytearray - @unique class DGOperationModes(DialinEnum): # DG operation modes @@ -61,7 +61,7 @@ DG_OP_MODE_INIT_POST = 2 DG_OP_MODE_STANDBY = 3 DG_OP_MODE_STANDBY_SOLO = 4 - DG_OP_MODE_RECIRCULATE = 5 + DG_OP_MODE_GEN_IDLE = 5 DG_OP_MODE_FILL = 6 DG_OP_MODE_DRAIN = 7 DG_OP_MODE_FLUSH = 8 @@ -182,6 +182,7 @@ self.uv_reactors = UVReactors(self.can_interface, self.logger) self.valves = DGValves(self.can_interface, self.logger) self.voltages = DGVoltages(self.can_interface, self.logger) + self.events = DGEvents(self.can_interface, self.logger) def get_version(self): """ Index: dialin/hd/blood_flow.py =================================================================== diff -u -r19ed99efea69f85cf5ea175a39555dfaa8e493e0 -r962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed --- dialin/hd/blood_flow.py (.../blood_flow.py) (revision 19ed99efea69f85cf5ea175a39555dfaa8e493e0) +++ dialin/hd/blood_flow.py (.../blood_flow.py) (revision 962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed) @@ -403,46 +403,6 @@ self.logger.debug("Timeout!!!!") return False - def cmd_blood_flow_signal_strength_override(self, signal_strength: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends the measured blood flow signal strength % override \n - command. - Constraints: - Must be logged into HD. - - @param signal_strength: float - pct (0..100) to override with - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - """ - - rst = integer_to_bytearray(reset) - sig = float_to_bytearray(signal_strength) - payload = rst + sig - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=MsgIds.MSG_ID_BLOOD_FLOW_SIG_STRENGTH_OVERRIDE.value, - payload=payload) - - self.logger.debug("override measured blood flow signal strength") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # self.logger.debug(received_message) - if reset == RESET: - str_sig = "reset back to normal" - else: - str_sig = str(signal_strength) - self.logger.debug("Blood pump flow signal strength overridden to " + str_sig + " %: " + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") - return False - def cmd_blood_flow_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the measured blood flow broadcast interval override command Index: dialin/hd/dialysate_inlet_flow.py =================================================================== diff -u -r8474f8e345f165187d4dde17840575ee4e98a9b4 -r962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed --- dialin/hd/dialysate_inlet_flow.py (.../dialysate_inlet_flow.py) (revision 8474f8e345f165187d4dde17840575ee4e98a9b4) +++ dialin/hd/dialysate_inlet_flow.py (.../dialysate_inlet_flow.py) (revision 962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed) @@ -53,7 +53,6 @@ self.measured_dialysate_inlet_pump_mc_speed = 0.0 self.measured_dialysate_inlet_pump_mc_current = 0.0 self.pwm_duty_cycle_pct = 0.0 - self.flow_signal_strength = 0.0 def get_target_dialysate_inlet_flow_rate(self): """ @@ -111,23 +110,14 @@ """ return self.pwm_duty_cycle_pct - def get_flow_signal_strength(self): - """ - Gets the dialysate flow signal strength pct - - @return: the dialysate flow signal strength pct (0..100) - """ - return self.flow_signal_strength - @publish([ "target_dialysate_inlet_flow_rate", "measured_dialysate_inlet_flow_rate", "measured_dialysate_inlet_pump_rotor_speed", "measured_dialysate_inlet_pump_speed", "measured_dialysate_inlet_pump_mc_speed", "measured_dialysate_inlet_pump_mc_current", - "pwm_duty_cycle_pct", - "flow_signal_strength" + "pwm_duty_cycle_pct" ]) def _handler_dialysate_inlet_flow_sync(self, message): """ @@ -152,8 +142,6 @@ message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) pwm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])) - sig = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])) self.target_dialysate_inlet_flow_rate = tgt[0] self.measured_dialysate_inlet_flow_rate = flow[0] @@ -162,7 +150,6 @@ self.measured_dialysate_inlet_pump_mc_speed = mcspeed[0] self.measured_dialysate_inlet_pump_mc_current = mccurr[0] self.pwm_duty_cycle_pct = pwm[0] - self.flow_signal_strength = sig[0] def cmd_dialysate_inlet_flow_set_point_override(self, flow: int, @@ -416,46 +403,6 @@ self.logger.debug("Timeout!!!!") return False - def cmd_dialysate_flow_signal_strength_override(self, signal_strength: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends the measured dialysate flow signal strength % override \n - command. - Constraints: - Must be logged into HD. - - @param signal_strength: float - pct (0..100) to override with - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - """ - - rst = integer_to_bytearray(reset) - sig = float_to_bytearray(signal_strength) - payload = rst + sig - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=MsgIds.MSG_ID_DIAL_IN_FLOW_SIG_STRENGTH_OVERRIDE.value, - payload=payload) - - self.logger.debug("override measured dialysate flow signal strength") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # self.logger.debug(received_message) - if reset == RESET: - str_sig = "reset back to normal" - else: - str_sig = str(signal_strength) - self.logger.debug("Dialysate pump flow signal strength overridden to " + str_sig + " %: " + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") - return False - def cmd_dialysate_inlet_flow_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the measured dialysate inlet flow broadcast interval override command Index: dialin/hd/treatment.py =================================================================== diff -u -r8474f8e345f165187d4dde17840575ee4e98a9b4 -r962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed --- dialin/hd/treatment.py (.../treatment.py) (revision 8474f8e345f165187d4dde17840575ee4e98a9b4) +++ dialin/hd/treatment.py (.../treatment.py) (revision 962dd8ebc689cd4a61ec614ed2d4f3b2e96a58ed) @@ -178,7 +178,6 @@ self.rinseback_cur_rate = 0 self.rinseback_timeout_secs = 0 self.rinseback_countdown_secs = 0 - self.rinseback_safety_cum_vol = 0.0 # re-circulation status self.recirc_timeout_secs = 0 self.recirc_countdown_secs = 0 @@ -327,14 +326,6 @@ """ return self.blood_prime_cum_vol - def get_blood_prime_safety_volume_delivered(self) -> float: - """ - Returns blood prime safety volume (in mL) delivered - - @return: The blood prime safety volume delivered - """ - return self.blood_prime_ind_cum_vol - def get_rinseback_target_volume(self) -> float: """ Returns rinseback target volume (in mL) @@ -351,14 +342,6 @@ """ return self.rinseback_cum_vol - def get_rinseback_safety_volume_delivered(self) -> float: - """ - Returns rinseback safety volume (in mL) delivered - - @return: The rinseback safety volume delivered - """ - return self.rinseback_safety_cum_vol - def get_rinseback_current_rate(self) -> int: """ Returns rinseback current rate (in mL/min) @@ -528,15 +511,12 @@ message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) cdn = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) - rsv = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) self.rinseback_tgt_vol = tgt[0] self.rinseback_cum_vol = cum[0] self.rinseback_cur_rate = rat[0] self.rinseback_timeout_secs = tmo[0] self.rinseback_countdown_secs = cdn[0] - self.rinseback_safety_cum_vol = rsv[0] @publish([ "blood_prime_tgt_vol", @@ -1325,40 +1305,6 @@ self.logger.debug("Timeout!!!!") return False - def cmd_blood_prime_safety_volume_delivered_override(self, volume: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends the blood prime safety volume delivered override command - Constraints: - Must be logged into HD. - - @param volume: float - safety volume (in mL) of blood delivered during blood prime (must be positive) - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - """ - - rst = integer_to_bytearray(reset) - vol = float_to_bytearray(volume) - payload = rst + vol - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=MsgIds.MSG_ID_HD_BLOOD_PRIME_SAFETY_VOLUME_OVERRIDE.value, - payload=payload) - - self.logger.debug("override HD blood prime safety volume delivered (in mL).") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - self.logger.debug("Blood prime safety volume delivered overridden to " + str(volume) + " mL. " + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") - return False - def cmd_rinseback_volume_delivered_override(self, volume: float, reset: int = NO_RESET) -> int: """ Constructs and sends the rinseback volume delivered override command @@ -1393,40 +1339,6 @@ self.logger.debug("Timeout!!!!") return False - def cmd_rinseback_safety_volume_delivered_override(self, volume: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends the rinseback safety volume delivered override command - Constraints: - Must be logged into HD. - - @param volume: float - safety volume (in mL) of blood returned during rinseback (must be positive) - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - """ - - rst = integer_to_bytearray(reset) - vol = float_to_bytearray(volume) - payload = rst + vol - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=MsgIds.MSG_ID_HD_RINSEBACK_SAFETY_VOLUME_OVERRIDE.value, - payload=payload) - - self.logger.debug("override HD rinseback safety volume delivered (in mL).") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - self.logger.debug("Rinseback safety volume delivered overridden to " + str(volume) + " mL. " + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") - return False - def cmd_blood_prime_submode_broadcast_interval_override(self, ms: int = 250, reset: int = NO_RESET): """ Constructs and sends the treatment blood prime sub-mode broadcast interval override command