Index: TD_BloodPrime/interface.ui =================================================================== diff -u --- TD_BloodPrime/interface.ui (revision 0) +++ TD_BloodPrime/interface.ui (revision 24a027df47ef42fd1407f21ccd165998f84b9dc3) @@ -0,0 +1,411 @@ + + + ui_interface + + + + 0 + 0 + 405 + 197 + + + + + 100000 + 100000 + + + + + 10 + + + + &3 Treatment/&5 Blood Prime + + + + 5 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + + + 10 + + + + color: rgb(238, 238, 236); +background-color: rgb(92, 53, 102); + + + 151 [0x9700]: Blood Prime Progress Data + + + Qt::AlignCenter + + + + + + + Send + + + + + + + Reset + + + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 6 + + + 6 + + + + + Target +Volume (mL) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 250 + 0 + + + + 1000 + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 50 + 0 + + + + + 10 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + Delivered +Volume (mL) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 250 + 0 + + + + 1000 + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 50 + 0 + + + + + 10 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + + color: rgb(238, 238, 236); +background-color: rgb(92, 53, 102); + + + 153 [0x9900]: Blood Prime Command Response + + + Qt::AlignCenter + + + + + + + Send + + + + + + + Reset + + + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Req [0x9800] + + + + + + + -- -- + + + Qt::AlignCenter + + + + + + + Rejection Reason + + + + + + + Qt::AlignCenter + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + + + Index: TD_BloodPrime/loader.py =================================================================== diff -u --- TD_BloodPrime/loader.py (revision 0) +++ TD_BloodPrime/loader.py (revision 24a027df47ef42fd1407f21ccd165998f84b9dc3) @@ -0,0 +1,146 @@ +""" + TD Blood Prime 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 + +# hd Simulator +from leahi_dialin.ui.td_messaging import TD_Messaging + +class Loader(DynamicLoader): + """ + TD Blood Prime 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.DenaliChannels.ui_to_td_ch_id, + MsgIds.MSG_ID_UI_BLOOD_PRIME_CMD_REQUEST.value, + self.handle_cmd_request) + + + def _init_loader(self): + """ + finds and creates widgets + :return: none + """ + self.cmdStrings = [ + "Increase Rate", + "Decrease Rate", + "Pause", + "Resume", + ] + + self.tbProgressSend = self.find_widget(QtWidgets.QToolButton , 'tbProgressSend' ) + self.tbProgressReset = self.find_widget(QtWidgets.QToolButton , 'tbProgressReset' ) + self.slProgressTargetVolume = self.find_widget(QtWidgets.QSlider , 'slProgressTargetVolume' ) + self.lbProgressTargetVolume = self.find_widget(QtWidgets.QLabel , 'lbProgressTargetVolume' ) + self.slProgressDeliveredVolume = self.find_widget(QtWidgets.QSlider , 'slProgressDeliveredVolume' ) + self.lbProgressDeliveredVolume = self.find_widget(QtWidgets.QLabel , 'lbProgressDeliveredVolume' ) + + self.tbCmdRspSend = self.find_widget(QtWidgets.QToolButton , 'tbCmdRspSend' ) + self.tbCmdRspReset = self.find_widget(QtWidgets.QToolButton , 'tbCmdRspReset' ) + self.lbCmdReqCommand = self.find_widget(QtWidgets.QLabel , 'lbCmdReqCommand' ) + self.sbCmdRspRejectReason = self.find_widget(QtWidgets.QSpinBox , 'sbCmdRspRejectReason' ) + + + def _init_connections(self): + """ + initializes the widgets connections + :return: none + """ + self.tbProgressSend .clicked .connect(self.do_progress_send) + self.tbProgressReset .clicked .connect(self.do_progress_reset) + self.slProgressTargetVolume .valueChanged .connect(self.do_progress_send) + self.slProgressTargetVolume .valueChanged .connect(self.do_progress_target_volume_changed) + self.slProgressDeliveredVolume .valueChanged .connect(self.do_progress_send) + self.slProgressDeliveredVolume .valueChanged .connect(self.do_progress_delivered_volume_changed) + + self.tbCmdRspSend .clicked .connect(self.do_cmd_response_send) + self.tbCmdRspReset .clicked .connect(self.do_cmd_response_reset) + + @Slot() + def _init_widgets(self): + """ + initializes the widgets' properties + :return: none + """ + self.do_progress_reset() + self.do_cmd_response_reset() + + + @Slot() + def do_progress_send(self): + """ + slot for sending blood prime data + :return: none + """ + self.td_interface.td_blood_prime_progress( + self.slProgressTargetVolume.value(), + self.slProgressDeliveredVolume.value() + ) + + + @Slot() + def do_progress_target_volume_changed(self, value): + self.lbProgressTargetVolume.setText(f"{value}") + + + @Slot() + def do_progress_delivered_volume_changed(self, value): + self.lbProgressDeliveredVolume.setText(f"{value}") + + + @Slot() + def do_progress_reset(self): + self.slProgressTargetVolume .setValue(0) + self.slProgressDeliveredVolume .setValue(0) + + + @Slot() + def handle_cmd_request(self, message, timestamp = 0.0): + """ + Called when the user sends a blood prime 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.lbCmdReqCommand.setText(f"{cmdString} ({value})") + + + @Slot() + def do_cmd_response_send(self): + """ + slot for sending blood prime command response + :return: none + """ + self.td_interface.td_blood_prime_cmd_response( + self.sbCmdRspRejectReason.value() + ) + + + @Slot() + def do_cmd_response_reset(self): + self.lbCmdReqCommand .setText("-- --") + self.sbCmdRspRejectReason .setValue(0)