biosignal-device-interface 0.1.1a0__py3-none-any.whl → 0.1.4a1__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 (37) hide show
  1. biosignal_device_interface/__init__.py +0 -4
  2. biosignal_device_interface/constants/devices/__init__.py +3 -0
  3. biosignal_device_interface/constants/devices/core/base_device_constants.py +10 -0
  4. biosignal_device_interface/constants/devices/otb/otb_constants.py +0 -0
  5. biosignal_device_interface/constants/devices/otb/otb_muovi_constants.py +3 -3
  6. biosignal_device_interface/constants/devices/otb/otb_quattrocento_constants.py +289 -35
  7. biosignal_device_interface/constants/devices/otb/otb_quattrocento_light_constants.py +59 -0
  8. biosignal_device_interface/constants/devices/otb/otb_syncstation_constants.py +233 -0
  9. biosignal_device_interface/devices/__init__.py +11 -3
  10. biosignal_device_interface/devices/core/base_device.py +8 -9
  11. biosignal_device_interface/devices/otb/__init__.py +27 -7
  12. biosignal_device_interface/devices/otb/otb_muovi.py +9 -10
  13. biosignal_device_interface/devices/otb/otb_quattrocento.py +215 -118
  14. biosignal_device_interface/devices/otb/otb_quattrocento_light.py +210 -0
  15. biosignal_device_interface/devices/otb/otb_syncstation.py +407 -0
  16. biosignal_device_interface/gui/device_template_widgets/__init__.py +0 -6
  17. biosignal_device_interface/gui/device_template_widgets/all_devices_widget.py +19 -7
  18. biosignal_device_interface/gui/device_template_widgets/core/base_device_widget.py +17 -8
  19. biosignal_device_interface/gui/device_template_widgets/core/base_multiple_devices_widget.py +7 -4
  20. biosignal_device_interface/gui/device_template_widgets/otb/__init__.py +0 -10
  21. biosignal_device_interface/gui/device_template_widgets/otb/otb_devices_widget.py +20 -8
  22. biosignal_device_interface/gui/device_template_widgets/otb/otb_muovi_plus_widget.py +12 -12
  23. biosignal_device_interface/gui/device_template_widgets/otb/otb_muovi_widget.py +12 -12
  24. biosignal_device_interface/gui/device_template_widgets/otb/otb_quattrocento_light_widget.py +61 -57
  25. biosignal_device_interface/gui/device_template_widgets/otb/otb_quattrocento_widget.py +260 -0
  26. biosignal_device_interface/gui/device_template_widgets/otb/otb_syncstation_widget.py +262 -0
  27. biosignal_device_interface/gui/plot_widgets/biosignal_plot_widget.py +9 -4
  28. biosignal_device_interface/gui/ui/otb_quattrocento_template_widget.ui +415 -0
  29. biosignal_device_interface/gui/ui/otb_syncstation_template_widget.ui +732 -0
  30. biosignal_device_interface/gui/ui_compiled/otb_quattrocento_template_widget.py +318 -0
  31. biosignal_device_interface/gui/ui_compiled/otb_syncstation_template_widget.py +495 -0
  32. biosignal_device_interface-0.1.4a1.dist-info/LICENSE +675 -0
  33. {biosignal_device_interface-0.1.1a0.dist-info → biosignal_device_interface-0.1.4a1.dist-info}/METADATA +7 -17
  34. biosignal_device_interface-0.1.4a1.dist-info/RECORD +46 -0
  35. biosignal_device_interface-0.1.1a0.dist-info/LICENSE +0 -395
  36. biosignal_device_interface-0.1.1a0.dist-info/RECORD +0 -35
  37. {biosignal_device_interface-0.1.1a0.dist-info → biosignal_device_interface-0.1.4a1.dist-info}/WHEEL +0 -0
@@ -7,10 +7,10 @@ from biosignal_device_interface.gui.device_template_widgets.core.base_device_wid
7
7
  from biosignal_device_interface.gui.ui_compiled.otb_muovi_template_widget import (
8
8
  Ui_MuoviForm,
9
9
  )
10
- from biosignal_device_interface.devices import OTBMuovi
10
+ from biosignal_device_interface.devices.otb.otb_muovi import OTBMuovi
11
11
 
12
12
  # Constants
