biosignal-device-interface 0.1.311__py3-none-any.whl → 0.2.1a1__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.
- biosignal_device_interface/constants/devices/core/base_device_constants.py +10 -0
- biosignal_device_interface/constants/devices/otb/otb_quattrocento_constants.py +313 -0
- biosignal_device_interface/constants/devices/otb/otb_syncstation_constants.py +233 -0
- biosignal_device_interface/devices/__init__.py +2 -0
- biosignal_device_interface/devices/core/base_device.py +5 -3
- biosignal_device_interface/devices/otb/__init__.py +8 -0
- biosignal_device_interface/devices/otb/otb_muovi.py +4 -5
- biosignal_device_interface/devices/otb/otb_quattrocento.py +332 -0
- biosignal_device_interface/devices/otb/otb_quattrocento_light.py +4 -7
- biosignal_device_interface/devices/otb/otb_syncstation.py +407 -0
- biosignal_device_interface/gui/device_template_widgets/all_devices_widget.py +8 -0
- biosignal_device_interface/gui/device_template_widgets/core/base_device_widget.py +17 -8
- biosignal_device_interface/gui/device_template_widgets/otb/otb_devices_widget.py +8 -0
- biosignal_device_interface/gui/device_template_widgets/otb/otb_muovi_plus_widget.py +9 -9
- biosignal_device_interface/gui/device_template_widgets/otb/otb_muovi_widget.py +9 -9
- biosignal_device_interface/gui/device_template_widgets/otb/otb_quattrocento_light_widget.py +59 -55
- biosignal_device_interface/gui/device_template_widgets/otb/otb_quattrocento_widget.py +260 -0
- biosignal_device_interface/gui/device_template_widgets/otb/otb_syncstation_widget.py +262 -0
- biosignal_device_interface/gui/plot_widgets/biosignal_plot_widget.py +2 -1
- biosignal_device_interface/gui/ui/otb_quattrocento_template_widget.ui +415 -0
- biosignal_device_interface/gui/ui/otb_syncstation_template_widget.ui +732 -0
- biosignal_device_interface/gui/ui_compiled/otb_quattrocento_template_widget.py +318 -0
- biosignal_device_interface/gui/ui_compiled/otb_syncstation_template_widget.py +495 -0
- biosignal_device_interface-0.2.1a1.dist-info/LICENSE +675 -0
- {biosignal_device_interface-0.1.311.dist-info → biosignal_device_interface-0.2.1a1.dist-info}/METADATA +5 -3
- {biosignal_device_interface-0.1.311.dist-info → biosignal_device_interface-0.2.1a1.dist-info}/RECORD +27 -17
- biosignal_device_interface-0.1.311.dist-info/LICENSE +0 -395
- {biosignal_device_interface-0.1.311.dist-info → biosignal_device_interface-0.2.1a1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Device class for real-time interfacing the OTB Syncstation device.
|
|
3
|
+
Developer: Dominik I. Braun
|
|
4
|
+
Contact: dome.braun@fau.de
|
|
5
|
+
Last Update: 2025-01-09
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
from functools import partial
|
|
10
|
+
from typing import TYPE_CHECKING, Dict
|
|
11
|
+
|
|
12
|
+
from biosignal_device_interface.gui.device_template_widgets.core.base_device_widget import (
|
|
13
|
+
BaseDeviceWidget,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# Local Libraries
|
|
17
|
+
from biosignal_device_interface.gui.ui_compiled.otb_syncstation_template_widget import (
|
|
18
|
+
Ui_SyncStationForm,
|
|
19
|
+
)
|
|
20
|
+
from biosignal_device_interface.devices.otb.otb_syncstation import OTBSyncStation
|
|
21
|
+
|
|
22
|
+
# Constants
|
|
23
|
+
from biosignal_device_interface.constants.devices.otb.otb_syncstation_constants import (
|
|
24
|
+
SyncStationDetectionMode,
|
|
25
|
+
SyncStationProbeConfigMode,
|
|
26
|
+
SyncStationRecOnMode,
|
|
27
|
+
SyncStationWorkingMode,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from PySide6.QtWidgets import (
|
|
32
|
+
QMainWindow,
|
|
33
|
+
QWidget,
|
|
34
|
+
QGroupBox,
|
|
35
|
+
QPushButton,
|
|
36
|
+
QCheckBox,
|
|
37
|
+
QComboBox,
|
|
38
|
+
QLabel,
|
|
39
|
+
QTabWidget,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class OTBSyncStationWidget(BaseDeviceWidget):
|
|
44
|
+
def __init__(self, parent: QWidget | QMainWindow | None = None):
|
|
45
|
+
super().__init__(parent)
|
|
46
|
+
self._set_device(OTBSyncStation(self))
|
|
47
|
+
|
|
48
|
+
def _toggle_connection(self):
|
|
49
|
+
if not self._device.is_connected:
|
|
50
|
+
self._command_connect_push_button.setEnabled(False)
|
|
51
|
+
|
|
52
|
+
self._device.toggle_connection(
|
|
53
|
+
(self._connection_ip_label.text(), int(self._connection_port_label.text())),
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def _connection_toggled(self, is_connected: bool) -> None:
|
|
57
|
+
self._command_connect_push_button.setEnabled(True)
|
|
58
|
+
if is_connected:
|
|
59
|
+
self._command_connect_push_button.setText("Disconnect")
|
|
60
|
+
self._command_connect_push_button.setChecked(True)
|
|
61
|
+
self._command_configure_push_button.setEnabled(True)
|
|
62
|
+
self._connection_group_box.setEnabled(False)
|
|
63
|
+
else:
|
|
64
|
+
self._command_connect_push_button.setText("Connect")
|
|
65
|
+
self._command_connect_push_button.setChecked(False)
|
|
66
|
+
self._command_configure_push_button.setEnabled(False)
|
|
67
|
+
self._command_stream_push_button.setEnabled(False)
|
|
68
|
+
self._connection_group_box.setEnabled(True)
|
|
69
|
+
|
|
70
|
+
self.connect_toggled.emit(is_connected)
|
|
71
|
+
|
|
72
|
+
def _toggle_configuration(self) -> None:
|
|
73
|
+
self._device_params["working_mode"] = SyncStationWorkingMode(
|
|
74
|
+
self._input_working_mode_combo_box.currentIndex() + 1
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
count_enabled = 0
|
|
78
|
+
for key, value in self._probes_dict.items():
|
|
79
|
+
is_enabled = value["probe_status"].isChecked()
|
|
80
|
+
self._device_params["bytes_configuration_A"][key][
|
|
81
|
+
"probe_status"
|
|
82
|
+
] = is_enabled
|
|
83
|
+
self._device_params["bytes_configuration_A"][key]["detection_mode"] = (
|
|
84
|
+
SyncStationDetectionMode(value["detection_mode"].currentIndex() + 1)
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
if is_enabled:
|
|
88
|
+
count_enabled += 1
|
|
89
|
+
|
|
90
|
+
self._device_params["number_of_probes"] = count_enabled
|
|
91
|
+
|
|
92
|
+
self._device.configure_device(self._device_params)
|
|
93
|
+
|
|
94
|
+
def _configuration_toggled(self, is_configured: bool) -> None:
|
|
95
|
+
if is_configured:
|
|
96
|
+
self._command_stream_push_button.setEnabled(True)
|
|
97
|
+
|
|
98
|
+
self.configure_toggled.emit(is_configured)
|
|
99
|
+
|
|
100
|
+
def _toggle_stream(self) -> None:
|
|
101
|
+
self._command_stream_push_button.setEnabled(False)
|
|
102
|
+
self._device.toggle_streaming()
|
|
103
|
+
|
|
104
|
+
def _stream_toggled(self, is_streaming: bool) -> None:
|
|
105
|
+
self._command_stream_push_button.setEnabled(True)
|
|
106
|
+
if is_streaming:
|
|
107
|
+
self._command_stream_push_button.setText("Stop Streaming")
|
|
108
|
+
self._command_stream_push_button.setChecked(True)
|
|
109
|
+
self._command_configure_push_button.setEnabled(False)
|
|
110
|
+
self._input_group_box.setEnabled(False)
|
|
111
|
+
else:
|
|
112
|
+
self._command_stream_push_button.setText("Start Streaming")
|
|
113
|
+
self._command_stream_push_button.setChecked(False)
|
|
114
|
+
self._command_configure_push_button.setEnabled(True)
|
|
115
|
+
self._input_group_box.setEnabled(True)
|
|
116
|
+
|
|
117
|
+
self.stream_toggled.emit(is_streaming)
|
|
118
|
+
|
|
119
|
+
def _update_probe_params(self, probe: SyncStationProbeConfigMode, state) -> None:
|
|
120
|
+
self._probes_dict[probe]["detection_mode"].setEnabled(state == 2)
|
|
121
|
+
|
|
122
|
+
def _initialize_device_params(self) -> None:
|
|
123
|
+
self._device_params = {
|
|
124
|
+
"rec_on_mode": SyncStationRecOnMode.OFF,
|
|
125
|
+
"working_mode": SyncStationWorkingMode.EMG,
|
|
126
|
+
"number_of_probes": 0,
|
|
127
|
+
"bytes_configuration_A": {
|
|
128
|
+
SyncStationProbeConfigMode(i): {
|
|
129
|
+
"probe_status": False,
|
|
130
|
+
"detection_mode": SyncStationDetectionMode.MONOPOLAR_GAIN_LOW,
|
|
131
|
+
}
|
|
132
|
+
for i in range(1, len(SyncStationProbeConfigMode))
|
|
133
|
+
},
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
def _set_default_probe_params(self) -> None:
|
|
137
|
+
for values in self._probes_dict.values():
|
|
138
|
+
values["detection_mode"].setCurrentIndex(1)
|
|
139
|
+
values["probe_status"].setChecked(True)
|
|
140
|
+
values["probe_status"].setChecked(False)
|
|
141
|
+
|
|
142
|
+
self._probes_dict[SyncStationProbeConfigMode.MUOVI_PROBE_ONE][
|
|
143
|
+
"probe_status"
|
|
144
|
+
].setChecked(True)
|
|
145
|
+
|
|
146
|
+
self._probes_dict[SyncStationProbeConfigMode.MUOVI_PROBE_TWO][
|
|
147
|
+
"probe_status"
|
|
148
|
+
].setChecked(True)
|
|
149
|
+
|
|
150
|
+
def _initialize_ui(self):
|
|
151
|
+
self.ui = Ui_SyncStationForm()
|
|
152
|
+
self.ui.setupUi(self)
|
|
153
|
+
|
|
154
|
+
# Command Push Buttons
|
|
155
|
+
self._command_connect_push_button: QPushButton = (
|
|
156
|
+
self.ui.commandConnectionPushButton
|
|
157
|
+
)
|
|
158
|
+
self._command_connect_push_button.clicked.connect(self._toggle_connection)
|
|
159
|
+
self._device.connect_toggled.connect(self._connection_toggled)
|
|
160
|
+
|
|
161
|
+
self._command_configure_push_button: QPushButton = (
|
|
162
|
+
self.ui.commandConfigurationPushButton
|
|
163
|
+
)
|
|
164
|
+
self._command_configure_push_button.clicked.connect(self._toggle_configuration)
|
|
165
|
+
self._command_configure_push_button.setEnabled(False)
|
|
166
|
+
self._device.configure_toggled.connect(self._configuration_toggled)
|
|
167
|
+
|
|
168
|
+
self._command_stream_push_button: QPushButton = self.ui.commandStreamPushButton
|
|
169
|
+
self._command_stream_push_button.clicked.connect(self._toggle_stream)
|
|
170
|
+
self._command_stream_push_button.setEnabled(False)
|
|
171
|
+
self._device.stream_toggled.connect(self._stream_toggled)
|
|
172
|
+
|
|
173
|
+
# Connection Paramters
|
|
174
|
+
self._connection_group_box: QGroupBox = self.ui.connectionGroupBox
|
|
175
|
+
self._connection_ip_label: QLabel = self.ui.connectionIPAddressLabel
|
|
176
|
+
self._connection_port_label: QLabel = self.ui.connectionPortLabel
|
|
177
|
+
|
|
178
|
+
# Input Parameters
|
|
179
|
+
self._input_group_box: QGroupBox = self.ui.inputGroupBox
|
|
180
|
+
self._input_working_mode_combo_box: QComboBox = self.ui.inputWorkingModeComboBox
|
|
181
|
+
self._input_working_mode_combo_box.setCurrentIndex(1)
|
|
182
|
+
|
|
183
|
+
self._probes_tab_widget: QTabWidget = self.ui.probesTabWidget
|
|
184
|
+
self._probes_tab_widget.setCurrentIndex(0)
|
|
185
|
+
self._probes_dict: Dict[
|
|
186
|
+
SyncStationProbeConfigMode, dict[str, QComboBox | QCheckBox]
|
|
187
|
+
] = self._configure_probes_dict()
|
|
188
|
+
|
|
189
|
+
for key, value in self._probes_dict.items():
|
|
190
|
+
value["probe_status"].stateChanged.connect(
|
|
191
|
+
partial(self._update_probe_params, key)
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
self._set_default_probe_params()
|
|
195
|
+
|
|
196
|
+
def _configure_probes_dict(self) -> None:
|
|
197
|
+
return {
|
|
198
|
+
SyncStationProbeConfigMode.MUOVI_PROBE_ONE: {
|
|
199
|
+
"probe_status": self.ui.muoviProbeOneEnableCheckBox,
|
|
200
|
+
"detection_mode": self.ui.muoviProbeOneDetectionModeComboBox,
|
|
201
|
+
},
|
|
202
|
+
SyncStationProbeConfigMode.MUOVI_PROBE_TWO: {
|
|
203
|
+
"probe_status": self.ui.muoviProbeTwoEnableCheckBox,
|
|
204
|
+
"detection_mode": self.ui.muoviProbeTwoDetectionModeComboBox,
|
|
205
|
+
},
|
|
206
|
+
SyncStationProbeConfigMode.MUOVI_PROBE_THREE: {
|
|
207
|
+
"probe_status": self.ui.muoviProbeThreeEnableCheckBox,
|
|
208
|
+
"detection_mode": self.ui.muoviProbeThreeDetectionModeComboBox,
|
|
209
|
+
},
|
|
210
|
+
SyncStationProbeConfigMode.MUOVI_PROBE_FOUR: {
|
|
211
|
+
"probe_status": self.ui.muoviProbeFourEnableCheckBox,
|
|
212
|
+
"detection_mode": self.ui.muoviProbeFourDetectionModeComboBox,
|
|
213
|
+
},
|
|
214
|
+
SyncStationProbeConfigMode.MUOVI_PLUS_PROBE_ONE: {
|
|
215
|
+
"probe_status": self.ui.muoviPlusProbeOneEnableCheckBox,
|
|
216
|
+
"detection_mode": self.ui.muoviPlusProbeOneDetectionModeComboBox,
|
|
217
|
+
},
|
|
218
|
+
SyncStationProbeConfigMode.MUOVI_PLUS_PROBE_TWO: {
|
|
219
|
+
"probe_status": self.ui.muoviPlusProbeTwoEnableCheckBox,
|
|
220
|
+
"detection_mode": self.ui.muoviPlusProbeTwoDetectionModeComboBox,
|
|
221
|
+
},
|
|
222
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_ONE: {
|
|
223
|
+
"probe_status": self.ui.duePlusProbeOneEnableCheckBox,
|
|
224
|
+
"detection_mode": self.ui.duePlusProbeOneDetectionModeComboBox,
|
|
225
|
+
},
|
|
226
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_TWO: {
|
|
227
|
+
"probe_status": self.ui.duePlusProbeTwoEnableCheckBox,
|
|
228
|
+
"detection_mode": self.ui.duePlusProbeTwoDetectionModeComboBox,
|
|
229
|
+
},
|
|
230
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_THREE: {
|
|
231
|
+
"probe_status": self.ui.duePlusProbeThreeEnableCheckBox,
|
|
232
|
+
"detection_mode": self.ui.duePlusProbeThreeDetectionModeComboBox,
|
|
233
|
+
},
|
|
234
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_FOUR: {
|
|
235
|
+
"probe_status": self.ui.duePlusProbeFourEnableCheckBox,
|
|
236
|
+
"detection_mode": self.ui.duePlusProbeFourDetectionModeComboBox,
|
|
237
|
+
},
|
|
238
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_FIVE: {
|
|
239
|
+
"probe_status": self.ui.duePlusProbeFiveEnableCheckBox,
|
|
240
|
+
"detection_mode": self.ui.duePlusProbeFiveDetectionModeComboBox,
|
|
241
|
+
},
|
|
242
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_SIX: {
|
|
243
|
+
"probe_status": self.ui.duePlusProbeSixEnableCheckBox,
|
|
244
|
+
"detection_mode": self.ui.duePlusProbeSixDetectionModeComboBox,
|
|
245
|
+
},
|
|
246
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_SEVEN: {
|
|
247
|
+
"probe_status": self.ui.duePlusProbeSevenEnableCheckBox,
|
|
248
|
+
"detection_mode": self.ui.duePlusProbeSevenDetectionModeComboBox,
|
|
249
|
+
},
|
|
250
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_EIGHT: {
|
|
251
|
+
"probe_status": self.ui.duePlusProbeEightEnableCheckBox,
|
|
252
|
+
"detection_mode": self.ui.duePlusProbeEightDetectionModeComboBox,
|
|
253
|
+
},
|
|
254
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_NINE: {
|
|
255
|
+
"probe_status": self.ui.duePlusProbeNineEnableCheckBox,
|
|
256
|
+
"detection_mode": self.ui.duePlusProbeNineDetectionModeComboBox,
|
|
257
|
+
},
|
|
258
|
+
SyncStationProbeConfigMode.DUE_PLUS_PROBE_TEN: {
|
|
259
|
+
"probe_status": self.ui.duePlusProbeTenEnableCheckBox,
|
|
260
|
+
"detection_mode": self.ui.duePlusProbeTenDetectionModeComboBox,
|
|
261
|
+
},
|
|
262
|
+
}
|
|
@@ -347,7 +347,8 @@ class VispyFastPlotCanvas(app.Canvas):
|
|
|
347
347
|
self.line_data[:, :-input_vertices] = self.line_data[:, input_vertices:]
|
|
348
348
|
self.line_data[:, -input_vertices:] = input_data
|
|
349
349
|
|
|
350
|
-
self.
|
|
350
|
+
plot_data = self.line_data.ravel().astype(np.float32)
|
|
351
|
+
self.program["a_position"].set_data(plot_data)
|
|
351
352
|
self.update()
|
|
352
353
|
self.context.flush()
|
|
353
354
|
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<ui version="4.0">
|
|
3
|
+
<class>QuattrocentoForm</class>
|
|
4
|
+
<widget class="QWidget" name="QuattrocentoForm">
|
|
5
|
+
<property name="geometry">
|
|
6
|
+
<rect>
|
|
7
|
+
<x>0</x>
|
|
8
|
+
<y>0</y>
|
|
9
|
+
<width>400</width>
|
|
10
|
+
<height>638</height>
|
|
11
|
+
</rect>
|
|
12
|
+
</property>
|
|
13
|
+
<property name="windowTitle">
|
|
14
|
+
<string>Form</string>
|
|
15
|
+
</property>
|
|
16
|
+
<layout class="QGridLayout" name="gridLayout_2">
|
|
17
|
+
<item row="0" column="0">
|
|
18
|
+
<widget class="QWidget" name="widget" native="true">
|
|
19
|
+
<layout class="QGridLayout" name="gridLayout_6">
|
|
20
|
+
<item row="2" column="0">
|
|
21
|
+
<widget class="QGroupBox" name="inputGroupBox">
|
|
22
|
+
<property name="title">
|
|
23
|
+
<string>Input Parameters</string>
|
|
24
|
+
</property>
|
|
25
|
+
<layout class="QGridLayout" name="gridLayout_4">
|
|
26
|
+
<item row="0" column="0">
|
|
27
|
+
<widget class="QLabel" name="label_3">
|
|
28
|
+
<property name="text">
|
|
29
|
+
<string>Select Channel</string>
|
|
30
|
+
</property>
|
|
31
|
+
</widget>
|
|
32
|
+
</item>
|
|
33
|
+
<item row="3" column="1">
|
|
34
|
+
<widget class="QComboBox" name="inputDetectionModeComboBox">
|
|
35
|
+
<item>
|
|
36
|
+
<property name="text">
|
|
37
|
+
<string>MONOPOLAR</string>
|
|
38
|
+
</property>
|
|
39
|
+
</item>
|
|
40
|
+
<item>
|
|
41
|
+
<property name="text">
|
|
42
|
+
<string>DIFFERENTIAL</string>
|
|
43
|
+
</property>
|
|
44
|
+
</item>
|
|
45
|
+
<item>
|
|
46
|
+
<property name="text">
|
|
47
|
+
<string>BIPOLAR</string>
|
|
48
|
+
</property>
|
|
49
|
+
</item>
|
|
50
|
+
</widget>
|
|
51
|
+
</item>
|
|
52
|
+
<item row="3" column="0">
|
|
53
|
+
<widget class="QLabel" name="label_10">
|
|
54
|
+
<property name="text">
|
|
55
|
+
<string>Mode</string>
|
|
56
|
+
</property>
|
|
57
|
+
</widget>
|
|
58
|
+
</item>
|
|
59
|
+
<item row="2" column="0">
|
|
60
|
+
<widget class="QLabel" name="label_9">
|
|
61
|
+
<property name="text">
|
|
62
|
+
<string>Low Pass</string>
|
|
63
|
+
</property>
|
|
64
|
+
</widget>
|
|
65
|
+
</item>
|
|
66
|
+
<item row="1" column="1">
|
|
67
|
+
<widget class="QComboBox" name="inputHighPassComboBox">
|
|
68
|
+
<property name="currentIndex">
|
|
69
|
+
<number>1</number>
|
|
70
|
+
</property>
|
|
71
|
+
<item>
|
|
72
|
+
<property name="text">
|
|
73
|
+
<string>0.7 Hz</string>
|
|
74
|
+
</property>
|
|
75
|
+
</item>
|
|
76
|
+
<item>
|
|
77
|
+
<property name="text">
|
|
78
|
+
<string>10 Hz</string>
|
|
79
|
+
</property>
|
|
80
|
+
</item>
|
|
81
|
+
<item>
|
|
82
|
+
<property name="text">
|
|
83
|
+
<string>100 Hz</string>
|
|
84
|
+
</property>
|
|
85
|
+
</item>
|
|
86
|
+
<item>
|
|
87
|
+
<property name="text">
|
|
88
|
+
<string>200 Hz</string>
|
|
89
|
+
</property>
|
|
90
|
+
</item>
|
|
91
|
+
</widget>
|
|
92
|
+
</item>
|
|
93
|
+
<item row="1" column="0">
|
|
94
|
+
<widget class="QLabel" name="label_8">
|
|
95
|
+
<property name="text">
|
|
96
|
+
<string>High Pass</string>
|
|
97
|
+
</property>
|
|
98
|
+
</widget>
|
|
99
|
+
</item>
|
|
100
|
+
<item row="2" column="1">
|
|
101
|
+
<widget class="QComboBox" name="inputLowPassComboBox">
|
|
102
|
+
<property name="currentIndex">
|
|
103
|
+
<number>1</number>
|
|
104
|
+
</property>
|
|
105
|
+
<item>
|
|
106
|
+
<property name="text">
|
|
107
|
+
<string>130 Hz</string>
|
|
108
|
+
</property>
|
|
109
|
+
</item>
|
|
110
|
+
<item>
|
|
111
|
+
<property name="text">
|
|
112
|
+
<string>500 Hz</string>
|
|
113
|
+
</property>
|
|
114
|
+
</item>
|
|
115
|
+
<item>
|
|
116
|
+
<property name="text">
|
|
117
|
+
<string>900 Hz</string>
|
|
118
|
+
</property>
|
|
119
|
+
</item>
|
|
120
|
+
<item>
|
|
121
|
+
<property name="text">
|
|
122
|
+
<string>4400 Hz</string>
|
|
123
|
+
</property>
|
|
124
|
+
</item>
|
|
125
|
+
</widget>
|
|
126
|
+
</item>
|
|
127
|
+
<item row="0" column="1">
|
|
128
|
+
<widget class="QComboBox" name="inputChannelComboBox">
|
|
129
|
+
<property name="enabled">
|
|
130
|
+
<bool>false</bool>
|
|
131
|
+
</property>
|
|
132
|
+
<item>
|
|
133
|
+
<property name="text">
|
|
134
|
+
<string>IN1-4</string>
|
|
135
|
+
</property>
|
|
136
|
+
</item>
|
|
137
|
+
<item>
|
|
138
|
+
<property name="text">
|
|
139
|
+
<string>IN5-8</string>
|
|
140
|
+
</property>
|
|
141
|
+
</item>
|
|
142
|
+
<item>
|
|
143
|
+
<property name="text">
|
|
144
|
+
<string>MULTIPLE_IN_1</string>
|
|
145
|
+
</property>
|
|
146
|
+
</item>
|
|
147
|
+
<item>
|
|
148
|
+
<property name="text">
|
|
149
|
+
<string>MULTIPLE_IN_2</string>
|
|
150
|
+
</property>
|
|
151
|
+
</item>
|
|
152
|
+
<item>
|
|
153
|
+
<property name="text">
|
|
154
|
+
<string>MULTIPLE_IN_3</string>
|
|
155
|
+
</property>
|
|
156
|
+
</item>
|
|
157
|
+
<item>
|
|
158
|
+
<property name="text">
|
|
159
|
+
<string>MULTIPLE_IN_4</string>
|
|
160
|
+
</property>
|
|
161
|
+
</item>
|
|
162
|
+
</widget>
|
|
163
|
+
</item>
|
|
164
|
+
<item row="4" column="1">
|
|
165
|
+
<widget class="QPushButton" name="inputConfigurationPushButton">
|
|
166
|
+
<property name="enabled">
|
|
167
|
+
<bool>false</bool>
|
|
168
|
+
</property>
|
|
169
|
+
<property name="text">
|
|
170
|
+
<string>Configure Input</string>
|
|
171
|
+
</property>
|
|
172
|
+
</widget>
|
|
173
|
+
</item>
|
|
174
|
+
</layout>
|
|
175
|
+
</widget>
|
|
176
|
+
</item>
|
|
177
|
+
<item row="5" column="0">
|
|
178
|
+
<spacer name="verticalSpacer">
|
|
179
|
+
<property name="orientation">
|
|
180
|
+
<enum>Qt::Orientation::Vertical</enum>
|
|
181
|
+
</property>
|
|
182
|
+
<property name="sizeHint" stdset="0">
|
|
183
|
+
<size>
|
|
184
|
+
<width>20</width>
|
|
185
|
+
<height>40</height>
|
|
186
|
+
</size>
|
|
187
|
+
</property>
|
|
188
|
+
</spacer>
|
|
189
|
+
</item>
|
|
190
|
+
<item row="4" column="0">
|
|
191
|
+
<widget class="QGroupBox" name="commandsGroupBox">
|
|
192
|
+
<property name="title">
|
|
193
|
+
<string>Commands</string>
|
|
194
|
+
</property>
|
|
195
|
+
<layout class="QGridLayout" name="gridLayout_3">
|
|
196
|
+
<item row="0" column="0">
|
|
197
|
+
<widget class="QPushButton" name="commandConnectionPushButton">
|
|
198
|
+
<property name="text">
|
|
199
|
+
<string>Connect</string>
|
|
200
|
+
</property>
|
|
201
|
+
</widget>
|
|
202
|
+
</item>
|
|
203
|
+
<item row="1" column="0">
|
|
204
|
+
<widget class="QPushButton" name="commandConfigurationPushButton">
|
|
205
|
+
<property name="text">
|
|
206
|
+
<string>Configure</string>
|
|
207
|
+
</property>
|
|
208
|
+
</widget>
|
|
209
|
+
</item>
|
|
210
|
+
<item row="2" column="0">
|
|
211
|
+
<widget class="QPushButton" name="commandStreamPushButton">
|
|
212
|
+
<property name="text">
|
|
213
|
+
<string>Stream</string>
|
|
214
|
+
</property>
|
|
215
|
+
</widget>
|
|
216
|
+
</item>
|
|
217
|
+
</layout>
|
|
218
|
+
</widget>
|
|
219
|
+
</item>
|
|
220
|
+
<item row="1" column="0">
|
|
221
|
+
<widget class="QGroupBox" name="acquisitionGroupBox">
|
|
222
|
+
<property name="title">
|
|
223
|
+
<string>Acquisiton Parameters</string>
|
|
224
|
+
</property>
|
|
225
|
+
<layout class="QGridLayout" name="gridLayout">
|
|
226
|
+
<item row="1" column="1">
|
|
227
|
+
<widget class="QComboBox" name="acquisitionNumberOfChannelsComboBox">
|
|
228
|
+
<property name="currentIndex">
|
|
229
|
+
<number>3</number>
|
|
230
|
+
</property>
|
|
231
|
+
<item>
|
|
232
|
+
<property name="text">
|
|
233
|
+
<string>120</string>
|
|
234
|
+
</property>
|
|
235
|
+
</item>
|
|
236
|
+
<item>
|
|
237
|
+
<property name="text">
|
|
238
|
+
<string>216</string>
|
|
239
|
+
</property>
|
|
240
|
+
</item>
|
|
241
|
+
<item>
|
|
242
|
+
<property name="text">
|
|
243
|
+
<string>312</string>
|
|
244
|
+
</property>
|
|
245
|
+
</item>
|
|
246
|
+
<item>
|
|
247
|
+
<property name="text">
|
|
248
|
+
<string>408</string>
|
|
249
|
+
</property>
|
|
250
|
+
</item>
|
|
251
|
+
</widget>
|
|
252
|
+
</item>
|
|
253
|
+
<item row="0" column="1">
|
|
254
|
+
<widget class="QComboBox" name="acquisitionSamplingFrequencyComboBox">
|
|
255
|
+
<property name="currentIndex">
|
|
256
|
+
<number>1</number>
|
|
257
|
+
</property>
|
|
258
|
+
<item>
|
|
259
|
+
<property name="text">
|
|
260
|
+
<string>512</string>
|
|
261
|
+
</property>
|
|
262
|
+
</item>
|
|
263
|
+
<item>
|
|
264
|
+
<property name="text">
|
|
265
|
+
<string>2048</string>
|
|
266
|
+
</property>
|
|
267
|
+
</item>
|
|
268
|
+
<item>
|
|
269
|
+
<property name="text">
|
|
270
|
+
<string>5120</string>
|
|
271
|
+
</property>
|
|
272
|
+
</item>
|
|
273
|
+
<item>
|
|
274
|
+
<property name="text">
|
|
275
|
+
<string>10240</string>
|
|
276
|
+
</property>
|
|
277
|
+
</item>
|
|
278
|
+
</widget>
|
|
279
|
+
</item>
|
|
280
|
+
<item row="1" column="0">
|
|
281
|
+
<widget class="QLabel" name="label_2">
|
|
282
|
+
<property name="text">
|
|
283
|
+
<string>Number of Channels</string>
|
|
284
|
+
</property>
|
|
285
|
+
</widget>
|
|
286
|
+
</item>
|
|
287
|
+
<item row="0" column="0">
|
|
288
|
+
<widget class="QLabel" name="label">
|
|
289
|
+
<property name="text">
|
|
290
|
+
<string>Sampling Frequency</string>
|
|
291
|
+
</property>
|
|
292
|
+
</widget>
|
|
293
|
+
</item>
|
|
294
|
+
<item row="2" column="0">
|
|
295
|
+
<widget class="QCheckBox" name="acquisitionDecimatorCheckBox">
|
|
296
|
+
<property name="text">
|
|
297
|
+
<string>Decimator</string>
|
|
298
|
+
</property>
|
|
299
|
+
<property name="checked">
|
|
300
|
+
<bool>true</bool>
|
|
301
|
+
</property>
|
|
302
|
+
</widget>
|
|
303
|
+
</item>
|
|
304
|
+
<item row="2" column="1">
|
|
305
|
+
<widget class="QCheckBox" name="acquisitionRecordingCheckBox">
|
|
306
|
+
<property name="enabled">
|
|
307
|
+
<bool>false</bool>
|
|
308
|
+
</property>
|
|
309
|
+
<property name="text">
|
|
310
|
+
<string>Recording</string>
|
|
311
|
+
</property>
|
|
312
|
+
</widget>
|
|
313
|
+
</item>
|
|
314
|
+
</layout>
|
|
315
|
+
</widget>
|
|
316
|
+
</item>
|
|
317
|
+
<item row="3" column="0">
|
|
318
|
+
<widget class="QGroupBox" name="gridSelectionGroupBox">
|
|
319
|
+
<property name="title">
|
|
320
|
+
<string>Grid Selection</string>
|
|
321
|
+
</property>
|
|
322
|
+
<layout class="QGridLayout" name="gridLayout_5">
|
|
323
|
+
<item row="1" column="1">
|
|
324
|
+
<widget class="QCheckBox" name="gridFourCheckBox">
|
|
325
|
+
<property name="text">
|
|
326
|
+
<string>Grid 4</string>
|
|
327
|
+
</property>
|
|
328
|
+
</widget>
|
|
329
|
+
</item>
|
|
330
|
+
<item row="1" column="0">
|
|
331
|
+
<widget class="QCheckBox" name="gridThreeCheckBox">
|
|
332
|
+
<property name="text">
|
|
333
|
+
<string>Grid 3</string>
|
|
334
|
+
</property>
|
|
335
|
+
</widget>
|
|
336
|
+
</item>
|
|
337
|
+
<item row="1" column="2">
|
|
338
|
+
<widget class="QCheckBox" name="gridFiveCheckBox">
|
|
339
|
+
<property name="text">
|
|
340
|
+
<string>Grid 5</string>
|
|
341
|
+
</property>
|
|
342
|
+
</widget>
|
|
343
|
+
</item>
|
|
344
|
+
<item row="1" column="3">
|
|
345
|
+
<widget class="QCheckBox" name="gridSixCheckBox">
|
|
346
|
+
<property name="text">
|
|
347
|
+
<string>Grid 6</string>
|
|
348
|
+
</property>
|
|
349
|
+
</widget>
|
|
350
|
+
</item>
|
|
351
|
+
<item row="0" column="3">
|
|
352
|
+
<widget class="QCheckBox" name="gridTwoCheckBox">
|
|
353
|
+
<property name="layoutDirection">
|
|
354
|
+
<enum>Qt::LayoutDirection::LeftToRight</enum>
|
|
355
|
+
</property>
|
|
356
|
+
<property name="text">
|
|
357
|
+
<string>Grid 2</string>
|
|
358
|
+
</property>
|
|
359
|
+
</widget>
|
|
360
|
+
</item>
|
|
361
|
+
<item row="0" column="0">
|
|
362
|
+
<widget class="QCheckBox" name="gridOneCheckBox">
|
|
363
|
+
<property name="text">
|
|
364
|
+
<string>Grid 1</string>
|
|
365
|
+
</property>
|
|
366
|
+
</widget>
|
|
367
|
+
</item>
|
|
368
|
+
</layout>
|
|
369
|
+
</widget>
|
|
370
|
+
</item>
|
|
371
|
+
<item row="0" column="0">
|
|
372
|
+
<widget class="QGroupBox" name="connectionGroupBox">
|
|
373
|
+
<property name="title">
|
|
374
|
+
<string>Connection parameters</string>
|
|
375
|
+
</property>
|
|
376
|
+
<layout class="QGridLayout" name="gridLayout_7">
|
|
377
|
+
<item row="0" column="0">
|
|
378
|
+
<widget class="QLabel" name="label_4">
|
|
379
|
+
<property name="text">
|
|
380
|
+
<string>IP</string>
|
|
381
|
+
</property>
|
|
382
|
+
</widget>
|
|
383
|
+
</item>
|
|
384
|
+
<item row="0" column="1">
|
|
385
|
+
<widget class="QLineEdit" name="connectionIPLineEdit">
|
|
386
|
+
<property name="text">
|
|
387
|
+
<string>169.254.1.10</string>
|
|
388
|
+
</property>
|
|
389
|
+
</widget>
|
|
390
|
+
</item>
|
|
391
|
+
<item row="1" column="0">
|
|
392
|
+
<widget class="QLabel" name="label_5">
|
|
393
|
+
<property name="text">
|
|
394
|
+
<string>Port</string>
|
|
395
|
+
</property>
|
|
396
|
+
</widget>
|
|
397
|
+
</item>
|
|
398
|
+
<item row="1" column="1">
|
|
399
|
+
<widget class="QLineEdit" name="connectionPortLineEdit">
|
|
400
|
+
<property name="text">
|
|
401
|
+
<string>23456</string>
|
|
402
|
+
</property>
|
|
403
|
+
</widget>
|
|
404
|
+
</item>
|
|
405
|
+
</layout>
|
|
406
|
+
</widget>
|
|
407
|
+
</item>
|
|
408
|
+
</layout>
|
|
409
|
+
</widget>
|
|
410
|
+
</item>
|
|
411
|
+
</layout>
|
|
412
|
+
</widget>
|
|
413
|
+
<resources/>
|
|
414
|
+
<connections/>
|
|
415
|
+
</ui>
|