Index: HemodialysisDevice.py =================================================================== diff -u -rc460fdd776add82105b0688371e2929dcbaf3d57 -r63ad4820f37d0d0a7f611f5cab0eda9ba351e7e0 --- HemodialysisDevice.py (.../HemodialysisDevice.py) (revision c460fdd776add82105b0688371e2929dcbaf3d57) +++ HemodialysisDevice.py (.../HemodialysisDevice.py) (revision 63ad4820f37d0d0a7f611f5cab0eda9ba351e7e0) @@ -255,6 +255,7 @@ MSG_ID_UF_SETTINGS_CHANGE_REQUEST_BY_USER = 0x0011 MSG_ID_UF_SETTINGS_CHANGE_RESPONSE_FROM_HD = 0x0013 MSG_ID_UF_SETTINGS_CHANGE_CONFIRMED_BY_USER = 0x0015 + MSG_ID_TREATMENT_DURATION_SETTING_CHANGE_REQUEST = 0x0016 LITER_TO_ML_CONVERSION_FACTOR = 1000.0 UF_CMD_PAUSE = 0 @@ -307,7 +308,7 @@ """ Handler for response from HD regarding UF change request. - \param message: published blood flow data message + \param message: response message from HD regarding requested ultrafiltration settings change \returns none """ @@ -434,6 +435,27 @@ return 0 + def CmdUITreatmentDurationSettingChangeRequest(self, timeMin=0): + """ + Constructs and sends a UI UF change settings confirmed by user message + + \param timeMin (int): treatment time (in min). + + \returns none + """ + + payload = self.outer_instance.integer2ByteArray(timeMin) + message = DenaliMessage.buildMessage(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=self.MSG_ID_TREATMENT_DURATION_SETTING_CHANGE_REQUEST, + payload=payload) + + print("Sending treatment duration setting change request.") + + # Send message + received_message = self.outer_instance.can_interface.send(message, 0) + + return 0 + class HD_Watchdog: """ \class HD_Watchdog @@ -1971,17 +1993,26 @@ """ - # BloodFlow message IDs + # Treatment message IDs MSG_ID_HD_TREATMENT_TIME_PUBLISHED_DATA = 0x000D + MSG_ID_HD_TREATMENT_STATE_PUBLISHED_DATA = 0X000F - # BloodFlow broadcast message field positions + # Treatment time broadcast message field positions START_POS_TIME_PRES = DenaliMessage.PAYLOAD_START_INDEX END_POS_TIME_PRES = START_POS_TIME_PRES + 4 START_POS_TIME_ELAPSED = END_POS_TIME_PRES END_POS_TIME_ELAPSED = START_POS_TIME_ELAPSED + 4 START_POS_TIME_REMAINING = END_POS_TIME_ELAPSED END_POS_TIME_REMAINING = START_POS_TIME_REMAINING + 4 + # Treatment state broadcast message field positions + START_POS_TREATMENT_STATE = DenaliMessage.PAYLOAD_START_INDEX + END_POS_TREATMENT_STATE = START_POS_TREATMENT_STATE + 4 + START_POS_UF_STATE = END_POS_TREATMENT_STATE + END_POS_UF_STATE = START_POS_UF_STATE + 4 + START_POS_SALINE_BOLUS_IN_PROGRESS = END_POS_UF_STATE + END_POS_SALINE_BOLUS_IN_PROGRESS = START_POS_SALINE_BOLUS_IN_PROGRESS + 4 + def __init__(self, outer_instance, can_interface=None): """ HD_Treatment constructor @@ -1997,10 +2028,16 @@ msg_id = self.MSG_ID_HD_TREATMENT_TIME_PUBLISHED_DATA can_interface.registerReceivingPublicationFunction(channel_id, msg_id, self.handlerTreatmentTimeSyncFunction) + msg_id = self.MSG_ID_HD_TREATMENT_STATE_PUBLISHED_DATA + can_interface.registerReceivingPublicationFunction(channel_id, msg_id, + self.handlerTreatmentStateSyncFunction) self.TreatmentTimePrescribed = 0 self.TreatmentTimeElapsed = 0 self.TreatmentTimeRemaining = 0 + self.TreatmentState = 0 + self.TreatmentUFState = 0 + self.SalineBolusInProgress = False def handlerTreatmentTimeSyncFunction(self, message): """ @@ -2011,17 +2048,40 @@ \returns none """ - tot = struct.unpack('i',bytearray( + tot = struct.unpack('i', bytearray( message['message'][self.START_POS_TIME_PRES:self.END_POS_TIME_PRES])) - ela = struct.unpack('i',bytearray( + ela = struct.unpack('i', bytearray( message['message'][self.START_POS_TIME_ELAPSED:self.END_POS_TIME_ELAPSED])) - rem = struct.unpack('i',bytearray( + rem = struct.unpack('i', bytearray( message['message'][self.START_POS_TIME_REMAINING:self.END_POS_TIME_REMAINING])) self.TreatmentTimePrescribed = tot[0] self.TreatmentTimeElapsed = ela[0] self.TreatmentTimeRemaining = rem[0] + def handlerTreatmentStateSyncFunction(self, message): + """ + Handles published treatment state data messages. Treatment state data are captured + for reference. + + \param message: published treatment state data message + \returns none + """ + + tst = struct.unpack('i',bytearray( + message['message'][self.START_POS_TREATMENT_STATE:self.END_POS_TREATMENT_STATE])) + ufs = struct.unpack('i',bytearray( + message['message'][self.START_POS_UF_STATE:self.END_POS_UF_STATE])) + bol = struct.unpack('i',bytearray( + message['message'][self.START_POS_SALINE_BOLUS_IN_PROGRESS:self.END_POS_SALINE_BOLUS_IN_PROGRESS])) + + self.TreatmentState = tst[0] + self.TreatmentUFState = ufs[0] + if bol[0] == 1: + self.SalineBolusInProgress = True + else: + self.SalineBolusInProgress = False + class HD_Pressure_Occlusion: """ \class HD_Pressure_Occlusion