Index: HemodialysisDevice.py =================================================================== diff -u -rfd391b8c2b17088fa1bb18985abb584a156aa73c -r90bbd3f735b72658325f9c4124916cc75d62422a --- HemodialysisDevice.py (.../HemodialysisDevice.py) (revision fd391b8c2b17088fa1bb18985abb584a156aa73c) +++ HemodialysisDevice.py (.../HemodialysisDevice.py) (revision 90bbd3f735b72658325f9c4124916cc75d62422a) @@ -17,8 +17,11 @@ from DialityCoreCanProtocol import DenaliCanMessenger from DialityCoreCanProtocol import DenaliMessage +from DialityCoreCanProtocol import DenaliChannels from time import sleep from binascii import unhexlify +from HD_DialOutFlow import HD_DialOut +from HD_DialOutFlow import DialOutStates import struct @@ -49,6 +52,8 @@ self.Buttons = HD.HD_Buttons(self) self.BloodFlow = HD.HD_BloodFlow(self, self.can_interface) self.Watchdog = HD.HD_Watchdog(self) + ## DialOut is an HD_DialOutFlow object + self.DialOut = HD_DialOut(self.can_interface) class HD__Basics: """ @@ -315,10 +320,8 @@ END_POS_ALARM_TOP = START_POS_ALARM_TOP + 4 START_POS_ALARM_SILENCE_EXPIRES_IN = END_POS_ALARM_TOP END_POS_ALARM_SILENCE_EXPIRES_IN = START_POS_ALARM_SILENCE_EXPIRES_IN + 4 - START_POS_ALARMS_SILENCED = END_POS_ALARM_SILENCE_EXPIRES_IN - END_POS_ALARMS_SILENCED = START_POS_ALARMS_SILENCED + 1 - START_POS_ALARMS_FLAGS = END_POS_ALARMS_SILENCED - END_POS_ALARMS_FLAGS = START_POS_ALARMS_FLAGS + 1 + START_POS_ALARMS_FLAGS = END_POS_ALARM_SILENCE_EXPIRES_IN + END_POS_ALARMS_FLAGS = START_POS_ALARMS_FLAGS + 2 def __init__(self, outer_instance, can_interface=None): """ @@ -339,8 +342,7 @@ self.alarmsState = 0 self.alarmTop = 0 self.alarmsSilenceExpiresIn = 0 - self.alarmsSilenced = False - self.alarmsFlags = byte(0) + self.alarmsFlags = 0 def handlerAlarmsStatusSyncFunction(self, message): """ @@ -360,10 +362,9 @@ self.alarmsSilenceExpiresIn = int.from_bytes(bytearray( message['message'][self.START_POS_ALARM_SILENCE_EXPIRES_IN:self.END_POS_ALARM_SILENCE_EXPIRES_IN]), byteorder=DenaliMessage.BYTE_ORDER) - self.alarmsSilenced = (False if bytearray( - message['message'][self.START_POS_ALARMS_SILENCED:self.END_POS_ALARMS_SILENCED]) != 1 else True) - self.alarmsFlags = bytearray( - message['message'][self.START_POS_ALARMS_FLAGS:self.END_POS_ALARMS_FLAGS]) + self.alarmsFlags = int.from_bytes(bytearray( + message['message'][self.START_POS_ALARMS_FLAGS:self.END_POS_ALARMS_FLAGS]), + byteorder=DenaliMessage.BYTE_ORDER) def CmdAlarmStateOverride(self, reset, state, alarm): """ @@ -570,20 +571,26 @@ self.TargetBloodFlowRate = int.from_bytes(bytearray( message['message'][self.START_POS_SET_PT:self.END_POS_SET_PT]), byteorder=DenaliMessage.BYTE_ORDER) - self.MeasuredBloodFlowRate = struct.unpack('f', bytearray( + flow = struct.unpack('f', bytearray( message['message'][self.START_POS_MEAS_FLOW:self.END_POS_MEAS_FLOW])) - self.MeasuredBloodPumpRotorSpeed = struct.unpack('f', bytearray( + rotor = struct.unpack('f', bytearray( message['message'][self.START_POS_MEAS_ROT_SPEED:self.END_POS_MEAS_ROT_SPEED])) - self.MeasuredBloodPumpSpeed = struct.unpack('f', bytearray( + speed = struct.unpack('f', bytearray( message['message'][self.START_POS_MEAS_SPEED:self.END_POS_MEAS_SPEED])) - self.MeasuredBloodPumpMCSpeed = struct.unpack('f', bytearray( + mcspeed = struct.unpack('f', bytearray( message['message'][self.START_POS_MEAS_MC_SPEED:self.END_POS_MEAS_MC_SPEED])) - self.MeasuredBloodPumpMCCurrent = struct.unpack('f', bytearray( + mccurr = struct.unpack('f', bytearray( message['message'][self.START_POS_MEAS_MC_CURR:self.END_POS_MEAS_MC_CURR])) - self.PWMDutyCyclePct = struct.unpack('f', bytearray( + pwm = struct.unpack('f', bytearray( message['message'][self.START_POS_PWM_DC:self.END_POS_PWM_DC])) - )) + self.MeasuredBloodFlowRate = flow[0] + self.MeasuredBloodPumpRotorSpeed = rotor[0] + self.MeasuredBloodPumpSpeed = speed[0] + self.MeasuredBloodPumpMCSpeed = mcspeed[0] + self.MeasuredBloodPumpMCCurrent = mccurr[0] + self.PWMDutyCyclePct = pwm[0] + def CmdBloodFlowSetPointOverride(self, reset, flow): """ Constructs and sends the blood flow set point override command @@ -871,6 +878,47 @@ # t2 = message_id +def test_HD_DialOutFlow(): + """ + test_HD_DialOutFlow is a pytest function to test the HD_DialOutFlow states + + :return: True if test passed, False, otherwise + """ + # create an HD object called hd + hd_obj = HD() + + # wait 2 seconds and then login to HD as a tester + sleep(2) + hd_obj._Basics.CmdLogInToHD() + + totalVolumeInMl = 2400 + rxTimeInMins = 240 + flowRateMlmin = 100 + + hd_obj.DialOut.setUFRx(totalVolumeInMl, rxTimeInMins, flowRateMlmin) + + + sleep(5) + hd_obj.DialOut.setUFState(DialOutStates.RUN) + sleep(2) + state_run = hd_obj.DialOut.DialOutBroadcast['state'] + print(hd_obj.DialOut.DialOutBroadcast) + + sleep(5) + hd_obj.DialOut.setUFState(DialOutStates.PAUSE) + sleep(2) + state_pause = hd_obj.DialOut.DialOutBroadcast['state'] + print(hd_obj.DialOut.DialOutBroadcast) + + sleep(3) + hd_obj.DialOut.setUFState(DialOutStates.STOP) + sleep(2) + state_stop = hd_obj.DialOut.DialOutBroadcast['state'] + print(hd_obj.DialOut.DialOutBroadcast) + + assert(state_run == 'RUN' and state_stop == 'STOP' and state_pause == 'PAUSE') + + if __name__ == "__main__": # create an HD object called hd hd = HD() @@ -879,6 +927,59 @@ sleep(2) hd._Basics.CmdLogInToHD() + totalVolumeInMl = 2400 + rxTimeInMins = 30 + flowRateMlmin = 100 + + sleep(2) + resp = hd.DialOut.setUFRx(totalVolumeInMl, rxTimeInMins, flowRateMlmin) + print("Set TotalVolume(mL): {}, TotalTime(mins): {} and flowrate (ml/min): {}, resp: {}".format(totalVolumeInMl, + rxTimeInMins, flowRateMlmin, resp)) + + sleep(2) + rxTimeInMins = 60 + resp = hd.DialOut.setUFRx(totalVolumeInMl, rxTimeInMins, flowRateMlmin) + print("Set TotalVolume(mL): {}, TotalTime(mins): {} and flowrate (ml/min): {}, resp: {}".format(totalVolumeInMl, + rxTimeInMins, flowRateMlmin, resp)) + + sleep(5) + hd.DialOut.setUFState(DialOutStates.RUN) + state_run = hd.DialOut.DialOutBroadcast['state'] + sleep(2) + print("After RUN: {}".format(hd.DialOut.DialOutBroadcast)) + + sleep(20) + print("After 20 secs RUN: {}".format(hd.DialOut.DialOutBroadcast)) + + sleep(20) + print("After 40 secs RUN: {}".format(hd.DialOut.DialOutBroadcast)) + + hd.DialOut.setUFState(DialOutStates.PAUSE) + sleep(2) + print("After PAUSE: {}".format(hd.DialOut.DialOutBroadcast)) + state_pause = hd.DialOut.DialOutBroadcast['state'] + + sleep(10) + hd.DialOut.setUFState(DialOutStates.STOP) + sleep(2) + print("---> After STOP:{} <---".format(hd.DialOut.DialOutBroadcast)) + + sleep(3) + hd.DialOut.setUFState(DialOutStates.RUN) + sleep(2) + state_stop = hd.DialOut.DialOutBroadcast['state'] + print("After RUN again: {}".format(hd.DialOut.DialOutBroadcast)) + + sleep(3) + hd.DialOut.setUFState(DialOutStates.STOP) + sleep(2) + state_stop = hd.DialOut.DialOutBroadcast['state'] + print("After STOP: {}".format(hd.DialOut.DialOutBroadcast)) + + sleep(5) + hd.DialOut.plotBroadCastSignals() + + exit() tgtRate = 0 hd.BloodFlow.CmdBloodFlowBroadcastIntervalOverride(hd.NO_RESET, 2000) @@ -892,4 +993,8 @@ hd.BloodFlow.CmdBloodFlowBroadcastIntervalOverride(hd.NO_RESET, 200) tgtRate = hd.BloodFlow.TargetBloodFlowRate + sleep(1) + + print(hd.BloodFlow.MeasuredBloodFlowRate) + # hd.BloodFlow.CmdBloodFlowBroadcastIntervalOverride(hd.RESET,0)