""" 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)