Index: TD_TreatmentAdjustmentsVitals/interface.ui =================================================================== diff -u --- TD_TreatmentAdjustmentsVitals/interface.ui (revision 0) +++ TD_TreatmentAdjustmentsVitals/interface.ui (revision a8eae25e9f058fd6280ba65591ce11da5bce0d35) @@ -0,0 +1,303 @@ + + + ui_interface + + + + 0 + 0 + 419 + 228 + + + + + 100000 + 100000 + + + + + 10 + + + + &3 Treatment/Adjustments/&7 Vitals + + + + + + + + 2 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + + color: rgb(238, 238, 236); +background-color: rgb(150, 53, 102); + + + + 185 : [0xB900] : Vitals Adjustment Response + + + Qt::AlignCenter + + + + + + + Send + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + -- + + + Qt::AlignCenter + + + + + + + QFrame::Box + + + QFrame::Sunken + + + -- + + + Qt::AlignCenter + + + + + + + QFrame::Box + + + QFrame::Sunken + + + -- + + + Qt::AlignCenter + + + + + + + Heart Rate Low Alarm Limit (BPM) + + + + + + + Accepted + + + true + + + + + + + Systolic BP High Alarm Limit (mmHg) + + + + + + + Qt::AlignCenter + + + + + + + Qt::AlignCenter + + + + + + + Req [0xB800] + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::AlignCenter + + + + + + + Vitals Interval (min) + + + + + + + Heart Rate High Alarm Limit (BPM) + + + + + + + Qt::AlignCenter + + + + + + + + 80 + 0 + + + + QFrame::Box + + + QFrame::Sunken + + + -- + + + Qt::AlignCenter + + + + + + + QFrame::Box + + + QFrame::Sunken + + + -- + + + Qt::AlignCenter + + + + + + + Qt::AlignCenter + + + + + + + Systolic BP Low Alarm Limit (mmHg) + + + + + + + + + + + + + + + + + Index: TD_TreatmentAdjustmentsVitals/loader.py =================================================================== diff -u --- TD_TreatmentAdjustmentsVitals/loader.py (revision 0) +++ TD_TreatmentAdjustmentsVitals/loader.py (revision a8eae25e9f058fd6280ba65591ce11da5bce0d35) @@ -0,0 +1,119 @@ +""" + Treatment Adjustment Vitals 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): + """ + Treatment AdjustmentVitals 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_VITALS_ADJUSTMENT_REQUEST.value, + self.handle_vitals_change_request) + + + def _init_loader(self): + """ + finds and creates widgets + :return: none + """ + self.lbSystolicLowAlarmLimit = self.find_widget(QtWidgets.QLabel , 'lbSystolicLowAlarmLimit' ) + self.lbSystolicHighAlarmLimit = self.find_widget(QtWidgets.QLabel , 'lbSystolicHighAlarmLimit' ) + self.lbHeartRateLowAlarmLimit = self.find_widget(QtWidgets.QLabel , 'lbHeartRateLowAlarmLimit' ) + self.lbHeartRateHighAlarmLimit = self.find_widget(QtWidgets.QLabel , 'lbHeartRateHighAlarmLimit' ) + self.lbVitalsInterval = self.find_widget(QtWidgets.QLabel , 'lbVitalsInterval' ) + + self.cbAccepted = self.find_widget(QtWidgets.QCheckBox , 'cbAccepted' ) + self.tbSend = self.find_widget(QtWidgets.QToolButton , 'tbSend' ) + + self.spnSystolicLowAlarmLimitRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnSystolicLowAlarmLimitRejectReason' ) + self.spnSystolicHighAlarmLimitRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnSystolicHighAlarmLimitRejectReason' ) + self.spnHeartRateLowAlarmLimitRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeartRateLowAlarmLimitRejectReason' ) + self.spnHeartRateHighAlarmLimitRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeartRateHighAlarmLimitRejectReason' ) + self.spnVitalsIntervalRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnVitalsIntervalRejectReason' ) + + + + def _init_connections(self): + """ + initializes the widgets connections + :return: none + """ + self.tbSend .clicked .connect(self.do_vitals_response_send ) + + + def _init_widgets(self): + """ + initializes the widgets' properties + :return: none + """ + self.do_vitals_request_reset() + + + @Slot() + def do_vitals_request_reset(self): + self.lbSystolicLowAlarmLimit .setText("--") + self.lbSystolicHighAlarmLimit .setText("--") + self.lbHeartRateLowAlarmLimit .setText("--") + self.lbHeartRateHighAlarmLimit.setText("--") + self.lbVitalsInterval .setText("--") + + + @Slot() + def handle_vitals_change_request(self, message, timestamp = 0.0): + """ + Called when the user requests set points change from UI + @return: None + """ + message = message['message'] + index = MsgFieldPositions.START_POS_FIELD_1 + param1,index = conversions.bytearray_to_integer (message, index) + param2,index = conversions.bytearray_to_integer (message, index) + param3,index = conversions.bytearray_to_integer (message, index) + param4,index = conversions.bytearray_to_integer (message, index) + param5,index = conversions.bytearray_to_integer (message, index) + + self.lbSystolicLowAlarmLimit .setText( f"{param1}" ) + self.lbSystolicHighAlarmLimit .setText( f"{param2}" ) + self.lbHeartRateLowAlarmLimit .setText( f"{param3}" ) + self.lbHeartRateHighAlarmLimit .setText( f"{param4}" ) + self.lbVitalsInterval .setText( f"{param5}" ) + + + + @Slot() + def do_vitals_response_send(self): + self.do_vitals_request_reset() + self.td_interface.td_vitals_alarm_limits_adjustment_response(self.cbAccepted .isChecked(), + self.spnSystolicLowAlarmLimitRejectReason .value(), + self.spnSystolicHighAlarmLimitRejectReason .value(), + self.spnHeartRateLowAlarmLimitRejectReason .value(), + self.spnHeartRateHighAlarmLimitRejectReason .value(), + self.spnVitalsIntervalRejectReason .value()) +