Index: dialin/common/alarm_defs.py =================================================================== diff -u -r59162d9248ca9686b996b0efa5f9e95733611f1b -rfbe5b348efeb5420d9e460ab3d2dfe3331e6a66c --- dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 59162d9248ca9686b996b0efa5f9e95733611f1b) +++ dialin/common/alarm_defs.py (.../alarm_defs.py) (revision fbe5b348efeb5420d9e460ab3d2dfe3331e6a66c) @@ -301,8 +301,8 @@ ALARM_ID_HD_ACTIVE_RESERVOIR_WEIGHT_OUT_OF_RANGE = 278 ALARM_ID_DG_DIALYSATE_DRAIN_TIME_OUT = 279 ALARM_ID_DG_DRAIN_PUMP_DIRECTION_INVALID = 280 - ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME = 281 - ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME = 282 + ALARM_ID_AVAILABLE_40 = 281 + ALARM_ID_AVAILABLE_41 = 282 ALARM_ID_DG_LOAD_CELL_WEIGHT_OUT_OF_RANGE = 283 ALARM_ID_DG_LOAD_CELL_PRIMARY_BACKUP_DRIFT_OUT_OF_RANGE = 284 ALARM_ID_HD_RO_PERMEATE_SAMPLE = 285 Index: dialin/common/msg_ids.py =================================================================== diff -u -r96244d1d41c71d254f61e18d1d170dfaeaa695a2 -rfbe5b348efeb5420d9e460ab3d2dfe3331e6a66c --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 96244d1d41c71d254f61e18d1d170dfaeaa695a2) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision fbe5b348efeb5420d9e460ab3d2dfe3331e6a66c) @@ -229,6 +229,8 @@ MSG_ID_DG_DRAIN_MODE_DATA = 0xCE MSG_ID_UI_INSTITUTIONAL_RECORD_REQUEST = 0xCF MSG_ID_HD_INSTITUTIONAL_RECORD_RESPONSE = 0xD0 + MSG_ID_DG_MAX_RO_REJ_RATIO_FROM_HD_INSTIT_RECORD_REQUEST = 0xD1 + MSG_ID_HD_MAX_RO_REJ_RATIO_FROM_HD_INSTIT_RECORD_RESPONSE = 0xD2 MSG_ID_CAN_ERROR_COUNT = 0x999 @@ -474,9 +476,9 @@ MSG_ID_DG_SET_SW_CONFIG_RECORD = 0xA04B MSG_ID_DG_SEND_SW_CONFIG_RECORD = 0xA04C MSG_ID_DG_FANS_DUTY_CYCLE_OVERRIDE = 0xA04D - MSG_ID_DG_USED_ACID_VOLUME_ML_OVERRIDE = 0xA04E + MSG_ID_DG_MODE_FILL_ENABLE_CHEMS_TEST = 0xA04E MSG_ID_DG_SET_FANS_RPM_ALARM_START_TIME_OFFSET = 0xA04F - MSG_ID_DG_USED_BICARB_VOLUME_ML_OVERRIDE = 0xA050 + MSG_ID_MSG_AVAILABLE_43 = 0xA050 MSG_ID_FILL_MODE_DATA_PUBLISH_INTERVAL_OVERRIDE = 0xA051 MSG_ID_DG_GEN_IDLE_PUBLISH_INTERVAL_OVERRIDE = 0xA052 MSG_ID_DG_GET_USAGE_INFO_RECORD = 0xA053 Index: dialin/dg/dialysate_fill.py =================================================================== diff -u -rd2a920fb57105d383a9845a4491e74b5af0f15ff -rfbe5b348efeb5420d9e460ab3d2dfe3331e6a66c --- dialin/dg/dialysate_fill.py (.../dialysate_fill.py) (revision d2a920fb57105d383a9845a4491e74b5af0f15ff) +++ dialin/dg/dialysate_fill.py (.../dialysate_fill.py) (revision fbe5b348efeb5420d9e460ab3d2dfe3331e6a66c) @@ -51,11 +51,11 @@ self.avg_bicarb = 0.0 self.first_fill = False self.pctDiffConduct = 0.0 - self.used_acid = 0.0 - self.used_bicarb = 0.0 self.total_volume = 0.0 - self.dg_fill_mode_timestamp = 0.0 self.ro_only_mode_status = 0 + self.bad_fill_signal = 0 + self.bad_fill_state = 0 + self.dg_fill_mode_timestamp = 0.0 if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id @@ -68,14 +68,14 @@ Gets the current concentrate pump data value @return: List containing fill mode data values: - [ avg_acid, avg_bicarb, first_fill, - pctDiffConduct, used_acid, used_bicarb, total_volume ] + [ avg_acid, avg_bicarb, first_fill, pctDiffConduct, used_acid, used_bicarb, total_volume, + ro_only_mode_status, bad_fill_signal, bad_fill_state ] """ - return [self.avg_acid, self.avg_bicarb, self.first_fill, - self.pctDiffConduct, self.used_acid, self.used_bicarb, self.total_volume] + return [self.avg_acid, self.avg_bicarb, self.first_fill, self.pctDiffConduct, self.total_volume, + self.ro_only_mode_status, self.bad_fill_signal, self.bad_fill_state] - @publish(["dg_fill_mode_timestamp","avg_acid", "avg_bicarb", "first_fill", "pctDiffConduct", "used_acid", - "used_bicarb", "total_volume", "ro_only_mode_status"]) + @publish(["dg_fill_mode_timestamp","avg_acid", "avg_bicarb", "first_fill", "pctDiffConduct", "total_volume", + "ro_only_mode_status", "bad_fill_signal", "bad_fill_state"]) def _handler_fill_mode_monitor_sync(self, message, timestamp=0.0): """ Handles published dialysate fill mode data' data messages. Dialysate fill data are captured @@ -92,78 +92,16 @@ message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] self.pctDiffConduct = struct.unpack(' int: - """ - Constructs and sends the used acid volume override command - - @param volume: float - desired used acid volume to override - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - - """ - reset_byte_array = integer_to_bytearray(reset) - volume_byte_array = float_to_bytearray(volume) - - payload = reset_byte_array + volume_byte_array - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=MsgIds.MSG_ID_DG_USED_ACID_VOLUME_ML_OVERRIDE.value, - payload=payload) - - self.logger.debug("override the used acid volume") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.error("Timeout!!!!") - return False - - def cmd_used_bicarb_volume_override(self, volume: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends the used bicarb volume override command - - @param volume: float - desired used acid volume to override - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - - """ - reset_byte_array = integer_to_bytearray(reset) - volume_byte_array = float_to_bytearray(volume) - - payload = reset_byte_array + volume_byte_array - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=MsgIds.MSG_ID_DG_USED_BICARB_VOLUME_ML_OVERRIDE.value, - payload=payload) - - self.logger.debug("override the used bicarb volume") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.error("Timeout!!!!") - return False - def cmd_fill_mode_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the fill mode data broadcast interval override command @@ -210,7 +148,6 @@ @param reset: (int) 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 @@ -239,6 +176,31 @@ self.logger.debug("Timeout!!!!") return False + def cmd_set_mode_fill_enable_chemicals_conductivity_values_test(self) -> int: + """ + Constructs and sends the enable mode fill chemicals conductivity values test command. + Constraints: + Must be logged into DG. + + @return: 1 if successful, zero otherwise + """ + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSG_ID_DG_MODE_FILL_ENABLE_CHEMS_TEST.value) + + self.logger.debug("Enabling mode fill chemicals test ") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + self.logger.debug("Enabled mode fill chemicals test") + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + def cmd_set_mode_fill_cal_check_state(self, cal_check_state: int) -> int: """ Constructs and sends a message to set the mode fill calibration check status. Index: dialin/hd/institutional_record.py =================================================================== diff -u -r7818acad4537743472357cb1bed2f53bdb6d3529 -rfbe5b348efeb5420d9e460ab3d2dfe3331e6a66c --- dialin/hd/institutional_record.py (.../institutional_record.py) (revision 7818acad4537743472357cb1bed2f53bdb6d3529) +++ dialin/hd/institutional_record.py (.../institutional_record.py) (revision fbe5b348efeb5420d9e460ab3d2dfe3331e6a66c) @@ -32,31 +32,33 @@ Hemodialysis Device (HD) Dialin API sub-class for institutional record commands. """ - _DEFAULT_MIN_BLOOD_FLOW_MLPM = 100 - _DEFAULT_MAX_BLOOD_FLOW_MLPM = 500 - _DEFAULT_MIN_DIALYSATE_FLOW_MLPM = 100 - _DEFAULT_MAX_DIALYSATE_FLOW_MLPM = 600 - _DEFAULT_MIN_TX_DURATION_MIN = 60 - _DEFAULT_MAX_TX_DURATION_MIN = 480 - _DEFAULT_MIN_STOP_HEP_DISP_BEFORE_TX_END_MIN = 0 - _DEFAULT_MAX_STOP_HEP_DISP_BEFORE_TX_END_MIN = 480 - _DEFAULT_MIN_SALINE_BOLUS_VOLUME_ML = 100 - _DEFAULT_MAX_SALINE_BOLUS_VOLUME_ML = 300 - _DEFAULT_MIN_DIALYSATE_TEMPERATURE_C = 35.0 - _DEFAULT_MAX_DIALYSATE_TEMPERATURE_C = 37.0 - _DEFAULT_MIN_ART_PRESS_LIMIT_WINDOW_MMHG = 120 - _DEFAULT_MAX_ART_PRESS_LIMIT_WINDOW_MMHG = 200 - _DEFAULT_MIN_VEN_PRESS_LIMIT_WINDOW_MMHG = 100 - _DEFAULT_MAX_VEN_PRESS_LIMIT_WINDOW_MMHG = 200 - _DEFAULT_MIN_VEN_ASYM_PRESS_LIMIT_WINDOW_MMHG = 20 - _DEFAULT_MAX_VEN_ASYM_PRESS_LIMIT_WINDOW_MMHG = 35 - _DEFAULT_MIN_UF_VOLUME_L = 0.0 - _DEFAULT_MAX_UF_VOLUME_L = 8.0 - _DEFAULT_MIN_HEPARIN_DISP_RATE_MLPHR = 0.0 - _DEFAULT_MAX_HEPARIN_DISP_RATE_MLPHR = 1.0 - _DEFAULT_MIN_HEPARIN_BOLUS_VOLUME_ML = 0.0 - _DEFAULT_MAX_HEPARIN_BOLUS_VOLUME_ML = 2.0 - _DEFAULT_ENABLE_CHEM_DISINFECT = 0 + _DEFAULT_MIN_BLOOD_FLOW_MLPM = 100 + _DEFAULT_MAX_BLOOD_FLOW_MLPM = 500 + _DEFAULT_MIN_DIALYSATE_FLOW_MLPM = 100 + _DEFAULT_MAX_DIALYSATE_FLOW_MLPM = 600 + _DEFAULT_MIN_TX_DURATION_MIN = 60 + _DEFAULT_MAX_TX_DURATION_MIN = 480 + _DEFAULT_MIN_STOP_HEP_DISP_BEFORE_TX_END_MIN = 0 + _DEFAULT_MAX_STOP_HEP_DISP_BEFORE_TX_END_MIN = 480 + _DEFAULT_MIN_SALINE_BOLUS_VOLUME_ML = 100 + _DEFAULT_MAX_SALINE_BOLUS_VOLUME_ML = 300 + _DEFAULT_MIN_DIALYSATE_TEMPERATURE_C = 35.0 + _DEFAULT_MAX_DIALYSATE_TEMPERATURE_C = 37.0 + _DEFAULT_MIN_ART_PRESS_LIMIT_WINDOW_MMHG = 120 + _DEFAULT_MAX_ART_PRESS_LIMIT_WINDOW_MMHG = 200 + _DEFAULT_MIN_VEN_PRESS_LIMIT_WINDOW_MMHG = 100 + _DEFAULT_MAX_VEN_PRESS_LIMIT_WINDOW_MMHG = 200 + _DEFAULT_MIN_VEN_ASYM_PRESS_LIMIT_WINDOW_MMHG = 20 + _DEFAULT_MAX_VEN_ASYM_PRESS_LIMIT_WINDOW_MMHG = 35 + _DEFAULT_MIN_UF_VOLUME_L = 0.0 + _DEFAULT_MAX_UF_VOLUME_L = 8.0 + _DEFAULT_MIN_HEPARIN_DISP_RATE_MLPHR = 0.0 + _DEFAULT_MAX_HEPARIN_DISP_RATE_MLPHR = 1.0 + _DEFAULT_MIN_HEPARIN_BOLUS_VOLUME_ML = 0.0 + _DEFAULT_MAX_HEPARIN_BOLUS_VOLUME_ML = 2.0 + _DEFAULT_ENABLE_CHEM_DISINFECT = 0 + _DEFAULT_MIN_RO_REJECTION_RATIO_PCT = 90 + _DEFAULT_MIN_INLET_WATER_COND_ALARM_LIMIT_USPCM = 200.0 _RECORD_SPECS_BYTES = 12 _DEFAULT_TIME_VALUE = 0 @@ -76,9 +78,7 @@ @param can_interface: Denali CAN Messenger object """ - super().__init__() - self.can_interface = can_interface self.logger = logger self._current_message = 0 @@ -210,7 +210,6 @@ self.hd_institutional_record_timestamp = timestamp self._handler_received_complete_hd_institutional_record() - @publish(["hd_institutional_record_timestamp", "hd_institutional_record"]) def _handler_received_complete_hd_institutional_record(self): """ @@ -332,6 +331,8 @@ 'min_heparin_bolus_volume_ml': ['