Index: dialin/hd/ui_proxy.py =================================================================== diff -u -rf1ac0e8ba99d1ddb0138918e408dffc0f5eba3c5 -r793aef3c5d08f4c38d44a7c4d881c8f297a84801 --- dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision f1ac0e8ba99d1ddb0138918e408dffc0f5eba3c5) +++ dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision 793aef3c5d08f4c38d44a7c4d881c8f297a84801) @@ -39,6 +39,7 @@ MSG_ID_BLOOD_DIALYSATE_FLOW_SETTING_CHANGE_RESPONSE_FROM_HD = 0x0018 MSG_ID_UI_REQUEST_HD_VERSION = 0x001C MSG_ID_UI_HD_VERSION_RESPONSE = 0x001D + MSG_ID_UF_SETTINGS_CHANGE_CONFIRM_RESPONSE_FROM_HD = 0x002E LITER_TO_ML_CONVERSION_FACTOR = 1000.0 UF_CMD_PAUSE = 0 @@ -97,7 +98,21 @@ END_POS_UF_CHG_RSP_RATE = START_POS_UF_CHG_RSP_RATE + 4 START_POS_UF_CHG_RSP_RATE_DIFF = END_POS_UF_CHG_RSP_RATE END_POS_UF_CHG_RSP_RATE_DIFF = START_POS_UF_CHG_RSP_RATE_DIFF + 4 + START_POS_UF_CHG_RSP_OLD_RATE = END_POS_UF_CHG_RSP_RATE_DIFF + END_POS_UF_CHG_RSP_OLD_RATE = START_POS_UF_CHG_RSP_OLD_RATE + 4 + # HD response to UF volume change confirmation message field positions + START_POS_UF_CNF_RSP_RESP = DenaliMessage.PAYLOAD_START_INDEX + END_POS_UF_CNF_RSP_RESP = START_POS_UF_CNF_RSP_RESP + 4 + START_POS_UF_CNF_RSP_REJECT_REASON = END_POS_UF_CNF_RSP_RESP + END_POS_UF_CNF_RSP_REJECT_REASON = START_POS_UF_CNF_RSP_REJECT_REASON + 4 + START_POS_UF_CNF_RSP_VOL = END_POS_UF_CNF_RSP_RESP + END_POS_UF_CNF_RSP_VOL = START_POS_UF_CNF_RSP_VOL + 4 + START_POS_UF_CNF_RSP_TIME = END_POS_UF_CNF_RSP_VOL + END_POS_UF_CNF_RSP_TIME = START_POS_UF_CNF_RSP_TIME + 4 + START_POS_UF_CNF_RSP_RATE = END_POS_UF_CNF_RSP_TIME + END_POS_UF_CNF_RSP_RATE = START_POS_UF_CNF_RSP_RATE + 4 + # HD response to blood/dialysate flow change request message field positions START_POS_BLD_DIAL_CHG_RSP_ACCEPTED = DenaliMessage.PAYLOAD_START_INDEX END_POS_BLD_DIAL_CHG_RSP_ACCEPTED = START_POS_BLD_DIAL_CHG_RSP_ACCEPTED + 4 @@ -123,6 +138,9 @@ self.MSG_ID_UF_SETTINGS_CHANGE_RESPONSE_FROM_HD, self.handler_uf_change_response) self.can_interface.register_receiving_publication_function(channel_id, + self.MSG_ID_UF_SETTINGS_CHANGE_CONFIRM_RESPONSE_FROM_HD, + self.handler_uf_change_confirm_response) + self.can_interface.register_receiving_publication_function(channel_id, self.MSG_ID_TREATMENT_DURATION_SETTING_CHANGE_RESPONSE_FROM_HD, self.handler_treatment_duration_change_response) self.can_interface.register_receiving_publication_function(channel_id, @@ -155,6 +173,7 @@ self.uf_change_rate_ml_min = 0.0 self.uf_change_time_diff = 0 self.uf_change_rate_diff = 0.0 + self.uf_old_rate_ml_min = 0.0 # initialize variables that will be populated by response from HD to blood & dialysate flow rate change request self.blood_and_dialysate_flow_rate_change_succeeded = False self.blood_and_dialysate_flow_rate_change_reject_reason = 0 @@ -306,19 +325,56 @@ message['message'][self.START_POS_UF_CHG_RSP_RATE:self.END_POS_UF_CHG_RSP_RATE])) rtd = struct.unpack('f', bytearray( message['message'][self.START_POS_UF_CHG_RSP_RATE_DIFF:self.END_POS_UF_CHG_RSP_RATE_DIFF])) + ort = struct.unpack('f', bytearray( + message['message'][self.START_POS_UF_CHG_RSP_OLD_RATE:self.END_POS_UF_CHG_RSP_OLD_RATE])) if rsp[0] == self.RESPONSE_REJECTED: resp = False else: resp = True self.uf_change_succeeded = resp self.uf_change_reject_reason = rea[0] - self.UFChangeVolumeL = vol[0] / self.LITER_TO_ML_CONVERSION_FACTOR + self.uf_change_volume_ml = vol[0] / self.LITER_TO_ML_CONVERSION_FACTOR self.uf_change_time_min = tim[0] self.uf_change_time_diff = tmd[0] self.uf_change_rate_ml_min = rat[0] - self.UFChangeRateDiff = rtd[0] + self.uf_change_rate_diff = rtd[0] + self.uf_old_rate_ml_min = ort[0] + def handler_uf_change_confirm_response(self, message): + """ + Handler for response from HD regarding UF change confirmation. + + \param message: response message from HD regarding confirmed ultrafiltration settings change.\n + BOOL Accepted \n + U32 RejectReason (if not accepted) + F32 UF Volume (mL) - converted to Liters \n + U32 treatment Time (min) \n + F32 UF Rate (mL/min) \n + + \returns none + """ + rsp = struct.unpack('i', bytearray( + message['message'][self.START_POS_UF_CNF_RSP_RESP:self.END_POS_UF_CNF_RSP_RESP])) + rea = struct.unpack('i', bytearray( + message['message'][self.START_POS_UF_CNF_RSP_REJECT_REASON:self.END_POS_UF_CNF_RSP_REJECT_REASON])) + vol = struct.unpack('f', bytearray( + message['message'][self.START_POS_UF_CNF_RSP_VOL:self.END_POS_UF_CNF_RSP_VOL])) + tim = struct.unpack('i', bytearray( + message['message'][self.START_POS_UF_CNF_RSP_TIME:self.END_POS_UF_CNF_RSP_TIME])) + rat = struct.unpack('f', bytearray( + message['message'][self.START_POS_UF_CNF_RSP_RATE:self.END_POS_UF_CNF_RSP_RATE])) + + if rsp[0] == self.RESPONSE_REJECTED: + resp = False + else: + resp = True + self.uf_change_succeeded = resp + self.uf_change_reject_reason = rea[0] + self.uf_change_volume_ml = vol[0] / self.LITER_TO_ML_CONVERSION_FACTOR + self.uf_change_time_min = tim[0] + self.uf_change_rate_ml_min = rat[0] + def cmd_ui_checkin_with_hd(self): """ Constructs and sends the ui check-in message