py-neuromodulation 0.0.3__py3-none-any.whl → 0.0.4__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.
- py_neuromodulation/ConnectivityDecoding/Automated Anatomical Labeling 3 (Rolls 2020).nii +0 -0
- py_neuromodulation/ConnectivityDecoding/_get_grid_hull.m +34 -0
- py_neuromodulation/ConnectivityDecoding/_get_grid_whole_brain.py +106 -0
- py_neuromodulation/ConnectivityDecoding/_helper_write_connectome.py +119 -0
- py_neuromodulation/ConnectivityDecoding/mni_coords_cortical_surface.mat +0 -0
- py_neuromodulation/ConnectivityDecoding/mni_coords_whole_brain.mat +0 -0
- py_neuromodulation/ConnectivityDecoding/rmap_func_all.nii +0 -0
- py_neuromodulation/ConnectivityDecoding/rmap_struc.nii +0 -0
- py_neuromodulation/data/README +6 -0
- py_neuromodulation/data/dataset_description.json +8 -0
- py_neuromodulation/data/participants.json +32 -0
- py_neuromodulation/data/participants.tsv +2 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_coordsystem.json +5 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_electrodes.tsv +11 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_channels.tsv +11 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.eeg +0 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.json +18 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vhdr +35 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vmrk +13 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/sub-testsub_ses-EphysMedOff_scans.tsv +2 -0
- py_neuromodulation/grid_cortex.tsv +40 -0
- py_neuromodulation/grid_subcortex.tsv +1429 -0
- py_neuromodulation/nm_settings.json +338 -0
- py_neuromodulation/nm_stream_offline.py +7 -6
- py_neuromodulation/plots/STN_surf.mat +0 -0
- py_neuromodulation/plots/Vertices.mat +0 -0
- py_neuromodulation/plots/faces.mat +0 -0
- py_neuromodulation/plots/grid.mat +0 -0
- {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.4.dist-info}/METADATA +182 -182
- py_neuromodulation-0.0.4.dist-info/RECORD +72 -0
- {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.4.dist-info}/WHEEL +1 -2
- docs/build/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -68
- docs/build/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -233
- docs/build/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
- docs/build/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -97
- docs/build/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
- docs/build/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -192
- docs/build/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
- docs/build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -68
- docs/build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -239
- docs/build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
- docs/build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -97
- docs/build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
- docs/build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -192
- docs/build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
- docs/source/_build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -76
- docs/source/_build/html/_downloads/0d0d0a76e8f648d5d3cbc47da6351932/plot_real_time_demo.py +0 -97
- docs/source/_build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -240
- docs/source/_build/html/_downloads/5d73cadc59a8805c47e3b84063afc157/plot_example_BIDS.py +0 -233
- docs/source/_build/html/_downloads/7660317fa5a6bfbd12fcca9961457fc4/plot_example_rmap_computing.py +0 -63
- docs/source/_build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
- docs/source/_build/html/_downloads/839e5b319379f7fd9e867deb00fd797f/plot_example_gridPointProjection.py +0 -210
- docs/source/_build/html/_downloads/ae8be19afe5e559f011fc9b138968ba0/plot_first_demo.py +0 -192
- docs/source/_build/html/_downloads/b8b06cacc17969d3725a0b6f1d7741c5/plot_example_sharpwave_analysis.py +0 -219
- docs/source/_build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -121
- docs/source/_build/html/_downloads/c31a86c0b68cb4167d968091ace8080d/plot_example_add_feature.py +0 -68
- docs/source/_build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
- docs/source/_build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -189
- docs/source/_build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
- docs/source/auto_examples/plot_0_first_demo.py +0 -189
- docs/source/auto_examples/plot_1_example_BIDS.py +0 -240
- docs/source/auto_examples/plot_2_example_add_feature.py +0 -76
- docs/source/auto_examples/plot_3_example_sharpwave_analysis.py +0 -219
- docs/source/auto_examples/plot_4_example_gridPointProjection.py +0 -210
- docs/source/auto_examples/plot_5_example_rmap_computing.py +0 -64
- docs/source/auto_examples/plot_6_real_time_demo.py +0 -121
- docs/source/conf.py +0 -105
- examples/plot_0_first_demo.py +0 -189
- examples/plot_1_example_BIDS.py +0 -240
- examples/plot_2_example_add_feature.py +0 -76
- examples/plot_3_example_sharpwave_analysis.py +0 -219
- examples/plot_4_example_gridPointProjection.py +0 -210
- examples/plot_5_example_rmap_computing.py +0 -64
- examples/plot_6_real_time_demo.py +0 -121
- packages/realtime_decoding/build/lib/realtime_decoding/__init__.py +0 -4
- packages/realtime_decoding/build/lib/realtime_decoding/decoder.py +0 -104
- packages/realtime_decoding/build/lib/realtime_decoding/features.py +0 -163
- packages/realtime_decoding/build/lib/realtime_decoding/helpers.py +0 -15
- packages/realtime_decoding/build/lib/realtime_decoding/run_decoding.py +0 -345
- packages/realtime_decoding/build/lib/realtime_decoding/trainer.py +0 -54
- packages/tmsi/build/lib/TMSiFileFormats/__init__.py +0 -37
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/__init__.py +0 -36
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/lsl_stream_writer.py +0 -200
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_file_writer.py +0 -496
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_to_edf_converter.py +0 -236
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/xdf_file_writer.py +0 -977
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/__init__.py +0 -35
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/edf_reader.py +0 -116
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/poly5reader.py +0 -294
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/xdf_reader.py +0 -229
- packages/tmsi/build/lib/TMSiFileFormats/file_writer.py +0 -102
- packages/tmsi/build/lib/TMSiPlotters/__init__.py +0 -2
- packages/tmsi/build/lib/TMSiPlotters/gui/__init__.py +0 -39
- packages/tmsi/build/lib/TMSiPlotters/gui/_plotter_gui.py +0 -234
- packages/tmsi/build/lib/TMSiPlotters/gui/plotting_gui.py +0 -440
- packages/tmsi/build/lib/TMSiPlotters/plotters/__init__.py +0 -44
- packages/tmsi/build/lib/TMSiPlotters/plotters/hd_emg_plotter.py +0 -446
- packages/tmsi/build/lib/TMSiPlotters/plotters/impedance_plotter.py +0 -589
- packages/tmsi/build/lib/TMSiPlotters/plotters/signal_plotter.py +0 -1326
- packages/tmsi/build/lib/TMSiSDK/__init__.py +0 -54
- packages/tmsi/build/lib/TMSiSDK/device.py +0 -588
- packages/tmsi/build/lib/TMSiSDK/devices/__init__.py +0 -34
- packages/tmsi/build/lib/TMSiSDK/devices/saga/TMSi_Device_API.py +0 -1764
- packages/tmsi/build/lib/TMSiSDK/devices/saga/__init__.py +0 -34
- packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_device.py +0 -1366
- packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_types.py +0 -520
- packages/tmsi/build/lib/TMSiSDK/devices/saga/xml_saga_config.py +0 -165
- packages/tmsi/build/lib/TMSiSDK/error.py +0 -95
- packages/tmsi/build/lib/TMSiSDK/sample_data.py +0 -63
- packages/tmsi/build/lib/TMSiSDK/sample_data_server.py +0 -99
- packages/tmsi/build/lib/TMSiSDK/settings.py +0 -45
- packages/tmsi/build/lib/TMSiSDK/tmsi_device.py +0 -111
- packages/tmsi/build/lib/__init__.py +0 -4
- packages/tmsi/build/lib/apex_sdk/__init__.py +0 -34
- packages/tmsi/build/lib/apex_sdk/device/__init__.py +0 -41
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API.py +0 -1009
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_enums.py +0 -239
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_structures.py +0 -668
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_device.py +0 -1611
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_dongle.py +0 -38
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_event_reader.py +0 -57
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_channel.py +0 -44
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_config.py +0 -150
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_const.py +0 -36
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_impedance_channel.py +0 -48
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_info.py +0 -108
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/dongle_info.py +0 -39
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/download_measurement.py +0 -77
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/eeg_measurement.py +0 -150
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/impedance_measurement.py +0 -129
- packages/tmsi/build/lib/apex_sdk/device/threads/conversion_thread.py +0 -59
- packages/tmsi/build/lib/apex_sdk/device/threads/sampling_thread.py +0 -57
- packages/tmsi/build/lib/apex_sdk/device/tmsi_channel.py +0 -83
- packages/tmsi/build/lib/apex_sdk/device/tmsi_device.py +0 -201
- packages/tmsi/build/lib/apex_sdk/device/tmsi_device_enums.py +0 -103
- packages/tmsi/build/lib/apex_sdk/device/tmsi_dongle.py +0 -43
- packages/tmsi/build/lib/apex_sdk/device/tmsi_event_reader.py +0 -50
- packages/tmsi/build/lib/apex_sdk/device/tmsi_measurement.py +0 -118
- packages/tmsi/build/lib/apex_sdk/sample_data_server/__init__.py +0 -33
- packages/tmsi/build/lib/apex_sdk/sample_data_server/event_data.py +0 -44
- packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data.py +0 -50
- packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data_server.py +0 -136
- packages/tmsi/build/lib/apex_sdk/tmsi_errors/error.py +0 -126
- packages/tmsi/build/lib/apex_sdk/tmsi_sdk.py +0 -113
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/apex/apex_structure_generator.py +0 -134
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/decorators.py +0 -60
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/logger_filter.py +0 -42
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/singleton.py +0 -42
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/support_functions.py +0 -72
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/tmsi_logger.py +0 -98
- py_neuromodulation-0.0.3.dist-info/RECORD +0 -188
- py_neuromodulation-0.0.3.dist-info/top_level.txt +0 -5
- tests/__init__.py +0 -0
- tests/conftest.py +0 -117
- tests/test_all_examples.py +0 -10
- tests/test_all_features.py +0 -63
- tests/test_bispectra.py +0 -70
- tests/test_bursts.py +0 -105
- tests/test_feature_sampling_rates.py +0 -143
- tests/test_fooof.py +0 -16
- tests/test_initalization_offline_stream.py +0 -41
- tests/test_multiprocessing.py +0 -58
- tests/test_nan_values.py +0 -29
- tests/test_nm_filter.py +0 -95
- tests/test_nm_resample.py +0 -63
- tests/test_normalization_settings.py +0 -146
- tests/test_notch_filter.py +0 -31
- tests/test_osc_features.py +0 -424
- tests/test_preprocessing_filter.py +0 -151
- tests/test_rereference.py +0 -171
- tests/test_sampling.py +0 -57
- tests/test_settings_change_after_init.py +0 -76
- tests/test_sharpwave.py +0 -165
- tests/test_target_channel_add.py +0 -100
- tests/test_timing.py +0 -80
- {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.4.dist-info/licenses}/LICENSE +0 -0
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file eeg_measurement.py
|
|
26
|
-
* @brief
|
|
27
|
-
* Class to handle the communication with the device for EEG acquisition.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from copy import deepcopy
|
|
34
|
-
from ctypes import *
|
|
35
|
-
import time
|
|
36
|
-
|
|
37
|
-
from .....tmsi_utilities.tmsi_logger import TMSiLogger as logger
|
|
38
|
-
from .....sample_data_server.sample_data_server import SampleDataServer
|
|
39
|
-
from .....sample_data_server.sample_data import SampleData
|
|
40
|
-
from .....tmsi_utilities import support_functions
|
|
41
|
-
from .....tmsi_utilities.decorators import LogPerformances
|
|
42
|
-
from ..apex_API_structures import TMSiDevSampleRequest
|
|
43
|
-
from ..apex_API_enums import SampleControl, TMSiDeviceRetVal
|
|
44
|
-
from ....tmsi_measurement import TMSiMeasurement
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
class EEGMeasurement(TMSiMeasurement):
|
|
48
|
-
def __init__(self, dev, name="EEG Measurement"):
|
|
49
|
-
super().__init__(dev=dev, name=name)
|
|
50
|
-
self._sample_data_buffer = (c_float * self._sample_data_buffer_size)(0)
|
|
51
|
-
self._num_samples_per_set = dev.get_num_channels()
|
|
52
|
-
self._converter = {}
|
|
53
|
-
channels = self._dev.get_device_channels()
|
|
54
|
-
for i in range(self._num_samples_per_set):
|
|
55
|
-
conversion_factor = 10 ** channels[i].get_channel_exp()
|
|
56
|
-
if conversion_factor in self._converter:
|
|
57
|
-
self._converter[conversion_factor].append(i)
|
|
58
|
-
else:
|
|
59
|
-
self._converter[conversion_factor] = [i]
|
|
60
|
-
|
|
61
|
-
@LogPerformances
|
|
62
|
-
def start(self):
|
|
63
|
-
self._dev.reset_device_data_buffer()
|
|
64
|
-
measurement_request = TMSiDevSampleRequest()
|
|
65
|
-
measurement_request.DisableLiveImp = self._disable_live_impedance
|
|
66
|
-
measurement_request.DisableAvrRefCalc = (
|
|
67
|
-
self._disable_average_reference_calculation
|
|
68
|
-
)
|
|
69
|
-
measurement_request.StartStop = SampleControl.StartSampling.value
|
|
70
|
-
self._dev.set_device_sampling_request(measurement_request)
|
|
71
|
-
self._sampling_thread.start()
|
|
72
|
-
self._conversion_thread.start()
|
|
73
|
-
|
|
74
|
-
@LogPerformances
|
|
75
|
-
def stop(self):
|
|
76
|
-
measurement_request = TMSiDevSampleRequest()
|
|
77
|
-
measurement_request.DisableLiveImp = self._disable_live_impedance
|
|
78
|
-
measurement_request.DisableAvrRefCalc = (
|
|
79
|
-
self._disable_average_reference_calculation
|
|
80
|
-
)
|
|
81
|
-
measurement_request.StartStop = SampleControl.StopSampling.value
|
|
82
|
-
self._dev.set_device_sampling_request(measurement_request)
|
|
83
|
-
self._sampling_thread.stop()
|
|
84
|
-
self._conversion_thread.stop()
|
|
85
|
-
|
|
86
|
-
@LogPerformances
|
|
87
|
-
def _conversion_function(self):
|
|
88
|
-
while not self._conversion_queue.empty():
|
|
89
|
-
(
|
|
90
|
-
sample_data_buffer,
|
|
91
|
-
retrieved_sample_sets,
|
|
92
|
-
) = self._conversion_queue.get()
|
|
93
|
-
if retrieved_sample_sets > 0:
|
|
94
|
-
sample_mat = support_functions.array_to_matrix(
|
|
95
|
-
sample_data_buffer[
|
|
96
|
-
: self._num_samples_per_set * retrieved_sample_sets
|
|
97
|
-
],
|
|
98
|
-
self._num_samples_per_set,
|
|
99
|
-
)
|
|
100
|
-
for i in self._float_channels:
|
|
101
|
-
sample_mat[i] = support_functions.float_to_uint(
|
|
102
|
-
sample_mat[i]
|
|
103
|
-
)
|
|
104
|
-
for factor in self._converter.keys():
|
|
105
|
-
for channel in self._converter[factor]:
|
|
106
|
-
sample_mat[channel] = [
|
|
107
|
-
i / factor for i in sample_mat[channel]
|
|
108
|
-
]
|
|
109
|
-
samples = support_functions.matrix_to_multiplexed_array(
|
|
110
|
-
sample_mat
|
|
111
|
-
)
|
|
112
|
-
samples = [
|
|
113
|
-
0.0 if i == 4294967296000000.0 else i for i in samples
|
|
114
|
-
]
|
|
115
|
-
sd = SampleData(
|
|
116
|
-
retrieved_sample_sets, self._num_samples_per_set, samples
|
|
117
|
-
)
|
|
118
|
-
logger().debug(
|
|
119
|
-
"Data delivered to sample data server: {} channels, {} samples".format(
|
|
120
|
-
self._num_samples_per_set, retrieved_sample_sets
|
|
121
|
-
)
|
|
122
|
-
)
|
|
123
|
-
SampleDataServer().put_sample_data(self._dev.get_id(), sd)
|
|
124
|
-
|
|
125
|
-
@LogPerformances
|
|
126
|
-
def _sampling_function(self):
|
|
127
|
-
ret = self._dev.get_device_data(
|
|
128
|
-
pointer(self._sample_data_buffer),
|
|
129
|
-
self._sample_data_buffer_size,
|
|
130
|
-
pointer(self._retrieved_sample_sets),
|
|
131
|
-
pointer(self._retrieved_data_type),
|
|
132
|
-
)
|
|
133
|
-
if ret == TMSiDeviceRetVal.TMSiStatusOK:
|
|
134
|
-
if self._retrieved_sample_sets.value > 0:
|
|
135
|
-
self._conversion_queue.put(
|
|
136
|
-
(
|
|
137
|
-
deepcopy(self._sample_data_buffer),
|
|
138
|
-
self._retrieved_sample_sets.value,
|
|
139
|
-
)
|
|
140
|
-
)
|
|
141
|
-
self._tic_timeout = time.perf_counter()
|
|
142
|
-
self._empty_read_counter = 0
|
|
143
|
-
else:
|
|
144
|
-
if self._empty_read_counter == 0:
|
|
145
|
-
self._empty_read_counter = 1
|
|
146
|
-
if self._download_samples_limit is not None:
|
|
147
|
-
self._downloaded_samples += self._retrieved_sample_sets.value
|
|
148
|
-
self._download_percentage = (
|
|
149
|
-
self._downloaded_samples * 100.0 / self._download_samples_limit
|
|
150
|
-
)
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file impedance_measurement.py
|
|
26
|
-
* @brief
|
|
27
|
-
* Class to handle the communication with the device for impedance acquisition.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from copy import deepcopy
|
|
34
|
-
from ctypes import *
|
|
35
|
-
import time
|
|
36
|
-
|
|
37
|
-
from .....tmsi_utilities.tmsi_logger import TMSiLogger as logger
|
|
38
|
-
from .....sample_data_server.sample_data_server import SampleDataServer
|
|
39
|
-
from .....sample_data_server.sample_data import SampleData
|
|
40
|
-
from .....tmsi_utilities.decorators import LogPerformances
|
|
41
|
-
from ..apex_API_structures import TMSiImpedanceSample, TMSiDevImpedanceRequest
|
|
42
|
-
from ..apex_API_enums import ImpedanceControl, TMSiDeviceRetVal
|
|
43
|
-
from ....tmsi_measurement import TMSiMeasurement
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
class ImpedanceMeasurement(TMSiMeasurement):
|
|
47
|
-
def __init__(self, dev, name="Impedance Measurement"):
|
|
48
|
-
super().__init__(dev=dev, name=name)
|
|
49
|
-
self._sample_data_buffer = (
|
|
50
|
-
TMSiImpedanceSample * self._sample_data_buffer_size
|
|
51
|
-
)(TMSiImpedanceSample())
|
|
52
|
-
self._num_samples_per_set = dev.get_num_impedance_channels()
|
|
53
|
-
|
|
54
|
-
@LogPerformances
|
|
55
|
-
def _sampling_function(self):
|
|
56
|
-
ret = self._dev.get_device_impedance_data(
|
|
57
|
-
pointer(self._sample_data_buffer),
|
|
58
|
-
self._sample_data_buffer_size,
|
|
59
|
-
pointer(self._retrieved_sample_sets),
|
|
60
|
-
)
|
|
61
|
-
if ret == TMSiDeviceRetVal.TMSiStatusOK:
|
|
62
|
-
if self._retrieved_sample_sets.value > 0:
|
|
63
|
-
self._conversion_queue.put(
|
|
64
|
-
(
|
|
65
|
-
deepcopy(self._sample_data_buffer),
|
|
66
|
-
self._retrieved_sample_sets.value,
|
|
67
|
-
)
|
|
68
|
-
)
|
|
69
|
-
self._empty_read_counter = 0
|
|
70
|
-
else:
|
|
71
|
-
if self._empty_read_counter == 0:
|
|
72
|
-
self._tic_timeout = time.perf_counter()
|
|
73
|
-
self._empty_read_counter += 1
|
|
74
|
-
|
|
75
|
-
@LogPerformances
|
|
76
|
-
def _conversion_function(self):
|
|
77
|
-
while not self._conversion_queue.empty():
|
|
78
|
-
(
|
|
79
|
-
sample_data_buffer,
|
|
80
|
-
retrieved_sample_sets,
|
|
81
|
-
) = self._conversion_queue.get()
|
|
82
|
-
if retrieved_sample_sets > 0:
|
|
83
|
-
sample_mat = [
|
|
84
|
-
sample_data_buffer[
|
|
85
|
-
ii : retrieved_sample_sets
|
|
86
|
-
* self._num_samples_per_set : self._num_samples_per_set
|
|
87
|
-
]
|
|
88
|
-
for ii in range(self._num_samples_per_set)
|
|
89
|
-
]
|
|
90
|
-
samples_exploded = [
|
|
91
|
-
[
|
|
92
|
-
i.ImpedanceRe if ii % 2 == 0 else i.ImpedanceIm
|
|
93
|
-
for i in sample_mat[ii // 2]
|
|
94
|
-
]
|
|
95
|
-
for ii in range(self._num_samples_per_set * 2)
|
|
96
|
-
]
|
|
97
|
-
samples_exploded_inline = [
|
|
98
|
-
samples_exploded[i][j]
|
|
99
|
-
for j in range(len(samples_exploded[0]))
|
|
100
|
-
for i in range(len(samples_exploded))
|
|
101
|
-
]
|
|
102
|
-
sd = SampleData(
|
|
103
|
-
retrieved_sample_sets,
|
|
104
|
-
self._num_samples_per_set * 2,
|
|
105
|
-
samples_exploded_inline,
|
|
106
|
-
)
|
|
107
|
-
logger().debug(
|
|
108
|
-
"Data delivered to sample data server: {} channels, {} samples".format(
|
|
109
|
-
self._num_samples_per_set, retrieved_sample_sets
|
|
110
|
-
)
|
|
111
|
-
)
|
|
112
|
-
SampleDataServer().put_sample_data(self._dev.get_id(), sd)
|
|
113
|
-
|
|
114
|
-
@LogPerformances
|
|
115
|
-
def start(self):
|
|
116
|
-
self._dev.reset_device_data_buffer()
|
|
117
|
-
measurement_request = TMSiDevImpedanceRequest()
|
|
118
|
-
measurement_request.StartStop = ImpedanceControl.StartImpedance.value
|
|
119
|
-
self._dev.set_device_impedance_request(measurement_request)
|
|
120
|
-
self._sampling_thread.start()
|
|
121
|
-
self._conversion_thread.start()
|
|
122
|
-
|
|
123
|
-
@LogPerformances
|
|
124
|
-
def stop(self):
|
|
125
|
-
measurement_request = TMSiDevImpedanceRequest()
|
|
126
|
-
measurement_request.StartStop = ImpedanceControl.StopImpedance.value
|
|
127
|
-
self._dev.set_device_impedance_request(measurement_request)
|
|
128
|
-
self._sampling_thread.stop()
|
|
129
|
-
self._conversion_thread.stop()
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file conversion_thread.py
|
|
26
|
-
* @brief
|
|
27
|
-
* Conversion Thread interface.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
import threading
|
|
34
|
-
import time
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class ConversionThread(threading.Thread):
|
|
38
|
-
def __init__(
|
|
39
|
-
self, conversion_function, pause=0.01, name="Conversion Thread"
|
|
40
|
-
):
|
|
41
|
-
super().__init__()
|
|
42
|
-
self.__name = name
|
|
43
|
-
self.__conversion_function = conversion_function
|
|
44
|
-
self.__pause = pause
|
|
45
|
-
|
|
46
|
-
def get_pause(self):
|
|
47
|
-
return self.__pause
|
|
48
|
-
|
|
49
|
-
def run(self):
|
|
50
|
-
self.__converting = True
|
|
51
|
-
while self.__converting:
|
|
52
|
-
self.__conversion_function()
|
|
53
|
-
time.sleep(self.__pause)
|
|
54
|
-
|
|
55
|
-
def set_pause(self, pause):
|
|
56
|
-
self.__pause = pause
|
|
57
|
-
|
|
58
|
-
def stop(self):
|
|
59
|
-
self.__converting = False
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file sampling_thread.py
|
|
26
|
-
* @brief
|
|
27
|
-
* Sampling Thread interface
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
import threading
|
|
34
|
-
import time
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class SamplingThread(threading.Thread):
|
|
38
|
-
def __init__(self, sampling_function, pause=0.01, name="Sampling Thread"):
|
|
39
|
-
super().__init__()
|
|
40
|
-
self.__name = name
|
|
41
|
-
self.__sampling_function = sampling_function
|
|
42
|
-
self.__pause = pause
|
|
43
|
-
|
|
44
|
-
def get_pause(self):
|
|
45
|
-
return self.__pause
|
|
46
|
-
|
|
47
|
-
def run(self):
|
|
48
|
-
self.__sampling = True
|
|
49
|
-
while self.__sampling:
|
|
50
|
-
self.__sampling_function()
|
|
51
|
-
time.sleep(self.__pause)
|
|
52
|
-
|
|
53
|
-
def set_pause(self, pause):
|
|
54
|
-
self.__pause = pause
|
|
55
|
-
|
|
56
|
-
def stop(self):
|
|
57
|
-
self.__sampling = False
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file tmsi_channel.py
|
|
26
|
-
* @brief
|
|
27
|
-
* TMSi Channel interface.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from .tmsi_device_enums import ChannelType
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class TMSiChannel:
|
|
37
|
-
def __init__(self):
|
|
38
|
-
self._alt_name = "-"
|
|
39
|
-
self._chan_divider = -1
|
|
40
|
-
self._def_name = "-"
|
|
41
|
-
self._enabled = False
|
|
42
|
-
self._exp = 0
|
|
43
|
-
self._format = 0
|
|
44
|
-
self._is_reference = 0
|
|
45
|
-
self._imp_divider = -1
|
|
46
|
-
self._sample_rate = 0
|
|
47
|
-
self._type = ChannelType.unknown
|
|
48
|
-
self._unit_name = "-"
|
|
49
|
-
|
|
50
|
-
def get_channel_exp(self):
|
|
51
|
-
return self._exp
|
|
52
|
-
|
|
53
|
-
def get_channel_format(self):
|
|
54
|
-
return self._format
|
|
55
|
-
|
|
56
|
-
def get_channel_name(self):
|
|
57
|
-
return self._alt_name
|
|
58
|
-
|
|
59
|
-
def get_channel_type(self):
|
|
60
|
-
return self._type
|
|
61
|
-
|
|
62
|
-
def get_channel_unit_name(self):
|
|
63
|
-
return self._unit_name
|
|
64
|
-
|
|
65
|
-
def is_reference(self):
|
|
66
|
-
if self._is_reference == 1:
|
|
67
|
-
return 1
|
|
68
|
-
else:
|
|
69
|
-
return 0
|
|
70
|
-
|
|
71
|
-
def set_device_channel_information(self):
|
|
72
|
-
raise NotImplementedError("method not available for this channel")
|
|
73
|
-
|
|
74
|
-
def set_device_channel_names(
|
|
75
|
-
self, default_channel_name=None, alternative_channel_name=None
|
|
76
|
-
):
|
|
77
|
-
if default_channel_name is not None:
|
|
78
|
-
self._def_name = default_channel_name
|
|
79
|
-
if alternative_channel_name is not None:
|
|
80
|
-
self._alt_name = alternative_channel_name
|
|
81
|
-
|
|
82
|
-
def set_device_reference(self, is_reference):
|
|
83
|
-
self._is_reference = is_reference
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file tmsi_device.py
|
|
26
|
-
* @brief
|
|
27
|
-
* TMSi Device interface.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class TMSiDevice:
|
|
35
|
-
def __init__(self):
|
|
36
|
-
raise NotImplementedError("method not available for this device")
|
|
37
|
-
|
|
38
|
-
def close(*args, **kwargs):
|
|
39
|
-
raise NotImplementedError("method not available for this device")
|
|
40
|
-
|
|
41
|
-
def discover(*args, **kwargs):
|
|
42
|
-
raise NotImplementedError("method not available for this device")
|
|
43
|
-
|
|
44
|
-
def download_file_from_device(*args, **kwargs):
|
|
45
|
-
raise NotImplementedError("method not available for this device")
|
|
46
|
-
|
|
47
|
-
def export_configuration(*args, **kwargs):
|
|
48
|
-
raise NotImplementedError("method not available for this device")
|
|
49
|
-
|
|
50
|
-
def import_configuration(*args, **kwargs):
|
|
51
|
-
raise NotImplementedError("method not available for this device")
|
|
52
|
-
|
|
53
|
-
def get_card_recording_config(*args, **kwargs):
|
|
54
|
-
raise NotImplementedError("method not available for this device")
|
|
55
|
-
|
|
56
|
-
def get_card_status(*args, **kwargs):
|
|
57
|
-
raise NotImplementedError("method not available for this device")
|
|
58
|
-
|
|
59
|
-
def get_device_active_channels(*args, **kwargs):
|
|
60
|
-
raise NotImplementedError("method not available for this device")
|
|
61
|
-
|
|
62
|
-
def get_device_card_file_info(*args, **kwargs):
|
|
63
|
-
raise NotImplementedError("method not available for this device")
|
|
64
|
-
|
|
65
|
-
def get_device_card_file_list(*args, **kwargs):
|
|
66
|
-
raise NotImplementedError("method not available for this device")
|
|
67
|
-
|
|
68
|
-
def get_device_channels(*args, **kwargs):
|
|
69
|
-
raise NotImplementedError("method not available for this device")
|
|
70
|
-
|
|
71
|
-
def get_device_data(*args, **kwargs):
|
|
72
|
-
raise NotImplementedError("method not available for this device")
|
|
73
|
-
|
|
74
|
-
def get_device_handle_value(*args, **kwargs):
|
|
75
|
-
raise NotImplementedError("method not available for this device")
|
|
76
|
-
|
|
77
|
-
def get_device_impedance_channels(*args, **kwargs):
|
|
78
|
-
raise NotImplementedError("method not available for this device")
|
|
79
|
-
|
|
80
|
-
def get_device_impedance_data(*args, **kwargs):
|
|
81
|
-
raise NotImplementedError("method not available for this device")
|
|
82
|
-
|
|
83
|
-
def get_device_info_report(*args, **kwargs):
|
|
84
|
-
raise NotImplementedError("method not available for this device")
|
|
85
|
-
|
|
86
|
-
def get_device_interface_status(*args, **kwargs):
|
|
87
|
-
raise NotImplementedError("method not available for this device")
|
|
88
|
-
|
|
89
|
-
def get_device_list(*args, **kwargs):
|
|
90
|
-
raise NotImplementedError("method not available for this device")
|
|
91
|
-
|
|
92
|
-
def get_device_power_status(*args, **kwargs):
|
|
93
|
-
raise NotImplementedError("method not available for this device")
|
|
94
|
-
|
|
95
|
-
def get_device_sampling_config(*args, **kwargs):
|
|
96
|
-
raise NotImplementedError("method not available for this device")
|
|
97
|
-
|
|
98
|
-
def get_device_sampling_frequency(*args, **kwargs):
|
|
99
|
-
raise NotImplementedError("method not available for this device")
|
|
100
|
-
|
|
101
|
-
def get_device_serial_number(*args, **kwargs):
|
|
102
|
-
raise NotImplementedError("method not available for this device")
|
|
103
|
-
|
|
104
|
-
def get_device_state(*args, **kwargs):
|
|
105
|
-
raise NotImplementedError("method not available for this device")
|
|
106
|
-
|
|
107
|
-
def get_device_time(*args, **kwargs):
|
|
108
|
-
raise NotImplementedError("method not available for this device")
|
|
109
|
-
|
|
110
|
-
def get_device_type(*args, **kwargs):
|
|
111
|
-
raise NotImplementedError("method not available for this device")
|
|
112
|
-
|
|
113
|
-
def get_dongle_list(*args, **kwargs):
|
|
114
|
-
raise NotImplementedError("method not available for this device")
|
|
115
|
-
|
|
116
|
-
def get_dongle_serial_number(*args, **kwargs):
|
|
117
|
-
raise NotImplementedError("method not available for this device")
|
|
118
|
-
|
|
119
|
-
def get_downloaded_percentage(*args, **kwargs):
|
|
120
|
-
raise NotImplementedError("method not available for this device")
|
|
121
|
-
|
|
122
|
-
def get_dr_interface(*args, **kwargs):
|
|
123
|
-
raise NotImplementedError("method not available for this device")
|
|
124
|
-
|
|
125
|
-
def get_event(*args, **kwargs):
|
|
126
|
-
raise NotImplementedError("method not available for this device")
|
|
127
|
-
|
|
128
|
-
def get_event_buffer(*args, **kwargs):
|
|
129
|
-
raise NotImplementedError("method not available for this device")
|
|
130
|
-
|
|
131
|
-
def get_id(*args, **kwargs):
|
|
132
|
-
raise NotImplementedError("method not available for this device")
|
|
133
|
-
|
|
134
|
-
def get_live_impedance(*args, **kwargs):
|
|
135
|
-
raise NotImplementedError("method not available for this device")
|
|
136
|
-
|
|
137
|
-
def get_num_channels(*args, **kwargs):
|
|
138
|
-
raise NotImplementedError("method not available for this device")
|
|
139
|
-
|
|
140
|
-
def get_num_impedance_channels(*args, **kwargs):
|
|
141
|
-
raise NotImplementedError("method not available for this device")
|
|
142
|
-
|
|
143
|
-
def get_sdk(*args, **kwargs):
|
|
144
|
-
raise NotImplementedError("method not available for this device")
|
|
145
|
-
|
|
146
|
-
def open(*args, **kwargs):
|
|
147
|
-
raise NotImplementedError("method not available for this device")
|
|
148
|
-
|
|
149
|
-
def pair_device(*args, **kwargs):
|
|
150
|
-
raise NotImplementedError("method not available for this device")
|
|
151
|
-
|
|
152
|
-
def reset_device_card(*args, **kwargs):
|
|
153
|
-
raise NotImplementedError("method not available for this device")
|
|
154
|
-
|
|
155
|
-
def reset_device_data_buffer(*args, **kwargs):
|
|
156
|
-
raise NotImplementedError("method not available for this device")
|
|
157
|
-
|
|
158
|
-
def reset_device_event_buffer(*args, **kwargs):
|
|
159
|
-
raise NotImplementedError("method not available for this device")
|
|
160
|
-
|
|
161
|
-
def reset_to_factory_default(*args, **kwargs):
|
|
162
|
-
raise NotImplementedError("method not available for this device")
|
|
163
|
-
|
|
164
|
-
def set_card_recording_config(*args, **kwargs):
|
|
165
|
-
raise NotImplementedError("method not available for this device")
|
|
166
|
-
|
|
167
|
-
def set_device_channel_names(*args, **kwargs):
|
|
168
|
-
raise NotImplementedError("method not available for this device")
|
|
169
|
-
|
|
170
|
-
def set_device_download_file_request(*args, **kwargs):
|
|
171
|
-
raise NotImplementedError("method not available for this device")
|
|
172
|
-
|
|
173
|
-
def set_device_impedance_request(*args, **kwargs):
|
|
174
|
-
raise NotImplementedError("method not available for this device")
|
|
175
|
-
|
|
176
|
-
def set_device_interface(*args, **kwargs):
|
|
177
|
-
raise NotImplementedError("method not available for this device")
|
|
178
|
-
|
|
179
|
-
def set_device_references(*args, **kwargs):
|
|
180
|
-
raise NotImplementedError("method not available for this device")
|
|
181
|
-
|
|
182
|
-
def set_device_sampling_config(*args, **kwargs):
|
|
183
|
-
raise NotImplementedError("method not available for this device")
|
|
184
|
-
|
|
185
|
-
def set_device_sampling_request(*args, **kwargs):
|
|
186
|
-
raise NotImplementedError("method not available for this device")
|
|
187
|
-
|
|
188
|
-
def set_device_time(*args, **kwargs):
|
|
189
|
-
raise NotImplementedError("method not available for this device")
|
|
190
|
-
|
|
191
|
-
def start_download_file(*args, **kwargs):
|
|
192
|
-
raise NotImplementedError("method not available for this device")
|
|
193
|
-
|
|
194
|
-
def start_measurement(*args, **kwargs):
|
|
195
|
-
raise NotImplementedError("method not available for this device")
|
|
196
|
-
|
|
197
|
-
def stop_download_file(*args, **kwargs):
|
|
198
|
-
raise NotImplementedError("method not available for this device")
|
|
199
|
-
|
|
200
|
-
def stop_measurement(*args, **kwargs):
|
|
201
|
-
raise NotImplementedError("method not available for this device")
|