Source code for biosignal_device_interface.gui.device_template_widgets.otb.otb_muovi_widget

from __future__ import annotations
from typing import TYPE_CHECKING

from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
    BaseDeviceWidget,
)
from biosignal_device_interface.gui.ui_compiled.otb_muovi_template_widget import (
    Ui_MuoviForm,
)
from biosignal_device_interface.devices.otb.otb_muovi import OTBMuovi

# Constants
from biosignal_device_interface.constants.devices.otb.otb_muovi_constants import (
    MuoviWorkingMode,
    MuoviDetectionMode,
    MUOVI_NETWORK_PORT,
)

if TYPE_CHECKING:
    from PySide6.QtWidgets import (
        QWidget,
        QMainWindow,
        QGroupBox,
        QPushButton,
        QComboBox,
        QLabel,
    )


[docs] class OTBMuoviWidget(BaseDeviceWidget): def __init__(self, parent: QWidget | QMainWindow | None = None): super().__init__(parent) self._set_device(OTBMuovi(parent=self)) def _toggle_connection(self) -> None: if not self.device._is_connected: self.connect_push_button.setEnabled(False) self.device.toggle_connection( ( self.connection_ip_combo_box.currentText(), int(self.connection_port_label.text()), ) ) def _connection_toggled(self, is_connected: bool) -> None: self.connect_push_button.setEnabled(True) if is_connected: self.connect_push_button.setText("Disconnect") self.connect_push_button.setChecked(True) self.configure_push_button.setEnabled(True) self.connection_group_box.setEnabled(False) else: self.connect_push_button.setText("Connect") self.connect_push_button.setChecked(False) self.configure_push_button.setEnabled(False) self.stream_push_button.setEnabled(False) self.connection_group_box.setEnabled(True) self.connect_toggled.emit(is_connected) def _toggle_configuration(self) -> None: self._device_params["working_mode"] = MuoviWorkingMode( self.input_working_mode_combo_box.currentIndex() + 1 ) self._device_params["detection_mode"] = MuoviDetectionMode( self.input_detection_mode_combo_box.currentIndex() + 1 ) self.device.configure_device(self._device_params) def _configuration_toggled(self, is_configured: bool) -> None: if is_configured: self.stream_push_button.setEnabled(True) self.configure_toggled.emit(is_configured) def _toggle_configuration_group_boxes(self) -> None: for group_box in self.configuration_group_boxes: group_box.setEnabled(not group_box.isEnabled()) def _toggle_stream(self) -> None: self.stream_push_button.setEnabled(False) self.device.toggle_streaming() def _stream_toggled(self, is_streaming: bool) -> None: self.stream_push_button.setEnabled(True) if is_streaming: self.stream_push_button.setText("Stop Streaming") self.stream_push_button.setChecked(True) self.configure_push_button.setEnabled(False) self._toggle_configuration_group_boxes() else: self.stream_push_button.setText("Stream") self.stream_push_button.setChecked(False) self.configure_push_button.setEnabled(True) self._toggle_configuration_group_boxes() self.stream_toggled.emit(is_streaming) def _initialize_device_params(self) -> None: self._device_params = { "working_mode": MuoviWorkingMode.EMG, "detection_mode": MuoviDetectionMode.MONOPOLAR_GAIN_8, } def _initialize_ui(self) -> None: self.ui = Ui_MuoviForm() self.ui.setupUi(self) # Command Push Buttons self.connect_push_button: QPushButton = self.ui.commandConnectionPushButton self.connect_push_button.clicked.connect(self._toggle_connection) self.device.connect_toggled.connect(self._connection_toggled) self.configure_push_button: QPushButton = self.ui.commandConfigurationPushButton self.configure_push_button.clicked.connect(self._toggle_configuration) self.configure_push_button.setEnabled(False) self.device.configure_toggled.connect(self._configuration_toggled) self.stream_push_button: QPushButton = self.ui.commandStreamPushButton self.stream_push_button.clicked.connect(self._toggle_stream) self.stream_push_button.setEnabled(False) self.device.stream_toggled.connect(self._stream_toggled) # Connection parameters self.connection_group_box: QGroupBox = self.ui.connectionGroupBox self.connection_ip_combo_box: QComboBox = self.ui.connectionIPComboBox self.connection_port_label: QLabel = self.ui.connectionPortLabel self.connection_update_push_button: QPushButton = ( self.ui.connectionUpdatePushButton ) self.connection_update_push_button.clicked.connect( lambda: ( self.connection_ip_combo_box.clear(), self.connection_ip_combo_box.addItems( self.device.get_server_wifi_ip_address() ), ) ) self.connection_ip_combo_box.clear() self.connection_ip_combo_box.addItems(self.device.get_server_wifi_ip_address()) self.connection_port_label.setText(str(MUOVI_NETWORK_PORT)) # Input parameters self.input_parameters_group_box: QGroupBox = self.ui.inputGroupBox self.input_working_mode_combo_box: QComboBox = self.ui.inputWorkingModeComboBox self.input_detection_mode_combo_box: QComboBox = ( self.ui.inputDetectionModeComboBox ) # Configuration parameters self.configuration_group_boxes: list[QGroupBox] = [ self.input_parameters_group_box, ]