biosignal-device-interface 0.1.311__py3-none-any.whl → 0.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. biosignal_device_interface/constants/devices/__init__.py +3 -3
  2. biosignal_device_interface/constants/devices/core/base_device_constants.py +61 -51
  3. biosignal_device_interface/constants/devices/otb/otb_muovi_constants.py +129 -129
  4. biosignal_device_interface/constants/devices/otb/otb_quattrocento_constants.py +313 -0
  5. biosignal_device_interface/constants/devices/otb/otb_quattrocento_light_constants.py +59 -59
  6. biosignal_device_interface/constants/devices/otb/otb_syncstation_constants.py +233 -0
  7. biosignal_device_interface/constants/plots/color_palette.py +59 -59
  8. biosignal_device_interface/devices/__init__.py +17 -15
  9. biosignal_device_interface/devices/core/base_device.py +424 -410
  10. biosignal_device_interface/devices/otb/__init__.py +29 -21
  11. biosignal_device_interface/devices/otb/otb_muovi.py +290 -291
  12. biosignal_device_interface/devices/otb/otb_quattrocento.py +332 -0
  13. biosignal_device_interface/devices/otb/otb_quattrocento_light.py +210 -213
  14. biosignal_device_interface/devices/otb/otb_syncstation.py +407 -0
  15. biosignal_device_interface/gui/device_template_widgets/all_devices_widget.py +51 -43
  16. biosignal_device_interface/gui/device_template_widgets/core/base_device_widget.py +130 -121
  17. biosignal_device_interface/gui/device_template_widgets/core/base_multiple_devices_widget.py +108 -108
  18. biosignal_device_interface/gui/device_template_widgets/otb/otb_devices_widget.py +44 -36
  19. biosignal_device_interface/gui/device_template_widgets/otb/otb_muovi_plus_widget.py +158 -158
  20. biosignal_device_interface/gui/device_template_widgets/otb/otb_muovi_widget.py +158 -158
  21. biosignal_device_interface/gui/device_template_widgets/otb/otb_quattrocento_light_widget.py +174 -170
  22. biosignal_device_interface/gui/device_template_widgets/otb/otb_quattrocento_widget.py +260 -0
  23. biosignal_device_interface/gui/device_template_widgets/otb/otb_syncstation_widget.py +262 -0
  24. biosignal_device_interface/gui/plot_widgets/biosignal_plot_widget.py +500 -500
  25. biosignal_device_interface/gui/ui/devices_template_widget.ui +38 -38
  26. biosignal_device_interface/gui/ui/otb_muovi_plus_template_widget.ui +171 -171
  27. biosignal_device_interface/gui/ui/otb_muovi_template_widget.ui +171 -171
  28. biosignal_device_interface/gui/ui/otb_quattrocento_light_template_widget.ui +266 -266
  29. biosignal_device_interface/gui/ui/otb_quattrocento_template_widget.ui +415 -0
  30. biosignal_device_interface/gui/ui/otb_syncstation_template_widget.ui +732 -0
  31. biosignal_device_interface/gui/ui_compiled/devices_template_widget.py +56 -56
  32. biosignal_device_interface/gui/ui_compiled/otb_muovi_plus_template_widget.py +153 -153
  33. biosignal_device_interface/gui/ui_compiled/otb_muovi_template_widget.py +153 -153
  34. biosignal_device_interface/gui/ui_compiled/otb_quattrocento_light_template_widget.py +217 -217
  35. biosignal_device_interface/gui/ui_compiled/otb_quattrocento_template_widget.py +318 -0
  36. biosignal_device_interface/gui/ui_compiled/otb_syncstation_template_widget.py +495 -0
  37. biosignal_device_interface-0.2.1.dist-info/LICENSE +675 -0
  38. {biosignal_device_interface-0.1.311.dist-info → biosignal_device_interface-0.2.1.dist-info}/METADATA +6 -4
  39. biosignal_device_interface-0.2.1.dist-info/RECORD +46 -0
  40. {biosignal_device_interface-0.1.311.dist-info → biosignal_device_interface-0.2.1.dist-info}/WHEEL +1 -1
  41. biosignal_device_interface-0.1.311.dist-info/LICENSE +0 -395
  42. biosignal_device_interface-0.1.311.dist-info/RECORD +0 -36