13
- from biosignal_device_interface.constants.devices.otb_muovi_constants import (
13
+ from biosignal_device_interface.constants.devices.otb.otb_muovi_constants import (
14
14
  MuoviWorkingMode,
15
15
  MuoviDetectionMode,
16
16
  MUOVI_NETWORK_PORT,
@@ -27,17 +27,17 @@ if TYPE_CHECKING:
27
27
  )
28
28
 
29
29
 
30
- class OTBMuoviWidget(BaseDeviceWidget):
30
+ class OTBMuoviPlusWidget(BaseDeviceWidget):
31
31
  def __init__(self, parent: QWidget | QMainWindow | None = None):
32
32
  super().__init__(parent)
33
33
 
34
34
  self._set_device(OTBMuovi(parent=self, is_muovi_plus=True))
35
35
 
36
36
  def _toggle_connection(self) -> None:
37
- if not self.device._is_connected:
37
+ if not self._device.is_connected:
38
38
  self.connect_push_button.setEnabled(False)
39
39
 
40
- self.device.toggle_connection(
40
+ self._device.toggle_connection(
41
41
  (
42
42
  self.connection_ip_combo_box.currentText(),
43
43
  int(self.connection_port_label.text()),
@@ -68,7 +68,7 @@ class OTBMuoviWidget(BaseDeviceWidget):
68
68
  self.input_detection_mode_combo_box.currentIndex() + 1
69
69
  )
70
70
 
71
- self.device.configure_device(self._device_params)
71
+ self._device.configure_device(self._device_params)
72
72
 
73
73
  def _configuration_toggled(self, is_configured: bool) -> None:
74
74
  if is_configured:
@@ -82,7 +82,7 @@ class OTBMuoviWidget(BaseDeviceWidget):
82
82
 
83
83
  def _toggle_stream(self) -> None:
84
84
  self.stream_push_button.setEnabled(False)
85
- self.device.toggle_streaming()
85
+ self._device.toggle_streaming()
86
86
 
87
87
  def _stream_toggled(self, is_streaming: bool) -> None:
88
88
  self.stream_push_button.setEnabled(True)
@@ -112,17 +112,17 @@ class OTBMuoviWidget(BaseDeviceWidget):
112
112
  # Command Push Buttons
113
113
  self.connect_push_button: QPushButton = self.ui.commandConnectionPushButton
114
114
  self.connect_push_button.clicked.connect(self._toggle_connection)
115
- self.device.connect_toggled.connect(self._connection_toggled)
115
+ self._device.connect_toggled.connect(self._connection_toggled)
116
116
 
117
117
  self.configure_push_button: QPushButton = self.ui.commandConfigurationPushButton
118
118
  self.configure_push_button.clicked.connect(self._toggle_configuration)
119
119
  self.configure_push_button.setEnabled(False)
120
- self.device.configure_toggled.connect(self._configuration_toggled)
120
+ self._device.configure_toggled.connect(self._configuration_toggled)
121
121
 
122
122
  self.stream_push_button: QPushButton = self.ui.commandStreamPushButton
123
123
  self.stream_push_button.clicked.connect(self._toggle_stream)
124
124
  self.stream_push_button.setEnabled(False)
125
- self.device.stream_toggled.connect(self._stream_toggled)
125
+ self._device.stream_toggled.connect(self._stream_toggled)
126
126
 
127
127
  # Connection parameters
128
128
  self.connection_group_box: QGroupBox = self.ui.connectionGroupBox
@@ -135,13 +135,13 @@ class OTBMuoviWidget(BaseDeviceWidget):
135
135
  lambda: (
136
136
  self.connection_ip_combo_box.clear(),
137
137
  self.connection_ip_combo_box.addItems(
138
- self.device.get_server_wifi_ip_address()
138
+ self._device.get_server_wifi_ip_address()
139
139
  ),
140
140
  )
141
141
  )
142
142
 
143
143
  self.connection_ip_combo_box.clear()
144
- self.connection_ip_combo_box.addItems(self.device.get_server_wifi_ip_address())
144
+ self.connection_ip_combo_box.addItems(self._device.get_server_wifi_ip_address())
145
145
 
146
146
  self.connection_port_label.setText(str(MUOVI_NETWORK_PORT))
147
147
 
@@ -7,10 +7,10 @@ from biosignal_device_interface.gui.device_template_widgets.core.base_device_wid
7
7
  from biosignal_device_interface.gui.ui_compiled.otb_muovi_template_widget import (
8
8
  Ui_MuoviForm,
9
9
  )
10
- from biosignal_device_interface.devices import OTBMuovi
10
+ from biosignal_device_interface.devices.otb.otb_muovi import OTBMuovi
11
11
 
12
12
  # Constants
13
- from biosignal_device_interface.constants.devices.otb_muovi_constants import (
13
+ from biosignal_device_interface.constants.devices.otb.otb_muovi_constants import (
14
14
  MuoviWorkingMode,
15
15
  MuoviDetectionMode,
16
16
  MUOVI_NETWORK_PORT,
@@ -27,17 +27,17 @@ if TYPE_CHECKING:
27
27
  )
28
28
 
29
29
 
30
- class MuoviWidget(BaseDeviceWidget):
30
+ class OTBMuoviWidget(BaseDeviceWidget):
31
31
  def __init__(self, parent: QWidget | QMainWindow | None = None):
32
32
  super().__init__(parent)
33
33
 
34
34
  self._set_device(OTBMuovi(parent=self))
35
35
 
36
36
  def _toggle_connection(self) -> None:
37
- if not self.device._is_connected:
37
+ if not self._device.is_connected:
38
38
  self.connect_push_button.setEnabled(False)
39
39
 
40
- self.device.toggle_connection(
40
+ self._device.toggle_connection(
41
41
  (
42
42
  self.connection_ip_combo_box.currentText(),
43
43
  int(self.connection_port_label.text()),
@@ -68,7 +68,7 @@ class MuoviWidget(BaseDeviceWidget):
68
68
  self.input_detection_mode_combo_box.currentIndex() + 1
69
69
  )
70
70
 
71
- self.device.configure_device(self._device_params)
71
+ self._device.configure_device(self._device_params)
72
72
 
73
73
  def _configuration_toggled(self, is_configured: bool) -> None:
74
74
  if is_configured:
@@ -82,7 +82,7 @@ class MuoviWidget(BaseDeviceWidget):
82
82
 
83
83
  def _toggle_stream(self) -> None:
84
84
  self.stream_push_button.setEnabled(False)
85
- self.device.toggle_streaming()
85
+ self._device.toggle_streaming()
86
86
 
87
87
  def _stream_toggled(self, is_streaming: bool) -> None:
88
88
  self.stream_push_button.setEnabled(True)
@@ -112,17 +112,17 @@ class MuoviWidget(BaseDeviceWidget):
112
112
  # Command Push Buttons
113
113
  self.connect_push_button: QPushButton = self.ui.commandConnectionPushButton
114
114
  self.connect_push_button.clicked.connect(self._toggle_connection)
115
- self.device.connect_toggled.connect(self._connection_toggled)
115
+ self._device.connect_toggled.connect(self._connection_toggled)
116
116
 
117
117
  self.configure_push_button: QPushButton = self.ui.commandConfigurationPushButton
118
118
  self.configure_push_button.clicked.connect(self._toggle_configuration)
119
119
  self.configure_push_button.setEnabled(False)
120
- self.device.configure_toggled.connect(self._configuration_toggled)
120
+ self._device.configure_toggled.connect(self._configuration_toggled)
121
121
 
122
122
  self.stream_push_button: QPushButton = self.ui.commandStreamPushButton
123
123
  self.stream_push_button.clicked.connect(self._toggle_stream)
124
124
  self.stream_push_button.setEnabled(False)
125
- self.device.stream_toggled.connect(self._stream_toggled)
125
+ self._device.stream_toggled.connect(self._stream_toggled)
126
126
 
127
127
  # Connection parameters
128
128
  self.connection_group_box: QGroupBox = self.ui.connectionGroupBox
@@ -135,13 +135,13 @@ class MuoviWidget(BaseDeviceWidget):
135
135
  lambda: (
136
136
  self.connection_ip_combo_box.clear(),
137
137
  self.connection_ip_combo_box.addItems(
138
- self.device.get_server_wifi_ip_address()
138
+ self._device.get_server_wifi_ip_address()
139
139
  ),
140
140
  )
141
141
  )
142
142
 
143
143
  self.connection_ip_combo_box.clear()
144
- self.connection_ip_combo_box.addItems(self.device.get_server_wifi_ip_address())
144
+ self.connection_ip_combo_box.addItems(self._device.get_server_wifi_ip_address())
145
145
 
146
146
  self.connection_port_label.setText(str(MUOVI_NETWORK_PORT))
147
147
 
@@ -7,10 +7,12 @@ from biosignal_device_interface.gui.device_template_widgets.core.base_device_wid
7
7
  from biosignal_device_interface.gui.ui_compiled.otb_quattrocento_light_template_widget import (
8
8
  Ui_QuattrocentoLightForm,
9
9
  )
10
- from biosignal_device_interface.devices import OTBQuattrocentoLight
10
+ from biosignal_device_interface.devices.otb.otb_quattrocento_light import (
11
+ OTBQuattrocentoLight,
12
+ )
11
13
 
12
14
  # Constants
13
- from biosignal_device_interface.constants.devices.otb_quattrocento_constants import (
15
+ from biosignal_device_interface.constants.devices.otb.otb_quattrocento_light_constants import (
14
16
  QuattrocentoLightSamplingFrequency,
15
17
  QuattrocentoLightStreamingFrequency,
16
18
  )
@@ -27,80 +29,80 @@ if TYPE_CHECKING:
27
29
  )
28
30
 
29
31
 
30
- class QuattrocentoLightWidget(BaseDeviceWidget):
32
+ class OTBQuattrocentoLightWidget(BaseDeviceWidget):
31
33
  def __init__(self, parent: QWidget | QMainWindow | None = None):
32
34
  super().__init__(parent)
33
35
  self._set_device(OTBQuattrocentoLight(self))
34
36
 
35
37
  def _toggle_connection(self) -> None:
36
- if not self.device._is_connected:
37
- self.connect_push_button.setEnabled(False)
38
+ if not self._device.is_connected:
39
+ self._connect_push_button.setEnabled(False)
38
40
 
39
- self.device.toggle_connection(
40
- (self.connection_ip_label.text(), int(self.connection_port_label.text())),
41
+ self._device.toggle_connection(
42
+ (self._connection_ip_label.text(), int(self._connection_port_label.text())),
41
43
  )
42
44
 
43
45
  def _connection_toggled(self, is_connected: bool) -> None:
44
- self.connect_push_button.setEnabled(True)
46
+ self._connect_push_button.setEnabled(True)
45
47
  if is_connected:
46
- self.connect_push_button.setText("Disconnect")
47
- self.connect_push_button.setChecked(True)
48
- self.configure_push_button.setEnabled(True)
49
- self.connection_group_box.setEnabled(False)
48
+ self._connect_push_button.setText("Disconnect")
49
+ self._connect_push_button.setChecked(True)
50
+ self._configure_push_button.setEnabled(True)
51
+ self._connection_group_box.setEnabled(False)
50
52
  else:
51
- self.connect_push_button.setText("Connect")
52
- self.connect_push_button.setChecked(False)
53
- self.configure_push_button.setEnabled(False)
54
- self.stream_push_button.setEnabled(False)
55
- self.connection_group_box.setEnabled(True)
53
+ self._connect_push_button.setText("Connect")
54
+ self._connect_push_button.setChecked(False)
55
+ self._configure_push_button.setEnabled(False)
56
+ self._stream_push_button.setEnabled(False)
57
+ self._connection_group_box.setEnabled(True)
56
58
 
57
59
  self.connect_toggled.emit(is_connected)
58
60
 
59
61
  def _toggle_configuration(self) -> None:
60
62
  self._device_params["grids"] = [
61
63
  i
62
- for i, check_box in enumerate(self.grid_selection_check_box_list)
64
+ for i, check_box in enumerate(self._grid_selection_check_box_list)
63
65
  if check_box.isChecked()
64
66
  ]
65
67
 
66
68
  self._device_params["streaming_frequency_mode"] = (
67
69
  QuattrocentoLightStreamingFrequency(
68
- self.acquisition_streaming_frequency_combo_box.currentIndex() + 1
70
+ self._acquisition_streaming_frequency_combo_box.currentIndex() + 1
69
71
  )
70
72
  )
71
73
  self._device_params["sampling_frequency_mode"] = (
72
74
  QuattrocentoLightSamplingFrequency(
73
- self.acquisition_sampling_frequency_combo_box.currentIndex() + 1
75
+ self._acquisition_sampling_frequency_combo_box.currentIndex() + 1
74
76
  )
75
77
  )
76
78
 
77
- self.device.configure_device(self._device_params)
79
+ self._device.configure_device(self._device_params)
78
80
 
79
81
  def _configuration_toggled(self, is_configured: bool) -> None:
80
82
  if is_configured:
81
- self.stream_push_button.setEnabled(True)
83
+ self._stream_push_button.setEnabled(True)
82
84
 
83
85
  self.configure_toggled.emit(is_configured)
84
86
 
85
87
  def _toggle_configuration_group_boxes(self) -> None:
86
- for group_box in self.configuration_group_boxes:
88
+ for group_box in self._configuration_group_boxes:
87
89
  group_box.setEnabled(not group_box.isEnabled())
88
90
 
89
91
  def _toggle_stream(self) -> None:
90
- self.stream_push_button.setEnabled(False)
91
- self.device.toggle_streaming()
92
+ self._stream_push_button.setEnabled(False)
93
+ self._device.toggle_streaming()
92
94
 
93
95
  def _stream_toggled(self, is_streaming: bool) -> None:
94
- self.stream_push_button.setEnabled(True)
96
+ self._stream_push_button.setEnabled(True)
95
97
  if is_streaming:
96
- self.stream_push_button.setText("Stop Streaming")
97
- self.stream_push_button.setChecked(True)
98
- self.configure_push_button.setEnabled(False)
98
+ self._stream_push_button.setText("Stop Streaming")
99
+ self._stream_push_button.setChecked(True)
100
+ self._configure_push_button.setEnabled(False)
99
101
  self._toggle_configuration_group_boxes()
100
102
  else:
101
- self.stream_push_button.setText("Stream")
102
- self.stream_push_button.setChecked(False)
103
- self.configure_push_button.setEnabled(True)
103
+ self._stream_push_button.setText("Stream")
104
+ self._stream_push_button.setChecked(False)
105
+ self._configure_push_button.setEnabled(True)
104
106
  self._toggle_configuration_group_boxes()
105
107
 
106
108
  self.stream_toggled.emit(is_streaming)
@@ -117,37 +119,39 @@ class QuattrocentoLightWidget(BaseDeviceWidget):
117
119
  self.ui.setupUi(self)
118
120
 
119
121
  # Command Push Buttons
120
- self.connect_push_button: QPushButton = self.ui.commandConnectionPushButton
121
- self.connect_push_button.clicked.connect(self._toggle_connection)
122
- self.device.connect_toggled.connect(self._connection_toggled)
122
+ self._connect_push_button: QPushButton = self.ui.commandConnectionPushButton
123
+ self._connect_push_button.clicked.connect(self._toggle_connection)
124
+ self._device.connect_toggled.connect(self._connection_toggled)
123
125
 
124
- self.configure_push_button: QPushButton = self.ui.commandConfigurationPushButton
125
- self.configure_push_button.clicked.connect(self._toggle_configuration)
126
- self.configure_push_button.setEnabled(False)
127
- self.device.configure_toggled.connect(self._configuration_toggled)
126
+ self._configure_push_button: QPushButton = (
127
+ self.ui.commandConfigurationPushButton
128
+ )
129
+ self._configure_push_button.clicked.connect(self._toggle_configuration)
130
+ self._configure_push_button.setEnabled(False)
131
+ self._device.configure_toggled.connect(self._configuration_toggled)
128
132
 
129
- self.stream_push_button: QPushButton = self.ui.commandStreamPushButton
130
- self.stream_push_button.clicked.connect(self._toggle_stream)
131
- self.stream_push_button.setEnabled(False)
132
- self.device.stream_toggled.connect(self._stream_toggled)
133
+ self._stream_push_button: QPushButton = self.ui.commandStreamPushButton
134
+ self._stream_push_button.clicked.connect(self._toggle_stream)
135
+ self._stream_push_button.setEnabled(False)
136
+ self._device.stream_toggled.connect(self._stream_toggled)
133
137
 
134
138
  # Connection parameters
135
- self.connection_group_box: QGroupBox = self.ui.connectionGroupBox
136
- self.connection_ip_label: QLabel = self.ui.connectionIPLabel
137
- self.connection_port_label: QLabel = self.ui.connectionPortLabel
139
+ self._connection_group_box: QGroupBox = self.ui.connectionGroupBox
140
+ self._connection_ip_label: QLabel = self.ui.connectionIPLabel
141
+ self._connection_port_label: QLabel = self.ui.connectionPortLabel
138
142
 
139
143
  # Acquisition parameters
140
- self.acquisition_group_box: QGroupBox = self.ui.acquisitionGroupBox
141
- self.acquisition_sampling_frequency_combo_box: QComboBox = (
144
+ self._acquisition_group_box: QGroupBox = self.ui.acquisitionGroupBox
145
+ self._acquisition_sampling_frequency_combo_box: QComboBox = (
142
146
  self.ui.acquisitionSamplingFrequencyComboBox
143
147
  )
144
- self.acquisition_streaming_frequency_combo_box: QComboBox = (
148
+ self._acquisition_streaming_frequency_combo_box: QComboBox = (
145
149
  self.ui.acquisitionStreamingFrequencyComboBox
146
150
  )
147
151
 
148
152
  # Grid parameters
149
- self.grid_selection_group_box: QGroupBox = self.ui.gridSelectionGroupBox
150
- self.grid_selection_check_box_list: list[QCheckBox] = [
153
+ self._grid_selection_group_box: QGroupBox = self.ui.gridSelectionGroupBox
154
+ self._grid_selection_check_box_list: list[QCheckBox] = [
151
155
  self.ui.gridOneCheckBox,
152
156
  self.ui.gridTwoCheckBox,
153
157
  self.ui.gridThreeCheckBox,
@@ -158,13 +162,13 @@ class QuattrocentoLightWidget(BaseDeviceWidget):
158
162
 
159
163
  [
160
164
  check_box.setChecked(False)
161
- for check_box in self.grid_selection_check_box_list
165
+ for check_box in self._grid_selection_check_box_list
162
166
  ]
163
- self.grid_selection_check_box_list[2].setChecked(True)
164
- self.grid_selection_check_box_list[3].setChecked(True)
167
+ self._grid_selection_check_box_list[2].setChecked(True)
168
+ self._grid_selection_check_box_list[3].setChecked(True)
165
169
 
166
170
  # Configuration parameters
167
- self.configuration_group_boxes: list[QGroupBox] = [
168
- self.acquisition_group_box,
169
- self.grid_selection_group_box,
171
+ self._configuration_group_boxes: list[QGroupBox] = [
172
+ self._acquisition_group_box,
173
+ self._grid_selection_group_box,
170
174
  ]
@@ -0,0 +1,260 @@
1
+ """
2
+ Quattrocento Widget class for GUI configuration
3
+ of the Quattrocento from OT Bioelettronica.
4
+
5
+ Developer: Dominik I. Braun
6
+ Contact: dome.braun@fau.de
7
+ Last Update: 2025-01-15
8
+ """
9
+
10
+ from __future__ import annotations
11
+ from functools import partial
12
+ from typing import TYPE_CHECKING
13
+
14
+ from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
15
+ BaseDeviceWidget,
16
+ )
17
+ from biosignal_device_interface.gui.ui_compiled.otb_quattrocento_template_widget import (
18
+ Ui_QuattrocentoForm,
19
+ )
20
+ from biosignal_device_interface.devices.otb.otb_quattrocento import (
21
+ OTBQuattrocento,
22
+ )
23
+
24
+ # Constants
25
+ from biosignal_device_interface.constants.devices.otb.otb_quattrocento_constants import (
26
+ QuattrocentoAcqSettByte,
27
+ QuattrocentoAcquisitionMode,
28
+ QuattrocentoDecimMode,
29
+ QuattrocentoINXConf2Byte,
30
+ QuattrocentoRecordingMode,
31
+ QuattrocentoSamplingFrequencyMode,
32
+ QuattrocentoNumberOfChannelsMode,
33
+ QuattrocentoLowPassFilterMode,
34
+ QuattrocentoHighPassFilterMode,
35
+ QuattrocentoDetectionMode,
36
+ )
37
+
38
+ if TYPE_CHECKING:
39
+ from PySide6.QtWidgets import (
40
+ QMainWindow,
41
+ QWidget,
42
+ QGroupBox,
43
+ QPushButton,
44
+ QCheckBox,
45
+ QComboBox,
46
+ QLabel,
47
+ QLineEdit,
48
+ )
49
+
50
+
51
+ class OTBQuattrocentoWidget(BaseDeviceWidget):
52
+ def __init__(self, parent: QWidget | QMainWindow | None = None):
53
+ super().__init__(parent)
54
+ self._set_device(OTBQuattrocento(self))
55
+
56
+ def _toggle_connection(self):
57
+ if not self._device.is_connected:
58
+ self._connect_push_button.setEnabled(False)
59
+
60
+ self._device.toggle_connection(
61
+ (
62
+ self._connection_ip_line_edit.text(),
63
+ int(self._connection_port_line_edit.text()),
64
+ ),
65
+ )
66
+
67
+ def _connection_toggled(self, is_connected: bool) -> None:
68
+ self._connect_push_button.setEnabled(True)
69
+ if is_connected:
70
+ self._connect_push_button.setText("Disconnect")
71
+ self._connect_push_button.setChecked(True)
72
+ self._configure_push_button.setEnabled(True)
73
+ self._connection_group_box.setEnabled(False)
74
+ else:
75
+ self._connect_push_button.setText("Connect")
76
+ self._connect_push_button.setChecked(False)
77
+ self._configure_push_button.setEnabled(False)
78
+ self._stream_push_button.setEnabled(False)
79
+ self._connection_group_box.setEnabled(True)
80
+
81
+ self.connect_toggled.emit(is_connected)
82
+
83
+ def _toggle_configuration(self):
84
+ self._device_params["grids"] = [
85
+ i
86
+ for i, check_box in enumerate(self._grid_selection_check_box_list)
87
+ if check_box.isChecked()
88
+ ]
89
+
90
+ # Acquisition settings
91
+ acq_sett_configuration = QuattrocentoAcqSettByte()
92
+ acq_sett_configuration.update(
93
+ decimation_mode=QuattrocentoDecimMode(
94
+ int(self._acquisition_decimator_check_box.isChecked()) + 1
95
+ ),
96
+ recording_mode=QuattrocentoRecordingMode(
97
+ int(self._acquisition_recording_check_box.isChecked()) + 1
98
+ ),
99
+ sampling_frequency_mode=QuattrocentoSamplingFrequencyMode(
100
+ self._acquisition_sampling_frequency_combo_box.currentIndex() + 1
101
+ ),
102
+ number_of_channels_mode=QuattrocentoNumberOfChannelsMode(
103
+ self._acquisition_number_of_channels_combo_box.currentIndex() + 1
104
+ ),
105
+ )
106
+ self._device_params["acq_sett_configuration"] = acq_sett_configuration
107
+
108
+ # Input settings
109
+ inx_configuration = QuattrocentoINXConf2Byte()
110
+ inx_configuration.update(
111
+ high_pass_filter=QuattrocentoHighPassFilterMode(
112
+ self._input_high_pass_filter_combo_box.currentIndex() + 1
113
+ ),
114
+ low_pass_filter=QuattrocentoLowPassFilterMode(
115
+ self._input_low_pass_filter_combo_box.currentIndex() + 1
116
+ ),
117
+ detection_mode=QuattrocentoDetectionMode(
118
+ self._input_detection_mode_combo_box.currentIndex() + 1
119
+ ),
120
+ )
121
+
122
+ self._device_params["input_top_left_configuration"] = inx_configuration
123
+ self._device_params["input_top_right_configuration"] = inx_configuration
124
+ self._device_params["multiple_input_one_configuration"] = inx_configuration
125
+ self._device_params["multiple_input_two_configuration"] = inx_configuration
126
+ self._device_params["multiple_input_three_configuration"] = inx_configuration
127
+ self._device_params["multiple_input_four_configuration"] = inx_configuration
128
+
129
+ self._device.configure_device(self._device_params)
130
+
131
+ def _configuration_toggled(self, is_configured: bool) -> None:
132
+ if is_configured:
133
+ self._stream_push_button.setEnabled(True)
134
+
135
+ self.configure_toggled.emit(is_configured)
136
+
137
+ def _toggle_stream(self) -> None:
138
+ self._stream_push_button.setEnabled(False)
139
+ self._device.toggle_streaming()
140
+
141
+ def _toggle_configuration_group_boxes(self, state: bool) -> None:
142
+ for group_box in self._configuration_group_boxes:
143
+ group_box.setEnabled(state)
144
+
145
+ def _stream_toggled(self, is_streaming):
146
+ self._stream_push_button.setEnabled(True)
147
+ if is_streaming:
148
+ self._stream_push_button.setText("Stop Streaming")
149
+ self._stream_push_button.setChecked(True)
150
+ self._configure_push_button.setEnabled(False)
151
+ self._toggle_configuration_group_boxes(False)
152
+ else:
153
+ self._stream_push_button.setText("Start Streaming")
154
+ self._stream_push_button.setChecked(False)
155
+ self._configure_push_button.setEnabled(True)
156
+ self._toggle_configuration_group_boxes(True)
157
+
158
+ def _initialize_device_params(self):
159
+ self._device_params: dict = {
160
+ "grids": [],
161
+ "acq_sett_configuration": QuattrocentoAcqSettByte(),
162
+ "input_top_left_configuration": QuattrocentoINXConf2Byte(),
163
+ "input_top_right_configuration": QuattrocentoINXConf2Byte(),
164
+ "multiple_input_one_configuration": QuattrocentoINXConf2Byte(),
165
+ "multiple_input_two_configuration": QuattrocentoINXConf2Byte(),
166
+ "multiple_input_three_configuration": QuattrocentoINXConf2Byte(),
167
+ "multiple_input_four_configuration": QuattrocentoINXConf2Byte(),
168
+ }
169
+
170
+ def _initialize_ui(self):
171
+ self.ui = Ui_QuattrocentoForm()
172
+ self.ui.setupUi(self)
173
+
174
+ # Command Push Buttons
175
+ self._connect_push_button: QPushButton = self.ui.commandConnectionPushButton
176
+ self._connect_push_button.clicked.connect(self._toggle_connection)
177
+ self._device.connect_toggled.connect(self._connection_toggled)
178
+
179
+ self._configure_push_button: QPushButton = (
180
+ self.ui.commandConfigurationPushButton
181
+ )
182
+ self._configure_push_button.clicked.connect(self._toggle_configuration)
183
+ self._configure_push_button.setEnabled(False)
184
+ self._device.configure_toggled.connect(self._configuration_toggled)
185
+
186
+ self._stream_push_button: QPushButton = self.ui.commandStreamPushButton
187
+ self._stream_push_button.clicked.connect(self._toggle_stream)
188
+ self._stream_push_button.setEnabled(False)
189
+ self._device.stream_toggled.connect(self._stream_toggled)
190
+
191
+ # Connection parameters
192
+ self._connection_group_box: QGroupBox = self.ui.connectionGroupBox
193
+ self._connection_ip_line_edit: QLineEdit = self.ui.connectionIPLineEdit
194
+ self._default_connection_ip: str = self._connection_ip_line_edit.text()
195
+ self._connection_ip_line_edit.editingFinished.connect(
196
+ partial(
197
+ self._check_ip_input,
198
+ self._connection_ip_line_edit,
199
+ self._default_connection_ip,
200
+ )
201
+ )
202
+ self._connection_port_line_edit: QLineEdit = self.ui.connectionPortLineEdit
203
+ self._default_connection_port: str = self._connection_port_line_edit.text()
204
+ self._connection_port_line_edit.editingFinished.connect(
205
+ partial(
206
+ self._check_port_input,
207
+ self._connection_port_line_edit,
208
+ self._default_connection_port,
209
+ )
210
+ )
211
+
212
+ # Acquisition parameters
213
+ self._acquisition_group_box: QGroupBox = self.ui.acquisitionGroupBox
214
+ self._acquisition_sampling_frequency_combo_box: QComboBox = (
215
+ self.ui.acquisitionSamplingFrequencyComboBox
216
+ )
217
+ self._acquisition_number_of_channels_combo_box: QComboBox = (
218
+ self.ui.acquisitionNumberOfChannelsComboBox
219
+ )
220
+ self._acquisition_decimator_check_box: QCheckBox = (
221
+ self.ui.acquisitionDecimatorCheckBox
222
+ )
223
+ self._acquisition_recording_check_box: QCheckBox = (
224
+ self.ui.acquisitionRecordingCheckBox
225
+ )
226
+
227
+ # Grid selection
228
+ self._grid_selection_group_box: QGroupBox = self.ui.gridSelectionGroupBox
229
+ self._grid_selection_check_box_list: list[QCheckBox] = [
230
+ self.ui.gridOneCheckBox,
231
+ self.ui.gridTwoCheckBox,
232
+ self.ui.gridThreeCheckBox,
233
+ self.ui.gridFourCheckBox,
234
+ self.ui.gridFiveCheckBox,
235
+ self.ui.gridSixCheckBox,
236
+ ]
237
+
238
+ [
239
+ check_box.setChecked(False)
240
+ for check_box in self._grid_selection_check_box_list
241
+ ]
242
+
243
+ # Input parameters
244
+ self._input_group_box: QGroupBox = self.ui.inputGroupBox
245
+ self._input_channel_combo_box: QComboBox = self.ui.inputChannelComboBox
246
+ self._input_low_pass_filter_combo_box: QComboBox = self.ui.inputLowPassComboBox
247
+ self._input_low_pass_default = self.ui.inputLowPassComboBox.currentIndex()
248
+ self._input_high_pass_filter_combo_box: QComboBox = (
249
+ self.ui.inputHighPassComboBox
250
+ )
251
+ self._input_high_pass_default = self.ui.inputHighPassComboBox.currentIndex()
252
+ self._input_detection_mode_combo_box: QComboBox = (
253
+ self.ui.inputDetectionModeComboBox
254
+ )
255
+
256
+ self._configuration_group_boxes: list[QGroupBox] = [
257
+ self._acquisition_group_box,
258
+ self._grid_selection_group_box,
259
+ self._input_group_box,
260
+ ]