Index: dialin/common/msg_ids.py =================================================================== diff -u -r6e20f4690ce887c351d8c65546f93311e5df6ad1 -rfa8f8660695b75332b9d0280ad1f38e834b660e2 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 6e20f4690ce887c351d8c65546f93311e5df6ad1) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision fa8f8660695b75332b9d0280ad1f38e834b660e2) @@ -271,7 +271,9 @@ MSG_ID_HD_SYRINGE_PUMP_ADC_READ_COUNTER_OVERRIDE = 0X805C MSG_ID_HD_BUBBLES_DATA_SEND_INTERVAL_OVERRIDE = 0X805D 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_DG_TESTER_LOGIN_REQUEST = 0XA000 MSG_ID_DG_ALARM_STATE_OVERRIDE = 0XA001 MSG_ID_DG_WATCHDOG_TASK_CHECKIN_OVERRIDE = 0XA002 Index: dialin/hd/treatment.py =================================================================== diff -u -r2e392c92d55178f457a67423ba8c503a86dcf3c8 -rfa8f8660695b75332b9d0280ad1f38e834b660e2 --- dialin/hd/treatment.py (.../treatment.py) (revision 2e392c92d55178f457a67423ba8c503a86dcf3c8) +++ dialin/hd/treatment.py (.../treatment.py) (revision fa8f8660695b75332b9d0280ad1f38e834b660e2) @@ -20,6 +20,7 @@ from ..common.msg_defs import MsgIds, MsgFieldPositions from logging import Logger from ..utils.conversions import integer_to_bytearray, float_to_bytearray +from .constants import RESET, NO_RESET class HDTreatment(_AbstractSubSystem): @@ -125,6 +126,7 @@ # blood prime status self.blood_prime_tgt_vol = 0.0 self.blood_prime_cum_vol = 0.0 + self.blood_prime_ind_cum_vol = 0.0 # rinseback status self.rinseback_tgt_vol = 0.0 self.rinseback_cum_vol = 0.0 @@ -381,9 +383,12 @@ message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) cum = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) + ind = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) self.blood_prime_tgt_vol = tgt[0] self.blood_prime_cum_vol = cum[0] + self.blood_prime_ind_cum_vol = ind[0] @_publish([ "recirc_timeout_secs", @@ -1095,3 +1100,72 @@ else: self.logger.debug("Timeout!!!!") return False + + def cmd_blood_prime_volume_delivered_override(self, volume: float, reset: int =NO_RESET) -> int: + """ + Constructs and sends the blood prime volume delivered override command + Constraints: + Must be logged into HD. + + @param volume: float - 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_VOLUME_OVERRIDE.value, + payload=payload) + + self.logger.debug("override HD blood prime 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 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_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 +