Index: simulator/run.py =================================================================== diff -u -rc678a6653939736267d5301b524f32ff5d9cf4c5 -rb4e6b92304a715cba0c33fe101922ceee4174465 --- simulator/run.py (.../run.py) (revision c678a6653939736267d5301b524f32ff5d9cf4c5) +++ simulator/run.py (.../run.py) (revision b4e6b92304a715cba0c33fe101922ceee4174465) @@ -1,4 +1,3 @@ - # import system modules import sys @@ -81,11 +80,20 @@ """ convenient method of find_child for QComboBox :param name: (str) name of the QComboBox Object - :return: (QPushButton) reference to the QComboBox + :return: (QComboBox) reference to the QComboBox """ child = self.__find_child(QtWidgets.QComboBox, name) return child + def find_checkox(self, name: str) -> QtWidgets.QCheckBox: + """ + convenient method of find_child for QCheckBox + :param name: (str) name of the QCheckBox Object + :return: (QCheckBox) reference to the QComboBox + """ + child = self.__find_child(QtWidgets.QCheckBox, name) + return child + def find_spinbox(self, name: str) -> QtWidgets.QSpinBox: """ convenient method of find_child for QSpinBox @@ -123,7 +131,8 @@ # global variables declarations ui_file_name = "Simulator.ui" timer: QTimer - + # checkbox + chkRangesBroadcast: QtWidgets.QCheckBox # pushbutton btnSalineAccept: QtWidgets.QPushButton btnSalineReject: QtWidgets.QPushButton @@ -133,39 +142,45 @@ btnUfResumeReject: QtWidgets.QPushButton btnUfEditAccept: QtWidgets.QPushButton btnUfEditReject: QtWidgets.QPushButton + btnAVPressuresAccept: QtWidgets.QPushButton + btnAVPressuresReject: QtWidgets.QPushButton # label lblSalineAction: QtWidgets.QLabel lblUfPauseAction: QtWidgets.QLabel lblUfResumeAction: QtWidgets.QLabel lblUfEditAction: QtWidgets.QLabel - lblArterialMin: QtWidgets.QLabel - lblArterialMax: QtWidgets.QLabel - lblVenousMin: QtWidgets.QLabel - lblVenousMax: QtWidgets.QLabel + lblArterialTitle: QtWidgets.QLabel + lblVenousTitle: QtWidgets.QLabel + lblAVPressuresAction: QtWidgets.QLabel + lblArterialLimitLow: QtWidgets.QLabel + lblArterialLimitHigh: QtWidgets.QLabel + lblVenousLimitLow: QtWidgets.QLabel + lblVenousLimitHigh: QtWidgets.QLabel # spinbox spnSalineRejectReason: QtWidgets.QSpinBox spnUfPauseRejectReason: QtWidgets.QSpinBox spnUfResumeRejectReason: QtWidgets.QSpinBox spnUfEditRejectReason: QtWidgets.QSpinBox + spnAVPressuresRejectReason: QtWidgets.QSpinBox spnDurationMin: QtWidgets.QSpinBox spnDurationMax: QtWidgets.QSpinBox spnUFVolumeMin: QtWidgets.QSpinBox spnUFVolumeMax: QtWidgets.QSpinBox spnDialysateMin: QtWidgets.QSpinBox spnDialysateMax: QtWidgets.QSpinBox - spnArterialMin: QtWidgets.QSpinBox - spnArterialMax: QtWidgets.QSpinBox - spnVenousMin: QtWidgets.QSpinBox - spnVenousMax: QtWidgets.QSpinBox + spnArterialLimitLow: QtWidgets.QSpinBox + spnArterialLimitHigh: QtWidgets.QSpinBox + spnVenousLimitLow: QtWidgets.QSpinBox + spnVenousLimitHigh: QtWidgets.QSpinBox # combobox cmbSalineAcceptTarget: QtWidgets.QComboBox # sliders sldSalineTarget: QtWidgets.QSlider sldSalineCumulative: QtWidgets.QSlider sldSalineVolume: QtWidgets.QSlider sldUfVolume: QtWidgets.QSlider - sldArterialPressureValue: QtWidgets.QSlider - sldVenousPressureValue: QtWidgets.QSlider + sldArterialValue: QtWidgets.QSlider + sldVenousValue: QtWidgets.QSlider # tables tblSalineSubMode: QtWidgets.QTableWidget tblSalineUFStates: QtWidgets.QTableWidget @@ -190,6 +205,7 @@ self.spnUFVolumeMax = self.find_spinbox('spnUFVolumeMax') self.spnDialysateMin = self.find_spinbox('spnDialysateMin') self.spnDialysateMax = self.find_spinbox('spnDialysateMax') + self.chkRangesBroadcast = self.find_checkox('chkRangesBroadcast') self.timer = QTimer() self.timer.start(1000) self.timer.timeout.connect(self.do_ranges_data) @@ -265,99 +281,87 @@ sets up the treatment pressures :return: none """ - arterial_pressure_minimum = -300 - arterial_pressure_lower_bound = -300 - arterial_pressure_upper_bound = +100 - arterial_pressure_maximum = +200 + arterial_pressure_minimum = -400 + arterial_pressure_maximum = +600 + arterial_pressure_low_min = -300 + arterial_pressure_low_def = -300 + arterial_pressure_low_max = +200 + arterial_pressure_high_min = -300 + arterial_pressure_high_def = +100 + arterial_pressure_high_max = +200 venous_pressure_minimum = -100 - venous_pressure_lower_bound = -100 - venous_pressure_upper_bound = +400 - venous_pressure_maximum = +600 + venous_pressure_maximum = +700 + venous_pressure_low_min = -100 + venous_pressure_low_def = -100 + venous_pressure_low_max = +600 + venous_pressure_high_min = +100 + venous_pressure_high_def = +400 + venous_pressure_high_max = +600 - self.lblArterialMin = self.find_label('lblArterialMin') - self.lblArterialMax = self.find_label('lblArterialMax') - self.lblVenousMin = self.find_label('lblVenousMin') - self.lblVenousMax = self.find_label('lblVenousMax') - self.spnArterialMin = self.find_spinbox('spnArterialMin') - self.spnArterialMax = self.find_spinbox('spnArterialMax') - self.spnVenousMin = self.find_spinbox('spnVenousMin') - self.spnVenousMax = self.find_spinbox('spnVenousMax') - self.sldArterialPressureValue = self.find_slider('sldArterialPressureValue') - self.sldVenousPressureValue = self.find_slider('sldVenousPressureValue') + self.lblArterialTitle = self.find_label('lblArterialTitle') + self.lblVenousTitle = self.find_label('lblVenousTitle') + self.lblArterialLimitLow = self.find_label('lblArterialLimitLow') + self.lblArterialLimitHigh = self.find_label('lblArterialLimitHigh') + self.lblVenousLimitLow = self.find_label('lblVenousLimitLow') + self.lblVenousLimitHigh = self.find_label('lblVenousLimitHigh') + self.lblAVPressuresAction = self.find_label('lblAVPressuresAction') - self.lblArterialMin.setNum(arterial_pressure_minimum) - self.lblArterialMax.setNum(arterial_pressure_maximum) - self.lblVenousMin.setNum(venous_pressure_minimum) - self.lblVenousMax.setNum(venous_pressure_maximum) + self.btnAVPressuresAccept = self.find_button('btnAVPressuresAccept') + self.btnAVPressuresReject = self.find_button('btnAVPressuresReject') - @Slot() - def do_set_arterial_min(arterial_min): - """ - set the acceptable arterial min value change - :param arterial_min: arterial pressure min - :return: none - """ - self.sldArterialPressureValue.setMinimum(arterial_min) - if self.sldArterialPressureValue.value() < arterial_min: - self.sldArterialPressureValue.setValue(arterial_min) + self.spnArterialLimitLow = self.find_spinbox('spnArterialLimitLow') + self.spnArterialLimitHigh = self.find_spinbox('spnArterialLimitHigh') + self.spnVenousLimitLow = self.find_spinbox('spnVenousLimitLow') + self.spnVenousLimitHigh = self.find_spinbox('spnVenousLimitHigh') + self.spnAVPressuresRejectReason = self.find_spinbox('spnAVPressuresRejectReason') - @Slot() - def do_set_arterial_max(arterial_max): - """ - set the acceptable arterial max value change - :param arterial_max: arterial pressure max - :return: none - """ - self.sldArterialPressureValue.setMaximum(arterial_max) - if self.sldArterialPressureValue.value() > arterial_max: - self.sldArterialPressureValue.setValue(arterial_max) + self.sldArterialValue = self.find_slider('sldArterialValue') + self.sldVenousValue = self.find_slider('sldVenousValue') - @Slot() - def do_set_venous_min(venous_min): - """ - set the acceptable venous min value change - :param venous_min: venous pressure min - :return: none - """ - self.sldVenousPressureValue.setMinimum(venous_min) - if self.sldVenousPressureValue.value() < venous_min: - self.sldVenousPressureValue.setValue(venous_min) + self.lblArterialTitle.setText( + f"{self.lblArterialTitle.text()} [{arterial_pressure_minimum},{arterial_pressure_maximum}]" + ) + self.lblVenousTitle.setText( + f"{self.lblVenousTitle.text()} [{venous_pressure_minimum},{venous_pressure_maximum}]" + ) - @Slot() - def do_set_venous_max(venous_max): - """ - set the acceptable venous max value change - :param venous_max: venous pressure max - :return: none - """ - self.sldVenousPressureValue.setMaximum(venous_max) - if self.sldVenousPressureValue.value() > venous_max: - self.sldVenousPressureValue.setValue(venous_max) + self.lblArterialLimitLow.setText(f"{arterial_pressure_low_min}\n{arterial_pressure_low_max}") + self.lblArterialLimitHigh.setText(f"{arterial_pressure_high_min}\n{arterial_pressure_high_max}") + self.lblVenousLimitLow.setText(f"{venous_pressure_low_min}\n{venous_pressure_low_max}") + self.lblVenousLimitHigh.setText(f"{venous_pressure_high_min}\n{venous_pressure_high_max}") - self.sldArterialPressureValue.valueChanged.connect(self.do_pressures_data) - self.sldVenousPressureValue.valueChanged.connect(self.do_pressures_data) + # sending the CANBus message when slider value changed + self.sldArterialValue.valueChanged.connect(self.do_pressures_data) + self.sldVenousValue.valueChanged.connect(self.do_pressures_data) - self.spnArterialMin.valueChanged.connect(do_set_arterial_min) - self.spnArterialMax.valueChanged.connect(do_set_arterial_max) + # sending the CANBus message when accepted or rejected + self.btnAVPressuresAccept.clicked.connect(self.do_pressures_limits_accept) + self.btnAVPressuresReject.clicked.connect(self.do_pressures_limits_reject) - self.spnVenousMin.valueChanged.connect(do_set_venous_min) - self.spnVenousMax.valueChanged.connect(do_set_venous_max) + self.sldArterialValue.setMinimum(arterial_pressure_minimum) + self.sldArterialValue.setMaximum(arterial_pressure_maximum) + self.sldArterialValue.setValue(0) + self.sldVenousValue.setMinimum(venous_pressure_minimum) + self.sldVenousValue.setMaximum(venous_pressure_maximum) + self.sldVenousValue.setValue(0) - self.spnArterialMin.setMinimum(arterial_pressure_minimum) - self.spnArterialMin.setMaximum(arterial_pressure_maximum) - self.spnArterialMin.setValue(arterial_pressure_lower_bound) - self.spnArterialMax.setMinimum(arterial_pressure_minimum) - self.spnArterialMax.setMaximum(arterial_pressure_maximum) - self.spnArterialMax.setValue(arterial_pressure_upper_bound) + self.spnArterialLimitLow.setMinimum(arterial_pressure_low_min) + self.spnArterialLimitLow.setMaximum(arterial_pressure_low_max) + self.spnArterialLimitLow.setValue(arterial_pressure_low_def) - self.spnVenousMin.setMinimum(venous_pressure_minimum) - self.spnVenousMin.setMaximum(venous_pressure_maximum) - self.spnVenousMin.setValue(venous_pressure_lower_bound) - self.spnVenousMax.setMinimum(venous_pressure_minimum) - self.spnVenousMax.setMaximum(venous_pressure_maximum) - self.spnVenousMax.setValue(venous_pressure_upper_bound) + self.spnArterialLimitHigh.setMinimum(arterial_pressure_high_min) + self.spnArterialLimitHigh.setMaximum(arterial_pressure_high_max) + self.spnArterialLimitHigh.setValue(arterial_pressure_high_def) + self.spnVenousLimitLow.setMinimum(venous_pressure_low_min) + self.spnVenousLimitLow.setMaximum(venous_pressure_low_max) + self.spnVenousLimitLow.setValue(venous_pressure_low_def) + + self.spnVenousLimitHigh.setMinimum(venous_pressure_high_min) + self.spnVenousLimitHigh.setMaximum(venous_pressure_high_max) + self.spnVenousLimitHigh.setValue(venous_pressure_high_def) + @Slot() def do_sb_accept(self): """ @@ -483,14 +487,15 @@ sends the treatment ranges message with given value on the screen :return: none """ - denaliMessages.setTreatmentParamRanges( - self.spnDurationMin.value(), - self.spnDurationMax.value(), - self.spnUFVolumeMin.value(), - self.spnUFVolumeMax.value(), - self.spnDialysateMin.value(), - self.spnDialysateMax.value() - ) + if self.chkRangesBroadcast.isChecked(): + denaliMessages.setTreatmentParamRanges( + self.spnDurationMin.value(), + self.spnDurationMax.value(), + self.spnUFVolumeMin.value(), + self.spnUFVolumeMax.value(), + self.spnDialysateMin.value(), + self.spnDialysateMax.value() + ) @Slot() def do_pressures_data(self): @@ -499,11 +504,43 @@ :return: none """ denaliMessages.setPressureOcclusionData( - self.sldArterialPressureValue.value(), - self.sldVenousPressureValue.value(), + self.sldArterialValue.value(), + self.sldVenousValue.value(), 0, 0, 0 ) + @Slot() + def do_pressures_limits_accept(self): + """ + sends the pressures values message with given value on the screen + :return: none + """ + # vAccepted, vReason, vArterialLow, vArterialHigh, vVenousLow, vVenousHigh + denaliMessages.sendTreatmentAdjustPressuresLimitsResponse( + EResponse.Accepted, 0, + self.spnArterialLimitLow.value(), + self.spnArterialLimitHigh.value(), + self.spnVenousLimitLow.value(), + self.spnVenousLimitHigh.value() + ) + self.lblAVPressuresAction.setText('Accepted ') + + @Slot() + def do_pressures_limits_reject(self): + """ + sends the pressures values message with given value on the screen + :return: none + """ + reason = self.spnAVPressuresRejectReason.value() + denaliMessages.sendTreatmentAdjustPressuresLimitsResponse( + EResponse.Rejected, reason, + self.spnArterialLimitLow.value(), + self.spnArterialLimitHigh.value(), + self.spnVenousLimitLow.value(), + self.spnVenousLimitHigh.value() + ) + self.lblAVPressuresAction.setText('Rejected ' + "{}".format(reason)) + def initialize(self): """ initializes the class by calling it's initializer methods to make objects ready