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,170 +1,174 @@
1
- from __future__ import annotations
2
- from typing import TYPE_CHECKING
3
-
4
- from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
5
- BaseDeviceWidget,
6
- )
7
- from biosignal_device_interface.gui.ui_compiled.otb_quattrocento_light_template_widget import (
8
- Ui_QuattrocentoLightForm,
9
- )
10
- from biosignal_device_interface.devices.otb.otb_quattrocento_light import OTBQuattrocentoLight
11
-
12
- # Constants
13
- from biosignal_device_interface.constants.devices.otb.otb_quattrocento_light_constants import (
14
- QuattrocentoLightSamplingFrequency,
15
- QuattrocentoLightStreamingFrequency,
16
- )
17
-
18
- if TYPE_CHECKING:
19
- from PySide6.QtWidgets import (
20
- QMainWindow,
21
- QWidget,
22
- QGroupBox,
23
- QPushButton,
24
- QCheckBox,
25
- QComboBox,
26
- QLabel,
27
- )
28
-
29
-
30
- class OTBQuattrocentoLightWidget(BaseDeviceWidget):
31
- def __init__(self, parent: QWidget | QMainWindow | None = None):
32
- super().__init__(parent)
33
- self._set_device(OTBQuattrocentoLight(self))
34
-
35
- def _toggle_connection(self) -> None:
36
- if not self.device._is_connected:
37
- self.connect_push_button.setEnabled(False)
38
-
39
- self.device.toggle_connection(
40
- (self.connection_ip_label.text(), int(self.connection_port_label.text())),
41
- )
42
-
43
- def _connection_toggled(self, is_connected: bool) -> None:
44
- self.connect_push_button.setEnabled(True)
45
- 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)
50
- 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)
56
-
57
- self.connect_toggled.emit(is_connected)
58
-
59
- def _toggle_configuration(self) -> None:
60
- self._device_params["grids"] = [
61
- i
62
- for i, check_box in enumerate(self.grid_selection_check_box_list)
63
- if check_box.isChecked()
64
- ]
65
-
66
- self._device_params["streaming_frequency_mode"] = (
67
- QuattrocentoLightStreamingFrequency(
68
- self.acquisition_streaming_frequency_combo_box.currentIndex() + 1
69
- )
70
- )
71
- self._device_params["sampling_frequency_mode"] = (
72
- QuattrocentoLightSamplingFrequency(
73
- self.acquisition_sampling_frequency_combo_box.currentIndex() + 1
74
- )
75
- )
76
-
77
- self.device.configure_device(self._device_params)
78
-
79
- def _configuration_toggled(self, is_configured: bool) -> None:
80
- if is_configured:
81
- self.stream_push_button.setEnabled(True)
82
-
83
- self.configure_toggled.emit(is_configured)
84
-
85
- def _toggle_configuration_group_boxes(self) -> None:
86
- for group_box in self.configuration_group_boxes:
87
- group_box.setEnabled(not group_box.isEnabled())
88
-
89
- def _toggle_stream(self) -> None:
90
- self.stream_push_button.setEnabled(False)
91
- self.device.toggle_streaming()
92
-
93
- def _stream_toggled(self, is_streaming: bool) -> None:
94
- self.stream_push_button.setEnabled(True)
95
- 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)
99
- self._toggle_configuration_group_boxes()
100
- else:
101
- self.stream_push_button.setText("Stream")
102
- self.stream_push_button.setChecked(False)
103
- self.configure_push_button.setEnabled(True)
104
- self._toggle_configuration_group_boxes()
105
-
106
- self.stream_toggled.emit(is_streaming)
107
-
108
- def _initialize_device_params(self) -> None:
109
- self._device_params = {
110
- "grids": [2, 3],
111
- "streaming_frequency_mode": QuattrocentoLightStreamingFrequency.THIRTYTWO,
112
- "sampling_frequency_mode": QuattrocentoLightSamplingFrequency.MEDIUM,
113
- }
114
-
115
- def _initialize_ui(self) -> None:
116
- self.ui = Ui_QuattrocentoLightForm()
117
- self.ui.setupUi(self)
118
-
119
- # 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)
123
-
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)
128
-
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
-
134
- # 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
138
-
139
- # Acquisition parameters
140
- self.acquisition_group_box: QGroupBox = self.ui.acquisitionGroupBox
141
- self.acquisition_sampling_frequency_combo_box: QComboBox = (
142
- self.ui.acquisitionSamplingFrequencyComboBox
143
- )
144
- self.acquisition_streaming_frequency_combo_box: QComboBox = (
145
- self.ui.acquisitionStreamingFrequencyComboBox
146
- )
147
-
148
- # Grid parameters
149
- self.grid_selection_group_box: QGroupBox = self.ui.gridSelectionGroupBox
150
- self.grid_selection_check_box_list: list[QCheckBox] = [
151
- self.ui.gridOneCheckBox,
152
- self.ui.gridTwoCheckBox,
153
- self.ui.gridThreeCheckBox,
154
- self.ui.gridFourCheckBox,
155
- self.ui.gridFiveCheckBox,
156
- self.ui.gridSixCheckBox,
157
- ]
158
-
159
- [
160
- check_box.setChecked(False)
161
- for check_box in self.grid_selection_check_box_list
162
- ]
163
- self.grid_selection_check_box_list[2].setChecked(True)
164
- self.grid_selection_check_box_list[3].setChecked(True)
165
-
166
- # Configuration parameters
167
- self.configuration_group_boxes: list[QGroupBox] = [
168
- self.acquisition_group_box,
169
- self.grid_selection_group_box,
170
- ]
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
5
+ BaseDeviceWidget,
6
+ )
7
+ from biosignal_device_interface.gui.ui_compiled.otb_quattrocento_light_template_widget import (
8
+ Ui_QuattrocentoLightForm,
9
+ )
10
+ from biosignal_device_interface.devices.otb.otb_quattrocento_light import (
11
+ OTBQuattrocentoLight,
12
+ )
13
+
14
+ # Constants
15
+ from biosignal_device_interface.constants.devices.otb.otb_quattrocento_light_constants import (
16
+ QuattrocentoLightSamplingFrequency,
17
+ QuattrocentoLightStreamingFrequency,
18
+ )
19
+
20
+ if TYPE_CHECKING:
21
+ from PySide6.QtWidgets import (
22
+ QMainWindow,
23
+ QWidget,
24
+ QGroupBox,
25
+ QPushButton,
26
+ QCheckBox,
27
+ QComboBox,
28
+ QLabel,
29
+ )
30
+
31
+
32
+ class OTBQuattrocentoLightWidget(BaseDeviceWidget):
33
+ def __init__(self, parent: QWidget | QMainWindow | None = None):
34
+ super().__init__(parent)
35
+ self._set_device(OTBQuattrocentoLight(self))
36
+
37
+ def _toggle_connection(self) -> None:
38
+ if not self._device.is_connected:
39
+ self._connect_push_button.setEnabled(False)
40
+
41
+ self._device.toggle_connection(
42
+ (self._connection_ip_label.text(), int(self._connection_port_label.text())),
43
+ )
44
+
45
+ def _connection_toggled(self, is_connected: bool) -> None:
46
+ self._connect_push_button.setEnabled(True)
47
+ if is_connected:
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)
52
+ else:
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)
58
+
59
+ self.connect_toggled.emit(is_connected)
60
+
61
+ def _toggle_configuration(self) -> None:
62
+ self._device_params["grids"] = [
63
+ i
64
+ for i, check_box in enumerate(self._grid_selection_check_box_list)
65
+ if check_box.isChecked()
66
+ ]
67
+
68
+ self._device_params["streaming_frequency_mode"] = (
69
+ QuattrocentoLightStreamingFrequency(
70
+ self._acquisition_streaming_frequency_combo_box.currentIndex() + 1
71
+ )
72
+ )
73
+ self._device_params["sampling_frequency_mode"] = (
74
+ QuattrocentoLightSamplingFrequency(
75
+ self._acquisition_sampling_frequency_combo_box.currentIndex() + 1
76
+ )
77
+ )
78
+
79
+ self._device.configure_device(self._device_params)
80
+
81
+ def _configuration_toggled(self, is_configured: bool) -> None:
82
+ if is_configured:
83
+ self._stream_push_button.setEnabled(True)
84
+
85
+ self.configure_toggled.emit(is_configured)
86
+
87
+ def _toggle_configuration_group_boxes(self) -> None:
88
+ for group_box in self._configuration_group_boxes:
89
+ group_box.setEnabled(not group_box.isEnabled())
90
+
91
+ def _toggle_stream(self) -> None:
92
+ self._stream_push_button.setEnabled(False)
93
+ self._device.toggle_streaming()
94
+
95
+ def _stream_toggled(self, is_streaming: bool) -> None:
96
+ self._stream_push_button.setEnabled(True)
97
+ if is_streaming:
98
+ self._stream_push_button.setText("Stop Streaming")
99
+ self._stream_push_button.setChecked(True)
100
+ self._configure_push_button.setEnabled(False)
101
+ self._toggle_configuration_group_boxes()
102
+ else:
103
+ self._stream_push_button.setText("Stream")
104
+ self._stream_push_button.setChecked(False)
105
+ self._configure_push_button.setEnabled(True)
106
+ self._toggle_configuration_group_boxes()
107
+
108
+ self.stream_toggled.emit(is_streaming)
109
+
110
+ def _initialize_device_params(self) -> None:
111
+ self._device_params = {
112
+ "grids": [2, 3],
113
+ "streaming_frequency_mode": QuattrocentoLightStreamingFrequency.THIRTYTWO,
114
+ "sampling_frequency_mode": QuattrocentoLightSamplingFrequency.MEDIUM,
115
+ }
116
+
117
+ def _initialize_ui(self) -> None:
118
+ self.ui = Ui_QuattrocentoLightForm()
119
+ self.ui.setupUi(self)
120
+
121
+ # Command Push Buttons
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)
125
+
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)
132
+
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)
137
+
138
+ # Connection parameters
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
142
+
143
+ # Acquisition parameters
144
+ self._acquisition_group_box: QGroupBox = self.ui.acquisitionGroupBox
145
+ self._acquisition_sampling_frequency_combo_box: QComboBox = (
146
+ self.ui.acquisitionSamplingFrequencyComboBox
147
+ )
148
+ self._acquisition_streaming_frequency_combo_box: QComboBox = (
149
+ self.ui.acquisitionStreamingFrequencyComboBox
150
+ )
151
+
152
+ # Grid parameters
153
+ self._grid_selection_group_box: QGroupBox = self.ui.gridSelectionGroupBox
154
+ self._grid_selection_check_box_list: list[QCheckBox] = [
155
+ self.ui.gridOneCheckBox,
156
+ self.ui.gridTwoCheckBox,
157
+ self.ui.gridThreeCheckBox,
158
+ self.ui.gridFourCheckBox,
159
+ self.ui.gridFiveCheckBox,
160
+ self.ui.gridSixCheckBox,
161
+ ]
162
+
163
+ [
164
+ check_box.setChecked(False)
165
+ for check_box in self._grid_selection_check_box_list
166
+ ]
167
+ self._grid_selection_check_box_list[2].setChecked(True)
168
+ self._grid_selection_check_box_list[3].setChecked(True)
169
+
170
+ # Configuration parameters
171
+ self._configuration_group_boxes: list[QGroupBox] = [
172
+ self._acquisition_group_box,
173
+ self._grid_selection_group_box,
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
+ ]