Index: dialin/common/msg_ids.py =================================================================== diff -u -r621bb43cdd732ac9f81c4b2d0912c52bbbb084ab -r0281506a3b742fb5949f277fabc4a14a8e04ebf8 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 621bb43cdd732ac9f81c4b2d0912c52bbbb084ab) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 0281506a3b742fb5949f277fabc4a14a8e04ebf8) @@ -391,6 +391,7 @@ MSG_ID_HD_GET_INSTITUTIONAL_RECORD = 0x809E MSG_ID_HD_SET_INSTITUTIONAL_RECORD = 0x809F MSG_ID_HD_SEND_INSTITUTIONAL_RECORD = 0x80A0 + MSG_ID_HD_PARTIAL_OCCLUSION_BLOOD_PUMP_OVERRIDE = 0x80A1 MSG_ID_DG_TESTER_LOGIN_REQUEST = 0xA000 MSG_ID_DG_ALARM_STATE_OVERRIDE = 0xA001 Index: dialin/hd/pressure_occlusion.py =================================================================== diff -u -rc0cbf249c065bb6e866946cd01fcc03f5aef98c6 -r0281506a3b742fb5949f277fabc4a14a8e04ebf8 --- dialin/hd/pressure_occlusion.py (.../pressure_occlusion.py) (revision c0cbf249c065bb6e866946cd01fcc03f5aef98c6) +++ dialin/hd/pressure_occlusion.py (.../pressure_occlusion.py) (revision 0281506a3b742fb5949f277fabc4a14a8e04ebf8) @@ -55,6 +55,8 @@ self.arterial_pressure_limit_max = 0 self.venous_pressure_limit_min = 0 self.venous_pressure_limit_max = 0 + self.filtered_blood_pump_Occlusion = 0 + self.partial_occlusion_baseline = 0 def get_arterial_pressure(self): """ @@ -146,6 +148,22 @@ """ return self.venous_pressure_limit_max + def get_filtered_blood_pump_occlusion(self): + """ + Gets the filtered blood pump occlusion + + @return: (int) The filtered blood pump occlusion + """ + return self.filtered_blood_pump_Occlusion + + def get_partial_blood_pump_occlusion_baseline(self): + """ + Gets the partial blood pump occlusion baseline + + @return: (int) The partial blood pump occlusion baseline + """ + return self.partial_occlusion_baseline + @publish([ "hd_pressure_occlusion_timestamp", "arterial_pressure", @@ -157,7 +175,9 @@ "venous_pressure_limit_min", "venous_pressure_limit_max", "arterial_long_filtered_pressure", - "venous_long_filtered_pressure" + "venous_long_filtered_pressure", + "filtered_blood_pump_occlusion", + "partial_occlusion_blood_pump_baseline" ]) def _handler_pressure_occlusion_sync(self, message, timestamp=0.0): """ @@ -188,6 +208,10 @@ message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])) lfv = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10])) + fbp = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11])) + pob = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12])) self.arterial_pressure = art[0] self.venous_pressure = ven[0] @@ -199,6 +223,8 @@ self.venous_pressure_limit_max = vpu[0] self.arterial_long_filtered_pressure = lfa[0] self.venous_long_filtered_pressure = lfv[0] + self.filtered_blood_pump_Occlusion = fbp[0] + self.partial_occlusion_baseline = pob[0] self.hd_pressure_occlusion_timestamp = timestamp def cmd_arterial_pressure_measured_override(self, pres: float, filtered: bool = False, reset: int = NO_RESET) -> int: @@ -320,6 +346,44 @@ self.logger.debug("Timeout!!!!") return False + def cmd_filtered_blood_pump_measured_occlusion_override(self, filtered_occl: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends the measured filtered blood pump occlusion pressure override command + Constraints: + Must be logged into HD. + + @param filtered_occl: integer - pressure (in counts) 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) + occ = integer_to_bytearray(filtered_occl) + payload = rst + occ + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIds.MSG_ID_HD_PARTIAL_OCCLUSION_BLOOD_PUMP_OVERRIDE.value, + payload=payload) + + self.logger.debug("override measured filtered blood pump occlusion pressure") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + if reset == RESET: + str_res = "reset back to normal. " + else: + str_res = str(filtered_occl) + self.logger.debug("Filtered Blood pump occlusion pressure (measured) overridden to " + str_res + + 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_pressure_occlusion_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the pressure/occlusion broadcast interval override command