Index: TD_DryBicartDisconnect/interface.ui
===================================================================
diff -u
--- TD_DryBicartDisconnect/interface.ui (revision 0)
+++ TD_DryBicartDisconnect/interface.ui (revision d51b02e411ec18f90a6bbb2f6ed8f7e6f8b17bb5)
@@ -0,0 +1,252 @@
+
+
+ ui_interface
+
+
+
+ 0
+ 0
+ 521
+ 193
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 100000
+ 100000
+
+
+
+
+ 10
+
+
+
+ &3 Treatment/&D Dry Bicart Disconnect
+
+
+ -
+
+
-
+
+
+ Req [0xC500]
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Send
+
+
+
+ -
+
+
+ QFrame::Box
+
+
+ QFrame::Sunken
+
+
+ --
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Progress
+
+
+
+ -
+
+
+ Reset
+
+
+
+ -
+
+
+ color: rgb(238, 238, 236);
+background-color: #0E4C92;
+
+
+
+ 198 : [0xC600] : Dry Bicart Disconnect Command Response
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Total
+
+
+
+ -
+
+
+
+ 200
+ 0
+
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ Send
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 200
+ 0
+
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ Reset
+
+
+
+ -
+
+
+ color: rgb(238, 238, 236);
+background-color: #0E4C92;
+
+
+
+ 196 : [0xC400] : Dry Bicart Disconnect Data
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ showDialog
+
+
+
+ -
+
+
+ drain Running
+
+
+
+ -
+
+
+ depressurize running
+
+
+
+ -
+
+
+ Accepted
+
+
+
+ -
+
+
+ Rejection Reason
+
+
+
+ -
+
+
+ Qt::AlignCenter
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
Index: TD_DryBicartDisconnect/loader.py
===================================================================
diff -u
--- TD_DryBicartDisconnect/loader.py (revision 0)
+++ TD_DryBicartDisconnect/loader.py (revision d51b02e411ec18f90a6bbb2f6ed8f7e6f8b17bb5)
@@ -0,0 +1,146 @@
+"""
+ TD Dry Bicart Disconnect UI loader
+"""
+# Python
+import os
+import can
+import struct
+
+# Qt
+from PySide2 import QtCore, QtWidgets
+from PySide2.QtCore import Slot
+
+# parent
+from engine.dynamicloader import DynamicLoader
+
+# plugin specific
+from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions
+from leahi_dialin.protocols import CAN
+from leahi_dialin.utils import conversions
+
+# td simulator
+from leahi_dialin.ui.td_messaging import TD_Messaging
+
+class Loader(DynamicLoader):
+ """
+ TD Dry Bicart Disconnect UI loader
+ """
+ def __init__(self):
+ self.td_interface = TD_Messaging()
+ self.can_interface = self.td_interface.can_interface
+ super().__init__(os.path.dirname(__file__))
+
+ if self.can_interface is not None:
+ self.can_interface.register_receiving_publication_function(
+ CAN.CanChannels.ui_to_td_ch_id,
+ MsgIds.MSG_ID_UI_DRY_BICARD_DISCONNECT_REQUEST.value,
+ self.handle_dry_bicart_disconnect_cmd_request)
+
+
+ def _init_loader(self):
+ """
+ finds and creates widgets
+ :return: none
+ """
+ self.cmdStrings = [
+ "Drain",
+ "Depressurize",
+ "Cancel",
+ "Done",
+ ]
+
+ self.tbResetData = self.find_widget(QtWidgets.QToolButton , 'tbResetData' )
+ self.tbSendData = self.find_widget(QtWidgets.QToolButton , 'tbSendData' )
+ self.slTotal = self.find_widget(QtWidgets.QSlider , 'slTotal' )
+ self.lbTotal = self.find_widget(QtWidgets.QLabel , 'lbTotal' )
+ self.slProgress = self.find_widget(QtWidgets.QSlider , 'slProgress' )
+ self.lbProgress = self.find_widget(QtWidgets.QLabel , 'lbProgress' )
+ self.cbShowDialog = self.find_widget(QtWidgets.QCheckBox , 'cbShowDialog' )
+ self.cbDrainInProgress = self.find_widget(QtWidgets.QCheckBox , 'cbDrainInProgress' )
+ self.cbDepressurizeInProgress = self.find_widget(QtWidgets.QCheckBox , 'cbDepressurizeInProgress' )
+
+
+ self.lbReqCommand = self.find_widget(QtWidgets.QLabel , 'lbReqCommand' )
+ self.tbRspReset = self.find_widget(QtWidgets.QToolButton , 'tbRspReset' )
+ self.tbRspSend = self.find_widget(QtWidgets.QToolButton , 'tbRspSend' )
+ self.sbRspRejectReason = self.find_widget(QtWidgets.QSpinBox , 'sbRspRejectReason' )
+ self.cbAccepted = self.find_widget(QtWidgets.QCheckBox , 'cbAccepted' )
+
+
+ def _init_connections(self):
+ """
+ initializes the widget's connections
+ :return: none
+ """
+ self.tbResetData .clicked.connect ( self.init_progress )
+ self.tbSendData .clicked.connect ( self.do_dry_bicart_data )
+
+ self.slTotal .valueChanged.connect ( self.do_dry_bicart_data )
+ self.slTotal .valueChanged.connect ( lambda value: self.lbTotal.setText(f"{value}") )
+ self.slProgress .valueChanged.connect ( self.do_dry_bicart_data )
+ self.slProgress .valueChanged.connect ( lambda value: self.lbProgress.setText(f"{value}") )
+ self.cbShowDialog .clicked.connect ( self.do_dry_bicart_data )
+ self.cbDrainInProgress .clicked.connect ( self.do_dry_bicart_data )
+ self.cbDepressurizeInProgress .clicked.connect ( self.do_dry_bicart_data )
+
+ self.tbRspReset .clicked.connect ( self.init_cmd_response )
+ self.tbRspSend .clicked.connect ( self.do_dry_bicart_cmd_response )
+
+
+ @Slot()
+ def _init_widgets(self):
+ """
+ initializes the widget's properties
+ :return: none
+ """
+ self.init_progress()
+ self.init_cmd_response()
+
+
+ @Slot()
+ def init_progress(self):
+ self.slTotal .setValue ( 0 )
+ self.slProgress .setValue ( 0 )
+ self.cbShowDialog .setChecked ( False )
+ self.cbDrainInProgress .setChecked ( False )
+ self.cbDepressurizeInProgress .setChecked ( False )
+
+
+ @Slot()
+ def init_cmd_response(self):
+ self.lbReqCommand .setText ("-- --")
+ self.cbAccepted .setChecked ( True )
+ self.sbRspRejectReason .setValue (0)
+
+
+ @Slot()
+ def do_dry_bicart_data(self):
+ """
+ the slot for sending rinseback progress data
+ :return: none
+ """
+ self.td_interface.td_dry_bicart_disconnect_data(
+ self.cbShowDialog .isChecked(),
+ self.slTotal .value(),
+ self.slProgress .value(),
+ self.cbDrainInProgress .isChecked(),
+ self.cbDepressurizeInProgress .isChecked()
+ )
+
+
+ @Slot()
+ def handle_dry_bicart_disconnect_cmd_request(self, message, timestamp = 0.0):
+ """
+ Called when the user sends a rinseback command request to firmware from UI
+ @return: None
+ """
+ message = message['message']
+ index = MsgFieldPositions.START_POS_FIELD_1
+ value,index = conversions.bytearray_to_integer(message, index)
+ cmdString = self.cmdStrings[value] if value >= 0 and value < len(self.cmdStrings) else ""
+ self.lbReqCommand.setText(f"{cmdString} ({value})")
+
+
+ @Slot()
+ def do_dry_bicart_cmd_response(self):
+ self.td_interface.td_dry_bicart_cmd_response(self.cbAccepted.isChecked(), self.sbRspRejectReason.value())
Index: TD_SyringePump/interface.ui
===================================================================
diff -u
--- TD_SyringePump/interface.ui (revision 0)
+++ TD_SyringePump/interface.ui (revision d51b02e411ec18f90a6bbb2f6ed8f7e6f8b17bb5)
@@ -0,0 +1,203 @@
+
+
+ ui_interface
+
+
+
+ 0
+ 0
+ 356
+ 404
+
+
+
+ &5 TD info/&D TD Syringe Pump
+
+
+ -
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 280
+ 0
+
+
+
+
+ 10
+
+
+
+ color: rgb(238, 238, 236);
+background-color: rgb(100, 49, 180);
+
+
+ 177 : [0xB100] : TD Syringe Pump
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Send
+
+
+
+
+
+
+
+ -
+
+
+ 10
+
+
-
+
+
+ -
+
+
+ -
+
+
+ Set Rate
+
+
+
+ -
+
+
+ 1.200000000000000
+
+
+
+ -
+
+
+ Meas Rate
+
+
+
+ -
+
+
+ 3.300000000000000
+
+
+
+ -
+
+
+ -
+
+
+ Volume Delivered
+
+
+
+ -
+
+
+ 5.000000000000000
+
+
+
+ -
+
+
+ Meas Home
+
+
+
+ -
+
+
+ 24.000000000000000
+
+
+
+ -
+
+
+ Meas Force
+
+
+
+ -
+
+
+ 24.000000000000000
+
+
+
+ -
+
+
+ Safety Volume
+
+
+
+ -
+
+
+ 3.000000000000000
+
+
+
+ -
+
+
+ Status
+
+
+
+ -
+
+
+ -
+
+
+ Pump State
+
+
+
+ -
+
+
+ Delivery State
+
+
+
+ -
+
+
+ Position
+
+
+
+
+
+
+
+
+ sbHome
+ sbSafetyVolume
+ tbSend
+
+
+
+
Index: TD_SyringePump/loader.py
===================================================================
diff -u
--- TD_SyringePump/loader.py (revision 0)
+++ TD_SyringePump/loader.py (revision d51b02e411ec18f90a6bbb2f6ed8f7e6f8b17bb5)
@@ -0,0 +1,89 @@
+"""
+ The TD Syringe Pump ui loader
+"""
+# Python
+import os
+
+# Qt
+from PySide2 import QtCore, QtWidgets
+from PySide2.QtCore import Slot
+
+# parent
+from engine.dynamicloader import DynamicLoader
+
+# hd Simulator
+from leahi_dialin.ui.td_messaging import TD_Messaging
+
+
+class Loader(DynamicLoader):
+ """
+ The TD Syringe Pump ui loader
+ """
+
+ def __init__(self):
+ self.td_interface = TD_Messaging()
+ super().__init__(os.path.dirname(__file__))
+
+
+ def _init_loader(self):
+ """
+ finds and creates widgets
+ :return: none
+ """
+ self.tbSend = self.find_widget(QtWidgets.QToolButton , 'tbSend' )
+
+ self.sbPumpState = self.find_widget(QtWidgets.QSpinBox , 'sbPumpState' )
+ self.sbDeliveryState = self.find_widget(QtWidgets.QSpinBox , 'sbDeliveryState' )
+ self.sbSetRate = self.find_widget(QtWidgets.QDoubleSpinBox , 'sbSetRate' )
+ self.sbMeasRate = self.find_widget(QtWidgets.QDoubleSpinBox , 'sbMeasRate' )
+ self.sbPosition = self.find_widget(QtWidgets.QSpinBox , 'sbPosition' )
+ self.sbVolumeDelivered = self.find_widget(QtWidgets.QDoubleSpinBox , 'sbVolumeDelivered' )
+ self.sbHome = self.find_widget(QtWidgets.QDoubleSpinBox , 'sbHome' )
+ self.sbForce = self.find_widget(QtWidgets.QDoubleSpinBox , 'sbForce' )
+ self.sbSafetyVolume = self.find_widget(QtWidgets.QDoubleSpinBox , 'sbSafetyVolume' )
+ self.sbStatus = self.find_widget(QtWidgets.QSpinBox , 'sbStatus' )
+
+
+ def _init_connections(self):
+ """
+ initializes the widgets connections
+ :return: none
+ """
+ self.tbSend.clicked.connect(self.do_syringePump_data)
+
+
+ @Slot()
+ def _init_widgets(self):
+ """
+ initializes the widgets' properties
+ :return: none
+ """
+ self.sbPumpState .setValue(0)
+ self.sbDeliveryState .setValue(0)
+ self.sbSetRate .setValue(0)
+ self.sbMeasRate .setValue(0)
+ self.sbPosition .setValue(0)
+ self.sbVolumeDelivered .setValue(0)
+ self.sbHome .setValue(0)
+ self.sbForce .setValue(0)
+ self.sbSafetyVolume .setValue(0)
+ self.sbStatus .setValue(0)
+
+
+ @Slot()
+ def do_syringePump_data(self):
+ """
+ the slot for syringePump data change
+ :return: none
+ """
+ self.td_interface.td_syringePump(
+ self.sbPumpState .value(),
+ self.sbDeliveryState .value(),
+ self.sbSetRate .value(),
+ self.sbMeasRate .value(),
+ self.sbPosition .value(),
+ self.sbVolumeDelivered .value(),
+ self.sbHome .value(),
+ self.sbForce .value(),
+ self.sbSafetyVolume .value(),
+ self.sbStatus .value())