""" The ui loader class """ # Python import os import can import struct # Qt from PySide2 import QtWidgets from PySide2.QtCore import Slot # parent from engine.dynamicloader import DynamicLoader # plugin specific from leahi_dialin.common.td_defs import td_enum_repository as TD_Defs # dialin from leahi_dialin.ui.td_messaging import TD_Messaging from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.protocols import CAN from leahi_dialin.utils import conversions class Loader(DynamicLoader): """ The ui loader class """ 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: channel_id = CAN.DenaliChannels.ui_to_td_ch_id create_tx_request_message_id = MsgIds.MSG_ID_UI_INITIATE_TREATMENT_WORKFLOW.value self.can_interface.register_receiving_publication_function(channel_id, create_tx_request_message_id, self.handle_create_tx_request) load_request_message_id = MsgIds.MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST.value self.can_interface.register_receiving_publication_function(channel_id, load_request_message_id, self.handle_load_request) start_tx_request_message_id = MsgIds.MSG_ID_UI_ADJUST_START_TREATMENT_REQUEST.value self.can_interface.register_receiving_publication_function(channel_id, start_tx_request_message_id, self.handle_start_tx_request) validate_request_message_id = MsgIds.MSG_ID_UI_TREATMENT_PARAMS_TO_VALIDATE.value self.can_interface.register_receiving_publication_function(channel_id, validate_request_message_id, self.handle_validate_request) def _init_loader(self): """ finds and creates widgets :return: none """ self.btnCreate_tx = self.find_widget(QtWidgets.QPushButton, 'btnCreate' ) self.btnCreateReset = self.find_widget(QtWidgets.QToolButton, 'btnCreateReset' ) self.btnValidate = self.find_widget(QtWidgets.QPushButton, 'btnValidate' ) self.btnValidateReset = self.find_widget(QtWidgets.QToolButton, 'btnValidateReset' ) self.btnAutoLoad = self.find_widget(QtWidgets.QPushButton, 'btnAutoLoadSend' ) self.btnAutoLoadReset = self.find_widget(QtWidgets.QToolButton, 'btnAutoLoadReset' ) self.btnStartTxReset = self.find_widget(QtWidgets.QToolButton, 'btnStartTxReset' ) self.spnCreateRxRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnCreateRxRejectReason' ) self.spnAutoLoadRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnLoadReasonSpinBox' ) self.spnStartTxRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnStartTreatmentRejectReason' ) self.lbAutoLoad = self.find_widget(QtWidgets.QLabel , 'lbAutoLoad' ) self.lbStartTreatment = self.find_widget(QtWidgets.QLabel , 'lbStartTreatment' ) self.lbCreateTx = self.find_widget(QtWidgets.QLabel , 'lbCreateTx' ) self.spnBloodFlowRateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnBloodFlowRateRejectReason' ) self.spnDialysateFlowRateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnDialysateFlowRateRejectReason' ) self.spnTreatmentDurationRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnTreatmentDurationRejectReason' ) self.spnSalineBolusVolumeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnSalineBolusVolumeRejectReason' ) self.spnHeparinStopTimeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeparinStopTimeRejectReason' ) self.spnHeparinTypeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeparinTypeRejectReason' ) self.spnAcidConcentrateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnAcidConcentrateRejectReason' ) self.spnBicarbonateConcentrateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnBicarbonateConcentrateRejectReason' ) self.spnDialyzerTypeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnDialyzerTypeRejectReason' ) self.spnBloodPressureMeasureIntervalRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnBloodPressureMeasureIntervalRejectReason' ) self.spnRinsebackFlowRateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnRinsebackFlowRateRejectReason' ) self.spnRinsebackVolumeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnRinsebackVolumeRejectReason' ) self.spnArterialPressureLimitWindowRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnArterialPressureLimitWindowRejectReason' ) self.spnVenousPressureLimitWindowRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnVenousPressureLimitWindowRejectReason' ) self.spnVenousPressureLimitAsymtrcRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnVenousPressureLimitAsymtrcRejectReason' ) self.spnTransmembranePressureLimitWindowRejectReason= self.find_widget(QtWidgets.QSpinBox , 'spnTransmembranePressureLimitWindowRejectReason' ) self.spnDialysateTempRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnDialysateTempRejectReason' ) self.spnHeparinDispensingRateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeparinDispensingRateRejectReason' ) self.spnHeparinBolusVolumeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeparinBolusVolumeRejectReason' ) self.lbBloodFlowRate = self.find_widget(QtWidgets.QLabel , 'lbBloodFlowRateValue' ) self.lbDialysateFlowRate = self.find_widget(QtWidgets.QLabel , 'lbDialysateFlowRateValue' ) self.lbTreatmentDuration = self.find_widget(QtWidgets.QLabel , 'lbTreatmentDurationValue' ) self.lbSalineBolusVolume = self.find_widget(QtWidgets.QLabel , 'lbSalineBolusVolumeValue' ) self.lbHeparinStopTime = self.find_widget(QtWidgets.QLabel , 'lbHeparinStopTimeValue' ) self.lbHeparinType = self.find_widget(QtWidgets.QLabel , 'lbHeparinTypeValue' ) self.lbAcidConcentrate = self.find_widget(QtWidgets.QLabel , 'lbAcidConcentrateValue' ) self.lbBicarbonateConcentrate = self.find_widget(QtWidgets.QLabel , 'lbBicarbonateConcentrateValue' ) self.lbDialyzerType = self.find_widget(QtWidgets.QLabel , 'lbDialyzerTypeValue' ) self.lbBloodPressureMeasureInterval = self.find_widget(QtWidgets.QLabel , 'lbBloodPressureMeasureIntervalValue' ) self.lbRinsebackFlowRate = self.find_widget(QtWidgets.QLabel , 'lbRinsebackFlowRateValue' ) self.lbRinsebackVolume = self.find_widget(QtWidgets.QLabel , 'lbRinsebackVolumeValue' ) self.lbArterialPressureLimitWindow = self.find_widget(QtWidgets.QLabel , 'lbArterialPressureLimitWindowValue' ) self.lbVenousPressureLimitWindow = self.find_widget(QtWidgets.QLabel , 'lbVenousPressureLimitWindowValue' ) self.lbVenousPressureLimitAsymtrc = self.find_widget(QtWidgets.QLabel , 'lbVenousPressureLimitAsymtrcValue' ) self.lbTransmembranePressureLimitWindow = self.find_widget(QtWidgets.QLabel , 'lbTransmembranePressureLimitWindowValue' ) self.lbDialysateTemp = self.find_widget(QtWidgets.QLabel , 'lbDialysateTempValue' ) self.lbHeparinDispensingRate = self.find_widget(QtWidgets.QLabel , 'lbHeparinDispensingRateValue' ) self.lbHeparinBolusVolume = self.find_widget(QtWidgets.QLabel , 'lbHeparinBolusVolumeValue' ) def _init_widgets(self): """ initializes the widgets' properties :return: none """ self.do_validateReset() self.spnCreateRxRejectReason.setValue(0) self.spnAutoLoadRejectReason.setValue(0) self.spnStartTxRejectReason .setValue(0) def _init_connections(self): """ initializes the widgets connections :return: """ self.btnCreate_tx .clicked.connect(self.do_create_tx ) self.btnCreateReset .clicked.connect(self.do_createReset ) self.btnAutoLoadReset .clicked.connect(self.do_autoLoadReset ) self.btnStartTxReset .clicked.connect(self.do_startTxReset ) self.btnValidate .clicked.connect(self.do_validate ) self.btnValidateReset .clicked.connect(self.do_validateReset ) self.btnAutoLoad .clicked.connect(self.do_auto_load ) @Slot() def do_create_tx(self): self.lbCreateTx.setText("-") if self.spnCreateRxRejectReason.value() == 0 : self.td_interface.td_Treatment_Parameters_CreateRx (0) else: self.td_interface.td_Treatment_Parameters_CreateRx (self.spnCreateRxRejectReason.value()) @Slot() def do_createReset(self): self.spnCreateRxRejectReason.setValue(0) self.lbCreateTx.setText("-") @Slot() def do_autoLoadReset(self): self.btnAutoLoadReset.setValue(0) self.lbAutoLoad.setText("-") def do_startTxReset(self): self.lbStartTreatment.setText("-") @Slot() def do_auto_load(self): reason = self.spnAutoLoadRejectReason.value() self.td_interface.td_blood_set_auto_load_response(reason) self.lbAutoLoad.setText("-") @Slot() def do_validate(self): """ send the validation response message :return: none """ accepted = ( self.spnBloodFlowRateRejectReason .value() + self.spnDialysateFlowRateRejectReason .value() + self.spnTreatmentDurationRejectReason .value() + self.spnSalineBolusVolumeRejectReason .value() + self.spnHeparinStopTimeRejectReason .value() + self.spnHeparinTypeRejectReason .value() + self.spnAcidConcentrateRejectReason .value() + self.spnBicarbonateConcentrateRejectReason .value() + self.spnDialyzerTypeRejectReason .value() + self.spnBloodPressureMeasureIntervalRejectReason .value() + self.spnRinsebackFlowRateRejectReason .value() + self.spnRinsebackVolumeRejectReason .value() + self.spnArterialPressureLimitWindowRejectReason .value() + self.spnVenousPressureLimitWindowRejectReason .value() + self.spnVenousPressureLimitAsymtrcRejectReason .value() + self.spnTransmembranePressureLimitWindowRejectReason.value() + self.spnDialysateTempRejectReason .value() + self.spnHeparinDispensingRateRejectReason .value() + self.spnHeparinBolusVolumeRejectReason .value() ) == 0 self.td_interface.td_Treatment_Parameters_Validation( 1 if accepted else 0, self.spnBloodFlowRateRejectReason .value(), self.spnDialysateFlowRateRejectReason .value(), self.spnTreatmentDurationRejectReason .value(), self.spnSalineBolusVolumeRejectReason .value(), self.spnHeparinStopTimeRejectReason .value(), self.spnHeparinTypeRejectReason .value(), self.spnAcidConcentrateRejectReason .value(), self.spnBicarbonateConcentrateRejectReason .value(), self.spnDialyzerTypeRejectReason .value(), self.spnBloodPressureMeasureIntervalRejectReason .value(), self.spnRinsebackFlowRateRejectReason .value(), self.spnRinsebackVolumeRejectReason .value(), self.spnArterialPressureLimitWindowRejectReason .value(), self.spnVenousPressureLimitWindowRejectReason .value(), self.spnVenousPressureLimitAsymtrcRejectReason .value(), self.spnTransmembranePressureLimitWindowRejectReason.value(), self.spnDialysateTempRejectReason .value(), self.spnHeparinDispensingRateRejectReason .value(), self.spnHeparinBolusVolumeRejectReason .value() ) @Slot() def do_validateReset(self): self.spnBloodFlowRateRejectReason .setValue(0) self.spnDialysateFlowRateRejectReason .setValue(0) self.spnTreatmentDurationRejectReason .setValue(0) self.spnSalineBolusVolumeRejectReason .setValue(0) self.spnHeparinStopTimeRejectReason .setValue(0) self.spnHeparinTypeRejectReason .setValue(0) self.spnAcidConcentrateRejectReason .setValue(0) self.spnBicarbonateConcentrateRejectReason .setValue(0) self.spnDialyzerTypeRejectReason .setValue(0) self.spnBloodPressureMeasureIntervalRejectReason .setValue(0) self.spnRinsebackFlowRateRejectReason .setValue(0) self.spnRinsebackVolumeRejectReason .setValue(0) self.spnArterialPressureLimitWindowRejectReason .setValue(0) self.spnVenousPressureLimitWindowRejectReason .setValue(0) self.spnVenousPressureLimitAsymtrcRejectReason .setValue(0) self.spnTransmembranePressureLimitWindowRejectReason.setValue(0) self.spnDialysateTempRejectReason .setValue(0) self.spnHeparinDispensingRateRejectReason .setValue(0) self.spnHeparinBolusVolumeRejectReason .setValue(0) @Slot() def handle_load_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ self.lbAutoLoad.setText("Requested") @Slot() def handle_create_tx_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ self.lbCreateTx.setText("Create Tx Requested") @Slot() def handle_start_tx_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ self.lbStartTreatment.setText("Start Tx Requested") @Slot() def handle_validate_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ message = message['message'] self.index = MsgFieldPositions.START_POS_FIELD_1 self.lbBloodFlowRate .setText(str(self.getIntValue(message))) self.lbDialysateFlowRate .setText(str(self.getIntValue(message))) self.lbTreatmentDuration .setText(str(self.getIntValue(message))) self.lbSalineBolusVolume .setText(str(self.getIntValue(message))) self.lbHeparinStopTime .setText(str(self.getIntValue(message))) self.lbHeparinType .setText(str(self.getIntValue(message))) self.lbAcidConcentrate .setText(str(self.getIntValue(message))) self.lbBicarbonateConcentrate .setText(str(self.getIntValue(message))) self.lbDialyzerType .setText(str(self.getIntValue(message))) self.lbBloodPressureMeasureInterval .setText(str(self.getIntValue(message))) self.lbRinsebackFlowRate .setText(str(self.getIntValue(message))) self.lbRinsebackVolume .setText(str(self.getIntValue(message))) self.lbArterialPressureLimitWindow .setText(str(self.getIntValue(message))) self.lbVenousPressureLimitWindow .setText(str(self.getIntValue(message))) self.lbVenousPressureLimitAsymtrc .setText(str(self.getIntValue(message))) self.lbTransmembranePressureLimitWindow .setText(str(self.getIntValue(message))) self.lbDialysateTemp .setText(f"{self.getFloatValue(message):.1f}") self.lbHeparinDispensingRate .setText(f"{self.getFloatValue(message):.1f}") self.lbHeparinBolusVolume .setText(f"{self.getFloatValue(message):.1f}") def getIntValue (self, message): val,self.index = conversions.bytearray_to_integer( message, self.index) return val def getFloatValue (self, message): val,self.index = conversions.bytearray_to_float( message, self.index) return val