Index: TD_HDF/interface.ui
===================================================================
diff -u
--- TD_HDF/interface.ui (revision 0)
+++ TD_HDF/interface.ui (revision 31a04301e0719002e80528c8d1e08aa452925f78)
@@ -0,0 +1,637 @@
+
+
+ ui_interface
+
+
+
+ 0
+ 0
+ 496
+ 532
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 100000
+ 100000
+
+
+
+
+ 10
+
+
+
+ &3 Treatment/&C HDF
+
+
+ -
+
+
-
+
+
+ Req [0xBD00]
+
+
+
+ -
+
+
+ Reset
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Send
+
+
+
+ -
+
+
+ Qt::AlignCenter
+
+
+ 100
+
+
+
+ -
+
+
+ Reset
+
+
+
+ -
+
+
+ Qt::AlignCenter
+
+
+ 100
+
+
+
+ -
+
+
+ requested rate
+
+
+
+ -
+
+
+ requested volume
+
+
+
+ -
+
+
+ Accepted
+
+
+
+ -
+
+
+
+ 200
+ 0
+
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Send
+
+
+
+ -
+
+
+ QFrame::Box
+
+
+ QFrame::Sunken
+
+
+ --
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Req [0xBF00]
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 200
+ 0
+
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ is HDF requested
+
+
+
+ -
+
+
+ color: rgb(238, 238, 236);
+background-color: #0E4C92;
+
+
+
+ 192 : [0xC000] : Auto Substitution Response
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Qt::AlignCenter
+
+
+ 100
+
+
+
+ -
+
+
+ Send
+
+
+
+ -
+
+
+ Qt::AlignCenter
+
+
+ 100
+
+
+
+ -
+
+
+
+ 200
+ 0
+
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ hdf state
+
+
+
+ -
+
+
+
+ 200
+ 0
+
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ current Rate
+
+
+
+ -
+
+
+ color: rgb(238, 238, 236);
+background-color: #0E4C92;
+
+
+
+ 188 : [0xBC00] : HDF Data
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Rejection Reason
+
+
+
+ -
+
+
+ Rejection Reason
+
+
+
+ -
+
+
+ color: rgb(238, 238, 236);
+background-color: #0E4C92;
+
+
+
+ 194 : [0xC200] : HDF Adjustment
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ auto sub state
+
+
+
+ -
+
+
+ target TMP
+
+
+
+ -
+
+
+ Reset
+
+
+
+ -
+
+
+ QFrame::Box
+
+
+ QFrame::Sunken
+
+
+ --
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Qt::AlignCenter
+
+
+ 100
+
+
+
+ -
+
+
+ total volume
+
+
+
+ -
+
+
+ color: rgb(238, 238, 236);
+background-color: #0E4C92;
+
+
+
+ 190 : [0xBE00] : HDF State Response
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Accepted
+
+
+
+ -
+
+
+
+ 200
+ 0
+
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ current TMP
+
+
+
+ -
+
+
+
+ 200
+ 0
+
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ Send
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Reset
+
+
+
+ -
+
+
+ Qt::AlignCenter
+
+
+ 100
+
+
+
+ -
+
+
+ Qt::AlignCenter
+
+
+ 100
+
+
+
+ -
+
+
+ Treatment Mode
+
+
+
+ -
+
+
+ Presc. Sub. Fluid Vol
+
+
+
+ -
+
+
+ Req [0xC100]
+
+
+
+ -
+
+
+ Accepted
+
+
+
+ -
+
+
+ Rejection Reason
+
+
+
+ -
+
+
+ Rejection Reason
+
+
+
+ -
+
+
+ QFrame::Box
+
+
+ QFrame::Sunken
+
+
+ --
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ QFrame::Box
+
+
+ QFrame::Sunken
+
+
+ --
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
+
+
+
+
Index: TD_HDF/loader.py
===================================================================
diff -u
--- TD_HDF/loader.py (revision 0)
+++ TD_HDF/loader.py (revision 31a04301e0719002e80528c8d1e08aa452925f78)
@@ -0,0 +1,263 @@
+"""
+ TD Recirculate 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 Recirculate 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_PAUSE_SUB_FLOW_REQUEST.value,
+ self.handle_hdf_state_cmd_request)
+ self.can_interface.register_receiving_publication_function(
+ CAN.CanChannels.ui_to_td_ch_id,
+ MsgIds.MSG_ID_UI_AUTO_SUBSTITUTION_REQUEST.value,
+ self.handle_auto_sub_state_cmd_request)
+ self.can_interface.register_receiving_publication_function(
+ CAN.CanChannels.ui_to_td_ch_id,
+ MsgIds.MSG_ID_UI_HDF_ADJUSTMENT_REQUEST.value,
+ self.handle_hdf_adjustment_request)
+
+
+ def _init_loader(self):
+ """
+ finds and creates widgets
+ :return: none
+ """
+ self.hdfState = [
+ "Paused",
+ "Resume",
+ ]
+
+ self.autoSubState = [
+ "ON",
+ "OFF",
+ ]
+
+ self.tbDataSend = self.find_widget(QtWidgets.QToolButton , 'tbDataSend' )
+ self.tbDataReset = self.find_widget(QtWidgets.QToolButton , 'tbDataReset' )
+ self.sbHDFState = self.find_widget(QtWidgets.QSpinBox , 'sbHDFState' )
+ self.sbAutoSubState = self.find_widget(QtWidgets.QSpinBox , 'sbAutoSubState' )
+ self.slreqRate = self.find_widget(QtWidgets.QSlider , 'slreqRate' )
+ self.lbreqRate = self.find_widget(QtWidgets.QLabel , 'lbreqRate' )
+ self.sltargetTMP = self.find_widget(QtWidgets.QSlider , 'sltargetTMP' )
+ self.lbtargetTMP = self.find_widget(QtWidgets.QLabel , 'lbtargetTMP' )
+ self.slcurrentRate = self.find_widget(QtWidgets.QSlider , 'slcurrentRate' )
+ self.lbcurrentRate = self.find_widget(QtWidgets.QLabel , 'lbcurrentRate' )
+ self.slcurrentTMP = self.find_widget(QtWidgets.QSlider , 'slcurrentTMP' )
+ self.lbcurrentTMP = self.find_widget(QtWidgets.QLabel , 'lbcurrentTMP' )
+ self.slreqVol = self.find_widget(QtWidgets.QSlider , 'slreqVol' )
+ self.lbreqVol = self.find_widget(QtWidgets.QLabel , 'lbreqVol' )
+ self.sltotalVol = self.find_widget(QtWidgets.QSlider , 'sltotalVol' )
+ self.lbtotalVol = self.find_widget(QtWidgets.QLabel , 'lbtotalVol' )
+ self.sbIsHdfReqState = self.find_widget(QtWidgets.QSpinBox , 'sbIsHdfReqState' )
+
+ self.tbHDFStateRspSend = self.find_widget(QtWidgets.QToolButton , 'tbHDFStateRspSend' )
+ self.tbHDFStateReset = self.find_widget(QtWidgets.QToolButton , 'tbHDFStateReset' )
+ self.lbHDFState = self.find_widget(QtWidgets.QLabel , 'lbHDFState' )
+ self.cbHDFStateAccepted = self.find_widget(QtWidgets.QCheckBox , 'cbHDFStateAccepted' )
+ self.sbHDFStateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'sbHDFStateRejectReason' )
+
+ self.tbAutoSubRspSend = self.find_widget(QtWidgets.QToolButton , 'tbAutoSubRspSend' )
+ self.tbAutoSubReset = self.find_widget(QtWidgets.QToolButton , 'tbAutoSubReset' )
+ self.lbAutoSub = self.find_widget(QtWidgets.QLabel , 'lbAutoSub' )
+ self.cbAutoSubAccepted = self.find_widget(QtWidgets.QCheckBox , 'cbAutoSubAccepted' )
+ self.sbAutoSubRejectReason = self.find_widget(QtWidgets.QSpinBox , 'sbAutoSubRejectReason' )
+
+ self.tbHDFAdjustRspSend = self.find_widget(QtWidgets.QToolButton , 'tbHDFAdjustRspSend' )
+ self.tbHDFAdjustReset = self.find_widget(QtWidgets.QToolButton , 'tbHDFAdjustReset' )
+ self.cbHDFAdjustAccepted = self.find_widget(QtWidgets.QCheckBox , 'cbHDFAdjustAccepted' )
+ self.lbtxMode = self.find_widget(QtWidgets.QLabel , 'lbtxMode' )
+ self.sbtxModeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'sbtxModeRejectReason' )
+ self.lbprescSubFluidVol = self.find_widget(QtWidgets.QLabel , 'lbprescSubFluidVol' )
+ self.sbprescSubFluidVolRejectReason = self.find_widget(QtWidgets.QSpinBox , 'sbprescSubFluidVolRejectReason' )
+
+
+ def _init_connections(self):
+ """
+ initializes the widget's connections
+ :return: none
+ """
+ self.tbDataSend .clicked.connect ( self.do_hdf_data )
+ self.tbDataReset .clicked.connect ( self.init_progress )
+
+ self.sbHDFState .valueChanged.connect ( self.do_hdf_data )
+ self.sbAutoSubState .valueChanged.connect ( self.do_hdf_data )
+ self.slreqRate .valueChanged.connect ( self.do_hdf_data )
+ self.slreqRate .valueChanged.connect ( lambda value: self.lbreqRate.setText(f"{value/1000:.2f}") )
+ self.sltargetTMP .valueChanged.connect ( self.do_hdf_data )
+ self.sltargetTMP .valueChanged.connect ( lambda value: self.lbtargetTMP.setText(f"{value/1000:.2f}") )
+ self.slcurrentRate .valueChanged.connect ( self.do_hdf_data )
+ self.slcurrentRate .valueChanged.connect ( lambda value: self.lbcurrentRate.setText(f"{value/1000:.2f}") )
+ self.slcurrentTMP .valueChanged.connect ( self.do_hdf_data )
+ self.slcurrentTMP .valueChanged.connect ( lambda value: self.lbcurrentTMP.setText(f"{value/1000:.2f}"))
+ self.slreqVol .valueChanged.connect ( self.do_hdf_data )
+ self.slreqVol .valueChanged.connect ( lambda value: self.lbreqVol.setText(f"{value}") )
+ self.sltotalVol .valueChanged.connect ( self.do_hdf_data )
+ self.sltotalVol .valueChanged.connect ( lambda value: self.lbtotalVol.setText(f"{value}") )
+ self.sbIsHdfReqState .valueChanged.connect ( self.do_hdf_data )
+
+ self.tbHDFStateRspSend .clicked.connect ( self.do_hdf_state_cmd_response )
+ self.tbHDFStateReset .clicked.connect ( self.init_hdf_state_cmd_response )
+
+ self.tbAutoSubRspSend .clicked.connect ( self.do_auto_sub_state_cmd_response )
+ self.tbAutoSubReset .clicked.connect ( self.init_auto_sub_state_cmd_response )
+
+ self.tbHDFAdjustRspSend .clicked.connect ( self.do_hdf_adjustment_cmd_response )
+ self.tbHDFAdjustReset .clicked.connect ( self.init_hdf_adjust_cmd_response )
+
+
+ @Slot()
+ def _init_widgets(self):
+ """
+ initializes the widget's properties
+ :return: none
+ """
+ self.init_progress()
+ self.init_hdf_state_cmd_response()
+ self.init_auto_sub_state_cmd_response()
+ self.init_hdf_adjust_cmd_response()
+
+
+ @Slot()
+ def init_progress(self):
+ self.sbHDFState .setValue ( 0 )
+ self.sbAutoSubState .setValue ( 0 )
+ self.slreqRate .setValue ( 0 )
+ self.sltargetTMP .setValue ( 0 )
+ self.slcurrentRate .setValue ( 0 )
+ self.slcurrentTMP .setValue ( 0 )
+ self.slreqVol .setValue ( 0 )
+ self.sltotalVol .setValue ( 0 )
+ self.sbIsHdfReqState .setValue ( 0 )
+
+
+ @Slot()
+ def init_hdf_state_cmd_response(self):
+ self.lbHDFState .setText ("-- --")
+ self.cbHDFStateAccepted .setChecked ( True )
+ self.sbHDFStateRejectReason .setValue (0)
+
+
+ @Slot()
+ def init_auto_sub_state_cmd_response(self):
+ self.lbAutoSub .setText ("-- --")
+ self.cbAutoSubAccepted .setChecked ( True )
+ self.sbAutoSubRejectReason .setValue (0)
+
+
+ @Slot()
+ def init_hdf_adjust_cmd_response(self):
+ self.lbtxMode .setText ("-- --")
+ self.lbprescSubFluidVol .setText ("-- --")
+ self.cbHDFAdjustAccepted .setChecked ( True )
+ self.sbtxModeRejectReason .setValue (0)
+ self.sbprescSubFluidVolRejectReason .setValue (0)
+
+
+ @Slot()
+ def do_hdf_data(self):
+ """
+ the slot for sending hdf progress data
+ :return: none
+ """
+ self.td_interface.td_hdf_data(
+ self.sbHDFState .value(),
+ self.sbAutoSubState .value(),
+ self.slreqRate .value() / 1000,
+ self.sltargetTMP .value() / 1000,
+ self.slcurrentRate .value() / 1000,
+ self.slcurrentTMP .value() / 1000,
+ self.slreqVol .value() ,
+ self.sltotalVol .value() ,
+ self.sbIsHdfReqState .value(),
+ )
+
+
+ @Slot()
+ def handle_hdf_state_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.hdfState[value] if value >= 0 and value < len(self.hdfState) else ""
+ self.lbHDFState.setText(f"{cmdString} ({value})")
+
+
+ @Slot()
+ def handle_auto_sub_state_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.autoSubState[value] if value >= 0 and value < len(self.autoSubState) else ""
+ self.lbAutoSub.setText(f"{cmdString} ({value})")
+
+
+ @Slot()
+ def handle_hdf_adjustment_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
+ txMode,index = conversions.bytearray_to_integer (message, index)
+ vol,index = conversions.bytearray_to_float (message, index)
+ self.lbtxMode .setText(f"{txMode}")
+ self.lbprescSubFluidVol .setText(f"{vol}")
+
+
+ @Slot()
+ def do_hdf_state_cmd_response(self):
+ self.lbHDFState .setText ("-- --")
+ self.td_interface.td_hdf_state_cmd_response(self.cbHDFStateAccepted.isChecked(),
+ self.sbHDFStateRejectReason.value())
+
+
+ @Slot()
+ def do_auto_sub_state_cmd_response(self):
+ self.lbAutoSub .setText ("-- --")
+ self.td_interface.td_auto_sub_state_response(self.cbAutoSubAccepted.isChecked(),
+ self.sbAutoSubRejectReason.value())
+
+
+ @Slot()
+ def do_hdf_adjustment_cmd_response(self):
+ self.lbtxMode .setText ("-- --")
+ self.lbprescSubFluidVol .setText ("-- --")
+ self.td_interface.td_hdf_adjust_response( self.cbHDFAdjustAccepted.isChecked(),
+ self.sbtxModeRejectReason.value(),
+ self.sbprescSubFluidVolRejectReason.value())