@@ -1,121 +1,130 @@
1
- """
2
- Base Device class for real-time interfaces to hardware devices.
3
- Developer: Dominik I. Braun
4
- Contact: dome.braun@fau.de
5
- Last Update: 2024-06-05
6
- """
7
-
8
- # Python Libraries
9
- from __future__ import annotations
10
- from typing import TYPE_CHECKING, Union, Dict
11
- from abc import abstractmethod
12
- from PySide6.QtWidgets import QWidget, QMainWindow
13
- from PySide6.QtGui import QCloseEvent
14
- from PySide6.QtCore import Signal
15
- import numpy as np
16
-
17
- # Import Devices
18
- from biosignal_device_interface.devices.core.base_device import BaseDevice
19
-
20
- if TYPE_CHECKING:
21
- from enum import Enum
22
-
23
-
24
- class BaseDeviceWidget(QWidget):
25
- # Signals
26
- data_arrived: Signal = Signal(np.ndarray)
27
- biosignal_data_arrived: Signal = Signal(np.ndarray)
28
- auxiliary_data_arrived: Signal = Signal(np.ndarray)
29
- connect_toggled: Signal = Signal(bool)
30
- configure_toggled: Signal = Signal(bool)
31
- stream_toggled: Signal = Signal(bool)
32
-
33
- def __init__(self, parent: QWidget | QMainWindow | None = None):
34
- super().__init__(parent)
35
-
36
- self.parent_widget: QWidget | QMainWindow | None = parent
37
-
38
- # Device Setup
39
- self.device: BaseDevice | None = None
40
- self._device_params: Dict[str, Union[str, int, float]] = {}
41
-
42
- # GUI setup
43
- self.ui: object = None
44
-
45
- @abstractmethod
46
- def _toggle_connection(self) -> None:
47
- """ """
48
- pass
49
-
50
- @abstractmethod
51
- def _connection_toggled(self, is_connected: bool) -> None:
52
- """ """
53
- pass
54
-
55
- @abstractmethod
56
- def _toggle_configuration(self) -> None:
57
- """ """
58
- pass
59
-
60
- @abstractmethod
61
- def _configuration_toggled(self, is_configured: bool) -> None:
62
- """ """
63
- pass
64
-
65
- @abstractmethod
66
- def _toggle_configuration_group_boxes(self) -> None:
67
- """ """
68
- pass
69
-
70
- @abstractmethod
71
- def _toggle_stream(self) -> None:
72
- """ """
73
- pass
74
-
75
- @abstractmethod
76
- def _stream_toggled(self, is_streaming: bool) -> None:
77
- """ """
78
- self.stream_toggled.emit(is_streaming)
79
-
80
- @abstractmethod
81
- def _initialize_device_params(self) -> None:
82
- """ """
83
- pass
84
-
85
- @abstractmethod
86
- def _initialize_ui(self) -> None:
87
- """ """
88
- pass
89
-
90
- def _set_device(self, device: BaseDevice) -> None:
91
- """ """
92
- # Device Setup
93
- self.device: BaseDevice = device
94
- self._initialize_device_params()
95
- self._set_signals()
96
- self._initialize_ui()
97
-
98
- def _set_signals(self) -> None:
99
- """ """
100
- self.device.data_available.connect(self.data_arrived.emit)
101
- self.device.biosignal_data_available.connect(self.biosignal_data_arrived.emit)
102
- self.device.auxiliary_data_available.connect(self.auxiliary_data_arrived.emit)
103
-
104
- def get_device_information(self) -> Dict[str, Enum | int | float | str]:
105
- """
106
- Gets the current configuration of the device.
107
-
108
- Returns:
109
- Dict[str, Enum | int | float | str]:
110
- Dictionary that holds information about the
111
- current device configuration and status.
112
- """
113
- return self.device.get_device_information()
114
-
115
- def disconnect_device(self) -> None:
116
- """ """
117
- if self.device._is_connected or self.device._is_streaming:
118
- self.device.toggle_connection()
119
-
120
- def closeEvent(self, event: QCloseEvent) -> None:
121
- self.disconnect_device()
1
+ """
2
+ Base Device class for real-time interfaces to hardware devices.
3
+ Developer: Dominik I. Braun
4
+ Contact: dome.braun@fau.de
5
+ Last Update: 2024-06-05
6
+ """
7
+
8
+ # Python Libraries
9
+ from __future__ import annotations
10
+ from typing import TYPE_CHECKING, Union, Dict
11
+ from abc import abstractmethod
12
+ from PySide6.QtWidgets import QWidget, QMainWindow
13
+ from PySide6.QtGui import QCloseEvent
14
+ from PySide6.QtCore import Signal
15
+ import numpy as np
16
+
17
+ # Import Devices
18
+ from biosignal_device_interface.devices.core.base_device import BaseDevice
19
+
20
+ if TYPE_CHECKING:
21
+ from enum import Enum
22
+ from PySide6.QtWidgets import QLineEdit
23
+
24
+
25
+ class BaseDeviceWidget(QWidget):
26
+ # Signals
27
+ data_arrived: Signal = Signal(np.ndarray)
28
+ biosignal_data_arrived: Signal = Signal(np.ndarray)
29
+ auxiliary_data_arrived: Signal = Signal(np.ndarray)
30
+ connect_toggled: Signal = Signal(bool)
31
+ configure_toggled: Signal = Signal(bool)
32
+ stream_toggled: Signal = Signal(bool)
33
+
34
+ def __init__(self, parent: QWidget | QMainWindow | None = None):
35
+ super().__init__(parent)
36
+
37
+ self.parent_widget: QWidget | QMainWindow | None = parent
38
+
39
+ # Device Setup
40
+ self._device: BaseDevice | None = None
41
+ self._device_params: Dict[str, Union[str, int, float]] = {}
42
+
43
+ # GUI setup
44
+ self.ui: object = None
45
+
46
+ @abstractmethod
47
+ def _toggle_connection(self) -> None:
48
+ """ """
49
+ pass
50
+
51
+ @abstractmethod
52
+ def _connection_toggled(self, is_connected: bool) -> None:
53
+ """ """
54
+ pass
55
+
56
+ @abstractmethod
57
+ def _toggle_configuration(self) -> None:
58
+ """ """
59
+ pass
60
+
61
+ @abstractmethod
62
+ def _configuration_toggled(self, is_configured: bool) -> None:
63
+ """ """
64
+ pass
65
+
66
+ @abstractmethod
67
+ def _toggle_configuration_group_boxes(self) -> None:
68
+ """ """
69
+ pass
70
+
71
+ @abstractmethod
72
+ def _toggle_stream(self) -> None:
73
+ """ """
74
+ pass
75
+
76
+ @abstractmethod
77
+ def _stream_toggled(self, is_streaming: bool) -> None:
78
+ """ """
79
+ self.stream_toggled.emit(is_streaming)
80
+
81
+ @abstractmethod
82
+ def _initialize_device_params(self) -> None:
83
+ """ """
84
+ pass
85
+
86
+ @abstractmethod
87
+ def _initialize_ui(self) -> None:
88
+ """ """
89
+ pass
90
+
91
+ def _set_device(self, device: BaseDevice) -> None:
92
+ """ """
93
+ # Device Setup
94
+ self._device: BaseDevice = device
95
+ self._initialize_device_params()
96
+ self._set_signals()
97
+ self._initialize_ui()
98
+
99
+ def _set_signals(self) -> None:
100
+ """ """
101
+ self._device.data_available.connect(self.data_arrived.emit)
102
+ self._device.biosignal_data_available.connect(self.biosignal_data_arrived.emit)
103
+ self._device.auxiliary_data_available.connect(self.auxiliary_data_arrived.emit)
104
+
105
+ def get_device_information(self) -> Dict[str, Enum | int | float | str]:
106
+ """
107
+ Gets the current configuration of the device.
108
+
109
+ Returns:
110
+ Dict[str, Enum | int | float | str]:
111
+ Dictionary that holds information about the
112
+ current device configuration and status.
113
+ """
114
+ return self._device.get_device_information()
115
+
116
+ def disconnect_device(self) -> None:
117
+ """ """
118
+ if self._device.is_connected or self._device._is_streaming:
119
+ self._device.toggle_connection()
120
+
121
+ def _check_ip_input(self, line_edit: QLineEdit, default: str) -> None:
122
+ if not self._device.check_valid_ip(line_edit.text()):
123
+ line_edit.setText(default)
124
+
125
+ def _check_port_input(self, line_edit: QLineEdit, default: str) -> None:
126
+ if not self._device.check_valid_port(line_edit.text()):
127
+ line_edit.setText(default)
128
+
129
+ def closeEvent(self, event: QCloseEvent) -> None:
130
+ self.disconnect_device()
@@ -1,108 +1,108 @@
1
- """
2
- Base Device class for real-time interfaces to hardware devices.
3
- Developer: Dominik I. Braun
4
- Contact: dome.braun@fau.de
5
- Last Update: 2024-06-05
6
- """
7
-
8
- # Python Libraries
9
- from __future__ import annotations
10
- from typing import TYPE_CHECKING, Union, Dict
11
- from PySide6.QtGui import QCloseEvent
12
- from PySide6.QtWidgets import QWidget, QMainWindow
13
- from PySide6.QtCore import Signal
14
- import numpy as np
15
- import warnings
16
-
17
- # Import Template
18
- from biosignal_device_interface.gui.ui_compiled.devices_template_widget import (
19
- Ui_DeviceWidgetForm,
20
- )
21
- from biosignal_device_interface.constants.devices.core.base_device_constants import (
22
- DeviceType,
23
- DEVICE_NAME_DICT,
24
- )
25
-
26
- if TYPE_CHECKING:
27
- from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
28
- BaseDeviceWidget,
29
- )
30
-
31
-
32
- class BaseMultipleDevicesWidget(QWidget):
33
- # Signals
34
- data_arrived: Signal = Signal(np.ndarray)
35
- biosignal_data_arrived: Signal = Signal(np.ndarray)
36
- auxiliary_data_arrived: Signal = Signal(np.ndarray)
37
- connect_toggled = Signal(bool)
38
- configure_toggled = Signal(bool)
39
- stream_toggled = Signal(bool)
40
- device_changed_signal = Signal(None)
41
-
42
- def __init__(self, parent: QWidget | QMainWindow | None = None):
43
- super().__init__(parent)
44
-
45
- self.parent_widget: QWidget | QMainWindow | None = parent
46
-
47
- self.ui = Ui_DeviceWidgetForm()
48
- self.ui.setupUi(self)
49
-
50
- self.device_stacked_widget = self.ui.deviceStackedWidget
51
- self.device_selection_combo_box = self.ui.deviceSelectionComboBox
52
-
53
- def get_device_information(self) -> Dict[str, Union[str, int]]:
54
- return self._get_current_widget().get_device_information()
55
-
56
- def _update_stacked_widget(self, index: int):
57
- current_widget = self._get_current_widget()
58
- current_widget.disconnect_device()
59
-
60
- with warnings.catch_warnings():
61
- warnings.filterwarnings("ignore")
62
- try:
63
- current_widget.data_arrived.disconnect(self.data_arrived.emit)
64
- current_widget.biosignal_data_arrived.disconnect(
65
- self.biosignal_data_arrived.emit
66
- )
67
- current_widget.auxiliary_data_arrived.disconnect(
68
- self.auxiliary_data_arrived.emit
69
- )
70
-
71
- current_widget.connect_toggled.disconnect(self.connect_toggled)
72
- current_widget.configure_toggled.disconnect(self.configure_toggled)
73
- current_widget.stream_toggled.disconnect(self.stream_toggled)
74
-
75
- except (TypeError, RuntimeError):
76
- ...
77
-
78
- self.device_stacked_widget.setCurrentIndex(index)
79
- current_widget = self._get_current_widget()
80
-
81
- # Data arrived
82
- current_widget.data_arrived.connect(self.data_arrived.emit)
83
- # Biosignal data arrived
84
- current_widget.biosignal_data_arrived.connect(self.biosignal_data_arrived.emit)
85
- # Auxiliary data arrived
86
- current_widget.auxiliary_data_arrived.connect(self.auxiliary_data_arrived.emit)
87
-
88
- current_widget.connect_toggled.connect(self.connect_toggled)
89
- current_widget.configure_toggled.connect(self.configure_toggled)
90
- current_widget.stream_toggled.connect(self.stream_toggled)
91
-
92
- self.device_changed_signal.emit()
93
-
94
- def _set_devices(self, devices: Dict[DeviceType, BaseDeviceWidget]) -> None:
95
- for device_type, device_widget in devices.items():
96
- self.device_stacked_widget.addWidget(device_widget)
97
- self.device_selection_combo_box.addItem(DEVICE_NAME_DICT[device_type])
98
-
99
- self._update_stacked_widget(0)
100
- self.device_selection_combo_box.currentIndexChanged.connect(
101
- self._update_stacked_widget
102
- )
103
-
104
- def _get_current_widget(self) -> BaseDeviceWidget:
105
- return self.device_stacked_widget.currentWidget()
106
-
107
- def closeEvent(self, event: QCloseEvent) -> None:
108
- self._get_current_widget().closeEvent(event)
1
+ """
2
+ Base Device class for real-time interfaces to hardware devices.
3
+ Developer: Dominik I. Braun
4
+ Contact: dome.braun@fau.de
5
+ Last Update: 2024-06-05
6
+ """
7
+
8
+ # Python Libraries
9
+ from __future__ import annotations
10
+ from typing import TYPE_CHECKING, Union, Dict
11
+ from PySide6.QtGui import QCloseEvent
12
+ from PySide6.QtWidgets import QWidget, QMainWindow
13
+ from PySide6.QtCore import Signal
14
+ import numpy as np
15
+ import warnings
16
+
17
+ # Import Template
18
+ from biosignal_device_interface.gui.ui_compiled.devices_template_widget import (
19
+ Ui_DeviceWidgetForm,
20
+ )
21
+ from biosignal_device_interface.constants.devices.core.base_device_constants import (
22
+ DeviceType,
23
+ DEVICE_NAME_DICT,
24
+ )
25
+
26
+ if TYPE_CHECKING:
27
+ from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
28
+ BaseDeviceWidget,
29
+ )
30
+
31
+
32
+ class BaseMultipleDevicesWidget(QWidget):
33
+ # Signals
34
+ data_arrived: Signal = Signal(np.ndarray)
35
+ biosignal_data_arrived: Signal = Signal(np.ndarray)
36
+ auxiliary_data_arrived: Signal = Signal(np.ndarray)
37
+ connect_toggled = Signal(bool)
38
+ configure_toggled = Signal(bool)
39
+ stream_toggled = Signal(bool)
40
+ device_changed_signal = Signal(None)
41
+
42
+ def __init__(self, parent: QWidget | QMainWindow | None = None):
43
+ super().__init__(parent)
44
+
45
+ self.parent_widget: QWidget | QMainWindow | None = parent
46
+
47
+ self.ui = Ui_DeviceWidgetForm()
48
+ self.ui.setupUi(self)
49
+
50
+ self.device_stacked_widget = self.ui.deviceStackedWidget
51
+ self.device_selection_combo_box = self.ui.deviceSelectionComboBox
52
+
53
+ def get_device_information(self) -> Dict[str, Union[str, int]]:
54
+ return self._get_current_widget().get_device_information()
55
+
56
+ def _update_stacked_widget(self, index: int):
57
+ current_widget = self._get_current_widget()
58
+ current_widget.disconnect_device()
59
+
60
+ with warnings.catch_warnings():
61
+ warnings.filterwarnings("ignore")
62
+ try:
63
+ current_widget.data_arrived.disconnect(self.data_arrived.emit)
64
+ current_widget.biosignal_data_arrived.disconnect(
65
+ self.biosignal_data_arrived.emit
66
+ )
67
+ current_widget.auxiliary_data_arrived.disconnect(
68
+ self.auxiliary_data_arrived.emit
69
+ )
70
+
71
+ current_widget.connect_toggled.disconnect(self.connect_toggled)
72
+ current_widget.configure_toggled.disconnect(self.configure_toggled)
73
+ current_widget.stream_toggled.disconnect(self.stream_toggled)
74
+
75
+ except (TypeError, RuntimeError):
76
+ ...
77
+
78
+ self.device_stacked_widget.setCurrentIndex(index)
79
+ current_widget = self._get_current_widget()
80
+
81
+ # Data arrived
82
+ current_widget.data_arrived.connect(self.data_arrived.emit)
83
+ # Biosignal data arrived
84
+ current_widget.biosignal_data_arrived.connect(self.biosignal_data_arrived.emit)
85
+ # Auxiliary data arrived
86
+ current_widget.auxiliary_data_arrived.connect(self.auxiliary_data_arrived.emit)
87
+
88
+ current_widget.connect_toggled.connect(self.connect_toggled)
89
+ current_widget.configure_toggled.connect(self.configure_toggled)
90
+ current_widget.stream_toggled.connect(self.stream_toggled)
91
+
92
+ self.device_changed_signal.emit()
93
+
94
+ def _set_devices(self, devices: Dict[DeviceType, BaseDeviceWidget]) -> None:
95
+ for device_type, device_widget in devices.items():
96
+ self.device_stacked_widget.addWidget(device_widget)
97
+ self.device_selection_combo_box.addItem(DEVICE_NAME_DICT[device_type])
98
+
99
+ self._update_stacked_widget(0)
100
+ self.device_selection_combo_box.currentIndexChanged.connect(
101
+ self._update_stacked_widget
102
+ )
103
+
104
+ def _get_current_widget(self) -> BaseDeviceWidget:
105
+ return self.device_stacked_widget.currentWidget()
106
+
107
+ def closeEvent(self, event: QCloseEvent) -> None:
108
+ self._get_current_widget().closeEvent(event)
@@ -1,36 +1,44 @@
1
- from __future__ import annotations
2
- from typing import TYPE_CHECKING, Dict
3
-
4
- from biosignal_device_interface.gui.device_template_widgets.core.base_multiple_devices_widget import (
5
- BaseMultipleDevicesWidget,
6
- )
7
- from biosignal_device_interface.constants.devices.core.base_device_constants import (
8
- DeviceType,
9
- )
10
- from biosignal_device_interface.gui.device_template_widgets.otb.otb_muovi_plus_widget import (
11
- OTBMuoviPlusWidget,
12
- )
13
- from biosignal_device_interface.gui.device_template_widgets.otb.otb_muovi_widget import (
14
- OTBMuoviWidget,
15
- )
16
- from biosignal_device_interface.gui.device_template_widgets.otb.otb_quattrocento_light_widget import (
17
- OTBQuattrocentoLightWidget,
18
- )
19
-
20
- if TYPE_CHECKING:
21
- from PySide6.QtWidgets import QWidget, QMainWindow
22
- from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
23
- BaseDeviceWidget,
24
- )
25
-
26
-
27
- class OTBDevicesWidget(BaseMultipleDevicesWidget):
28
- def __init__(self, parent: QWidget | QMainWindow | None = None):
29
- super().__init__(parent)
30
-
31
- self._device_selection: Dict[DeviceType, BaseDeviceWidget] = {
32
- DeviceType.OTB_QUATTROCENTO_LIGHT: OTBQuattrocentoLightWidget(self),
33
- DeviceType.OTB_MUOVI: OTBMuoviWidget(self),
34
- DeviceType.OTB_MUOVI_PLUS: OTBMuoviPlusWidget(self),
35
- }
36
- self._set_devices(self._device_selection)
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING, Dict
3
+
4
+ from biosignal_device_interface.gui.device_template_widgets.core.base_multiple_devices_widget import (
5
+ BaseMultipleDevicesWidget,
6
+ )
7
+ from biosignal_device_interface.constants.devices.core.base_device_constants import (
8
+ DeviceType,
9
+ )
10
+ from biosignal_device_interface.gui.device_template_widgets.otb.otb_muovi_plus_widget import (
11
+ OTBMuoviPlusWidget,
12
+ )
13
+ from biosignal_device_interface.gui.device_template_widgets.otb.otb_muovi_widget import (
14
+ OTBMuoviWidget,
15
+ )
16
+ from biosignal_device_interface.gui.device_template_widgets.otb.otb_quattrocento_light_widget import (
17
+ OTBQuattrocentoLightWidget,
18
+ )
19
+ from biosignal_device_interface.gui.device_template_widgets.otb.otb_quattrocento_widget import (
20
+ OTBQuattrocentoWidget,
21
+ )
22
+ from biosignal_device_interface.gui.device_template_widgets.otb.otb_syncstation_widget import (
23
+ OTBSyncStationWidget,
24
+ )
25
+
26
+ if TYPE_CHECKING:
27
+ from PySide6.QtWidgets import QWidget, QMainWindow
28
+ from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
29
+ BaseDeviceWidget,
30
+ )
31
+
32
+
33
+ class OTBDevicesWidget(BaseMultipleDevicesWidget):
34
+ def __init__(self, parent: QWidget | QMainWindow | None = None):
35
+ super().__init__(parent)
36
+
37
+ self._device_selection: Dict[DeviceType, BaseDeviceWidget] = {
38
+ DeviceType.OTB_QUATTROCENTO: OTBQuattrocentoWidget(self),
39
+ DeviceType.OTB_QUATTROCENTO_LIGHT: OTBQuattrocentoLightWidget(self),
40
+ DeviceType.OTB_MUOVI: OTBMuoviWidget(self),
41
+ DeviceType.OTB_MUOVI_PLUS: OTBMuoviPlusWidget(self),
42
+ DeviceType.OTB_SYNCSTATION: OTBSyncStationWidget(self),
43
+ }
44
+ self._set_devices(self._device_selection)