Index: HemodialysisDevice.py =================================================================== diff -u -r5f23b5ca87b6211702df8aa805fa767026862b77 -r194ee2ccf460b9e05ff7969a9ca258ec757bc239 --- HemodialysisDevice.py (.../HemodialysisDevice.py) (revision 5f23b5ca87b6211702df8aa805fa767026862b77) +++ HemodialysisDevice.py (.../HemodialysisDevice.py) (revision 194ee2ccf460b9e05ff7969a9ca258ec757bc239) @@ -17,8 +17,8 @@ from DialityCoreSerialProtocol import DialitySerialMessenger from DialityCoreSerialProtocol import DialityPacket from time import sleep +from binascii import unhexlify - class HD: """ \class HD @@ -50,11 +50,11 @@ """ send login command via serial port - \returns 0 if logged, 1 if it is not logged + \returns 1 if logged in, 0 if log in failed """ - request_id = 8000 + request_id = 0x8000 cargo = b'123' message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) @@ -78,18 +78,58 @@ - def OffButton(self): + def HDMessageInsert(self, msg): """ - sends the Off button command + sends the insert HD message command - \returns 0 if successful, non-zero otherwise + \param msg: byte array - properly formatted HD message to insert + \returns 1 if successful, zero otherwise """ - request_id = 8001 - cargo = b'\x00\x01\x00\x00\x00' + request_id = 0x8001 + cargo = msg message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + print("insert HD message") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Inserted message: " + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + + def OffButtonOverride(self, reset, state): + """ + sends the Off button override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param state: integer - 1 to override off button to "pressed", 0 to "released" + \returns 1 if successful, zero otherwise + """ + + request_id = 0x8002 + + rst = self.__integer2ByteArray(reset) + sta = self.__integer2ByteArray(state) + cargo = rst + sta + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + print("override off button") # Send message @@ -100,7 +140,7 @@ print(received_message) - print("Logged:" + str(received_message[4])) + print("Off button overridden to " + ("pressed" if state != 0 else "released") + ":" + str(received_message[4])) # 5th element is OK or not OK return received_message[4] @@ -109,6 +149,388 @@ print("Timeout!!!!") return False + + + def StopButtonOverride(self, reset, state): + """ + sends the Stop button override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param state: integer - 1 to override stop button to "pressed", 0 to "released" + \returns 1 if successful, zero otherwise + """ + + request_id = 0x8003 + + rst = self.__integer2ByteArray(reset) + sta = self.__integer2ByteArray(state) + cargo = rst + sta + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override stop button") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Stop button overridden to " + ("pressed" if state != 0 else "released") + ":" + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def AlarmLampPatternOverride(self, reset, pattern): + """ + sends the alarm lamp pattern override command. + + \param reset: integer - 1 to reset a previous override, 0 to override + \param pattern: integer - ID of alarm lamp pattern to override with + \returns 1 if successful, zero otherwise + + \details Patterns: \n + 0 = off \n + 1 = ok \n + 2 = fault \n + 3 = high \n + 4 = medium \n + 5 = low \n + 6 = manual + """ + + request_id = 0x8004 + + rst = self.__integer2ByteArray(reset) + pat = self.__integer2ByteArray(pattern) + cargo = rst + pat + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override alarm lamp pattern") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + if pattern == 0: + str_pat = "off" + elif pattern == 1: + str_pat = "ok" + elif pattern == 2: + str_pat = "fault" + elif pattern == 3: + str_pat = "high" + elif pattern == 4: + str_pat = "medium" + elif pattern == 5: + str_pat = "low" + else: + str_pat = "manual" + + print("Alarm lamp pattern overridden to " + str_pat + ":" + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def WatchdogTaskCheckinOverride(self, reset, state, task): + """ + sends the watchdog task check-in override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param state: integer - 1 for task checked in, 0 for task not checked in + \param task: integer - ID of task to override + \returns 1 if successful, zero otherwise + """ + + request_id = 0x8005 + + rst = self.__integer2ByteArray(reset) + sta = self.__integer2ByteArray(state) + tsk = self.__integer2ByteArray(task) + cargo = rst + sta + tsk + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override watchdog task check-in state") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Watchdog task check-in overridden to " + ("checked in" if state != 0 else "not checked in") + ":" + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def AlarmStateOverride(self, reset, state, alarm): + """ + sends the alarm state override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param state: integer - 1 for alarm active, 0 for alarm inactive + \param alarm: integer - ID of alarm to override + \returns 1 if successful, zero otherwise + """ + + request_id = 0x8006 + + rst = self.__integer2ByteArray(reset) + sta = self.__integer2ByteArray(state) + alm = self.__integer2ByteArray(alarm) + cargo = rst + sta + alm + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override alarm state") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Alarm state overridden to " + ("active" if state != 0 else "inactive") + ":" + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def AlarmTimeOverride(self, reset, time_ms, alarm): + """ + sends the alarm time override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param time_ms: integer - time (in ms) since alarm was activated + \param alarm: integer - ID of alarm to override + \returns 1 if successful, zero otherwise + """ + + request_id = 0x8007 + + rst = self.__integer2ByteArray(reset) + ms = self.__integer2ByteArray(time_ms) + alm = self.__integer2ByteArray(alarm) + cargo = rst + ms + alm + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override alarm time since activated") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Alarm time since activated overridden to " + str(time_ms) + " ms: " + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def BloodFlowSetPointOverride(self, reset, flow): + """ + sends the blood flow set point override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param flow: integer - flow set point (in mL/min) to override with + \returns 1 if successful, zero otherwise + """ + + request_id = 0x8008 + + rst = self.__integer2ByteArray(reset) + flo = self.__integer2ByteArray(flow) + cargo = rst + flo + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override blood flow set point") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Blood flow set point overridden to " + str(flow) + " mL/min: " + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def BloodFlowMeasuredOverride(self, reset, flow): + """ + sends the measured blood flow override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param flow: integer - measured flow (in mL/min) to override with + \returns 1 if successful, zero otherwise + """ + + request_id = 0x8009 + + rst = self.__integer2ByteArray(reset) + flo = self.__integer2ByteArray(flow) + cargo = rst + flo + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override measured blood flow") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Blood flow (measured)) overridden to " + str(flow) + " mL/min: " + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def BloodPumpMeasuredSpeedOverride(self, reset, speed): + """ + sends the measured blood pump speed override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param speed: integer - speed (in RPM) to override with + \returns 1 if successful, zero otherwise + """ + + request_id = 0x800A + + rst = self.__integer2ByteArray(reset) + spd = self.__integer2ByteArray(speed) + cargo = rst + spd + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override measured blood pump speed") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Blood pump speed (measured) overridden to " + str(speed) + " RPM: " + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def BloodPumpMeasuredCurrentOverride(self, reset, curr): + """ + sends the measured blood pump motor current override command + + \param reset: integer - 1 to reset a previous override, 0 to override + \param curr: integer - current (in mA) to override with + \returns 1 if successful, zero otherwise + """ + + request_id = 0x800B + + rst = self.__integer2ByteArray(reset) + cur = self.__integer2ByteArray(curr) + cargo = rst + cur + + message = DialityPacket.buildPacket(request_id=request_id, cargo=cargo) + + print("override measured blood pump motor current") + + # Send message + received_message = self.__serialPort.send(message) + + # If there is content... + if len(received_message) != 0: + + print(received_message) + + print("Blood pump current (measured) overridden to " + str(curr) + " mA: " + str(received_message[4])) + + # 5th element is OK or not OK + return received_message[4] + + else: + print("Timeout!!!!") + return False + + + + def __integer2ByteArray(self, val): + fmt = '%08x' # integer to hex string formatter + b = unhexlify(fmt % val) # convert reset int to byte array + b = b[::-1] # little endian byte order + return b + + + def registerAsyncReceiver(self, message_id, method): t1 = method t2 = message_id