qlsdk2 0.6.0a3__py3-none-any.whl → 0.6.0a4__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.
- qlsdk/core/entity/__init__.py +57 -11
- qlsdk/rsc/command/__init__.py +1 -2
- qlsdk/rsc/device/base.py +3 -3
- qlsdk/rsc/device/c256_rs.py +0 -9
- qlsdk/rsc/device/c64_rs.py +1 -29
- {qlsdk2-0.6.0a3.dist-info → qlsdk2-0.6.0a4.dist-info}/METADATA +1 -1
- {qlsdk2-0.6.0a3.dist-info → qlsdk2-0.6.0a4.dist-info}/RECORD +9 -9
- {qlsdk2-0.6.0a3.dist-info → qlsdk2-0.6.0a4.dist-info}/WHEEL +0 -0
- {qlsdk2-0.6.0a3.dist-info → qlsdk2-0.6.0a4.dist-info}/top_level.txt +0 -0
qlsdk/core/entity/__init__.py
CHANGED
|
@@ -72,24 +72,34 @@ class RscPacket(Packet):
|
|
|
72
72
|
class ImpedancePacket(Packet):
|
|
73
73
|
def __init__(self):
|
|
74
74
|
super().__init__()
|
|
75
|
-
self.data_len = None
|
|
76
75
|
self.impedance = None
|
|
77
76
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
77
|
+
@staticmethod
|
|
78
|
+
def transfer(body:bytes) -> 'ImpedancePacket':
|
|
79
|
+
packet = ImpedancePacket()
|
|
80
|
+
packet.time_stamp = int.from_bytes(body[0:8], 'little')
|
|
81
|
+
# packet.result = body[8]
|
|
82
|
+
packet.pkg_id = int.from_bytes(body[9: 13], 'little')
|
|
83
|
+
packet.channels = to_channels(body[13: 45])
|
|
84
|
+
# packet.sample_rate = int.from_bytes(body[45: 49], 'little')
|
|
85
|
+
# packet.sample_len = int.from_bytes(body[49: 53], 'little')
|
|
86
|
+
# packet.resolution = int(int(body[53]) / 8)
|
|
87
|
+
# packet.filter = int(int(body[54]) / 8)
|
|
88
|
+
# packet.wave_type = int(int(body[55]) / 8)
|
|
89
|
+
# packet.wave_freq = int.from_bytes(body[56: 60], 'little')
|
|
90
|
+
# packet.data_len = int.from_bytes(body[60: 64], 'little')
|
|
91
|
+
b_impedance = body[64:]
|
|
92
|
+
packet.impedance = [int.from_bytes(b_impedance[j * 4 : j * 4 + 4], 'little', signed=False) for j in range(len(packet.channels))]
|
|
93
|
+
|
|
94
|
+
logger.trace(f"impedance: {packet}")
|
|
85
95
|
|
|
96
|
+
return packet
|
|
97
|
+
|
|
86
98
|
def __str__(self):
|
|
87
99
|
return f"""
|
|
88
100
|
time_stamp: {self.time_stamp}
|
|
89
101
|
pkg_id: {self.pkg_id}
|
|
90
|
-
result: {self.result}
|
|
91
102
|
channels: {self.channels}
|
|
92
|
-
data len: {self.data_len}
|
|
93
103
|
impedance: {self.impedance}
|
|
94
104
|
"""
|
|
95
105
|
|
|
@@ -162,4 +172,40 @@ class C256RSPacket(Packet):
|
|
|
162
172
|
offset += 4 + channel_size * packet.resolution
|
|
163
173
|
|
|
164
174
|
logger.trace(packet)
|
|
165
|
-
return packet
|
|
175
|
+
return packet
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class C256ImpedancePacket(Packet):
|
|
179
|
+
def __init__(self):
|
|
180
|
+
super().__init__()
|
|
181
|
+
self.impedance = None
|
|
182
|
+
|
|
183
|
+
@staticmethod
|
|
184
|
+
def transfer(body:bytes) -> 'ImpedancePacket':
|
|
185
|
+
packet = ImpedancePacket()
|
|
186
|
+
packet.time_stamp = int.from_bytes(body[0:8], 'little')
|
|
187
|
+
# packet.result = body[8]
|
|
188
|
+
packet.pkg_id = int.from_bytes(body[9: 13], 'little')
|
|
189
|
+
packet.channels = to_channels(body[13: 45])
|
|
190
|
+
# packet.sample_rate = int.from_bytes(body[45: 49], 'little')
|
|
191
|
+
# packet.sample_len = int.from_bytes(body[49: 53], 'little')
|
|
192
|
+
# packet.resolution = int(int(body[53]) / 8)
|
|
193
|
+
# packet.filter = int(int(body[54]) / 8)
|
|
194
|
+
# packet.wave_type = int(int(body[55]) / 8)
|
|
195
|
+
# packet.wave_freq = int.from_bytes(body[56: 60], 'little')
|
|
196
|
+
# packet.data_len = int.from_bytes(body[60: 64], 'little')
|
|
197
|
+
b_impedance = body[64:]
|
|
198
|
+
packet.impedance = [int.from_bytes(b_impedance[j : j + 4], 'little', signed=False) for j in range(len(packet.channels))]
|
|
199
|
+
|
|
200
|
+
logger.trace(f"impedance: {packet}")
|
|
201
|
+
|
|
202
|
+
def __str__(self):
|
|
203
|
+
return f"""
|
|
204
|
+
time_stamp: {self.time_stamp}
|
|
205
|
+
pkg_id: {self.pkg_id}
|
|
206
|
+
result: {self.result}
|
|
207
|
+
channels: {self.channels}
|
|
208
|
+
data len: {self.data_len}
|
|
209
|
+
impedance: {self.impedance}
|
|
210
|
+
"""
|
|
211
|
+
|
qlsdk/rsc/command/__init__.py
CHANGED
|
@@ -297,8 +297,7 @@ class ImpedanceDataCommand(DeviceCommand):
|
|
|
297
297
|
cmd_desc = "阻抗数据"
|
|
298
298
|
|
|
299
299
|
def parse_body(self, body: bytes):
|
|
300
|
-
|
|
301
|
-
self.device.produce(body, type='impedance')
|
|
300
|
+
self.device.produce(body, type="impedance")
|
|
302
301
|
|
|
303
302
|
# 信号数据
|
|
304
303
|
class SignalDataCommand(DeviceCommand):
|
qlsdk/rsc/device/base.py
CHANGED
|
@@ -144,7 +144,7 @@ class QLBaseDevice(IDevice):
|
|
|
144
144
|
self._produce_impedance(body)
|
|
145
145
|
|
|
146
146
|
def _produce_impedance(self, body: bytes):
|
|
147
|
-
packet = ImpedancePacket
|
|
147
|
+
packet = ImpedancePacket.transfer(body)
|
|
148
148
|
# 分发阻抗数据包给订阅者
|
|
149
149
|
if len(self._impedance_consumer) > 0:
|
|
150
150
|
for topic, q in self._impedance_consumer.items():
|
|
@@ -354,7 +354,7 @@ class QLBaseDevice(IDevice):
|
|
|
354
354
|
self.stim_paradigm = param
|
|
355
355
|
|
|
356
356
|
# 设置采集参数
|
|
357
|
-
def set_acq_param(self, channels, sample_rate = 500, sample_range = 188):
|
|
357
|
+
def set_acq_param(self, channels, sample_rate:Literal[188, 375, 563, 750, 1125, 2250, 4500] = 500, sample_range:Literal[250, 500, 1000, 2000, 4000, 8000, 16000, 32000] = 188):
|
|
358
358
|
self._acq_param["channels"] = channels
|
|
359
359
|
self._acq_param["sample_rate"] = sample_rate
|
|
360
360
|
self._acq_param["sample_range"] = sample_range
|
|
@@ -446,7 +446,7 @@ class QLBaseDevice(IDevice):
|
|
|
446
446
|
|
|
447
447
|
# 数据队列
|
|
448
448
|
if q is None:
|
|
449
|
-
q = Queue(maxsize=
|
|
449
|
+
q = Queue(maxsize=1024 * 1024)
|
|
450
450
|
|
|
451
451
|
# 订阅生理电信号数据
|
|
452
452
|
if type == "signal":
|
qlsdk/rsc/device/c256_rs.py
CHANGED
|
@@ -199,15 +199,6 @@ class C256RS(QLBaseDevice):
|
|
|
199
199
|
def set_stim_param(self, param):
|
|
200
200
|
self.stim_paradigm = param
|
|
201
201
|
|
|
202
|
-
# 设置采集参数
|
|
203
|
-
def set_acq_param(self, channels, sample_rate = 500, sample_range = 188):
|
|
204
|
-
self._acq_param["channels"] = channels
|
|
205
|
-
self._acq_param["sample_rate"] = sample_rate
|
|
206
|
-
self._acq_param["sample_range"] = sample_range
|
|
207
|
-
self._acq_channels = channels
|
|
208
|
-
self._sample_rate = sample_rate
|
|
209
|
-
self._sample_range = sample_range
|
|
210
|
-
|
|
211
202
|
def _signal_wrapper(self, body: bytes):
|
|
212
203
|
return C256RSPacket().transfer(body)
|
|
213
204
|
|
qlsdk/rsc/device/c64_rs.py
CHANGED
|
@@ -285,35 +285,7 @@ class C64RS(QLBaseDevice):
|
|
|
285
285
|
if self._edf_handler:
|
|
286
286
|
# 发送结束标识
|
|
287
287
|
self.edf_handler.write(None)
|
|
288
|
-
|
|
289
|
-
# 订阅实时数据
|
|
290
|
-
def subscribe(self, topic:str=None, q : Queue=None, type : Literal["signal","impedance"]="signal"):
|
|
291
|
-
|
|
292
|
-
# 数据队列
|
|
293
|
-
if q is None:
|
|
294
|
-
q = Queue(maxsize=1000)
|
|
295
|
-
|
|
296
|
-
# 队列名称
|
|
297
|
-
if topic is None:
|
|
298
|
-
topic = f"{type}_{time_ns()}"
|
|
299
|
-
|
|
300
|
-
# 订阅生理电信号数据
|
|
301
|
-
if type == "signal":
|
|
302
|
-
# topic唯一,用来区分不同的订阅队列(下同)
|
|
303
|
-
if topic in list(self.__signal_consumer.keys()):
|
|
304
|
-
logger.warning(f"exists {type} subscribe of {topic}")
|
|
305
|
-
else:
|
|
306
|
-
self.__signal_consumer[topic] = q
|
|
307
|
-
|
|
308
|
-
# 订阅阻抗数据
|
|
309
|
-
if type == "impedance":
|
|
310
|
-
if topic in list(self.__signal_consumer.keys()):
|
|
311
|
-
logger.warning(f"exists {type} subscribe of {topic}")
|
|
312
|
-
else:
|
|
313
|
-
self.__impedance_consumer[topic] = q
|
|
314
|
-
|
|
315
|
-
return topic, q
|
|
316
|
-
|
|
288
|
+
|
|
317
289
|
def trigger(self, desc):
|
|
318
290
|
if self._edf_handler:
|
|
319
291
|
self.edf_handler.trigger(desc)
|
|
@@ -8,7 +8,7 @@ qlsdk/core/local.py,sha256=vbison4XZtS4SNYLJ9CqBhetEcukdviTWmvtdA1efkQ,811
|
|
|
8
8
|
qlsdk/core/utils.py,sha256=yfCiLpufO96I68MLs6Drc6IECRjcQ-If8sXn7RaRHrk,4241
|
|
9
9
|
qlsdk/core/crc/__init__.py,sha256=kaYSr6KN5g4U49xlxAvT2lnEeGtwX4Dz1ArwKDvUIIY,143
|
|
10
10
|
qlsdk/core/crc/crctools.py,sha256=sDeE6CMccQX2cRAyMQK0SZUk1fa50XMuwqXau5UX5C8,4242
|
|
11
|
-
qlsdk/core/entity/__init__.py,sha256=
|
|
11
|
+
qlsdk/core/entity/__init__.py,sha256=TFkm1kZ7SsBZnvsdIAnim-HHSeUC69Nd7rrUUrmk4gw,8615
|
|
12
12
|
qlsdk/core/filter/__init__.py,sha256=YIWIzDUKN30mq2JTr53ZGblggZfC_rLUp2FSRrsQFgU,36
|
|
13
13
|
qlsdk/core/filter/norch.py,sha256=5RdIBX5eqs5w5nmVAnCB3ESSuAT_vVBZ2g-dg6HMZdY,1858
|
|
14
14
|
qlsdk/core/message/__init__.py,sha256=sHuavOyHf4bhH6VdDpTA1EsCh7Q-XsPHcFiItpVz3Rs,51
|
|
@@ -39,14 +39,14 @@ qlsdk/rsc/eegion.py,sha256=lxrktO-3Z_MYdFIwc4NxvgLM5AL5kU3UItjH6tsKmHY,11670
|
|
|
39
39
|
qlsdk/rsc/entity.py,sha256=-fRWFkVWp9d8Y1uh6GiacXC5scdeEKNiNFf3aziGdCE,17751
|
|
40
40
|
qlsdk/rsc/paradigm.py,sha256=DGfwY36sMdPIMRjbGo661GvUTEwsRRi3jrmG405mSTk,12840
|
|
41
41
|
qlsdk/rsc/proxy.py,sha256=9CPdGNGWremwBUh4GvlXAykYB-x_BEPPLqsNvwuwIDE,2736
|
|
42
|
-
qlsdk/rsc/command/__init__.py,sha256=
|
|
42
|
+
qlsdk/rsc/command/__init__.py,sha256=TncLrFyanIvaE106EKd2kqHJloQTZee--XaPnADL-Sc,12233
|
|
43
43
|
qlsdk/rsc/command/message.py,sha256=nTdG-Vp4MBnltyrgedAWiKD6kzOaPrg58Z_hq6yjhys,12220
|
|
44
44
|
qlsdk/rsc/device/__init__.py,sha256=BzY9lRfssGPUlJ1ys-v3CWNgGihg7mPa2T4X0tl0Vg4,214
|
|
45
45
|
qlsdk/rsc/device/arskindling.py,sha256=owci6MEGjyWqohEXzPdKj_ESeVIZKgO53StVj6Tmi18,15002
|
|
46
|
-
qlsdk/rsc/device/base.py,sha256=
|
|
46
|
+
qlsdk/rsc/device/base.py,sha256=De0SjD84i0_apwPxdnnpGXaVdUGUGAy7YE1k5zNqdfs,20070
|
|
47
47
|
qlsdk/rsc/device/c16_rs.py,sha256=BHQRHOnsTMAKgqSXaAS2RjPIklZQAl2CVfe6i_iX-i4,5928
|
|
48
|
-
qlsdk/rsc/device/c256_rs.py,sha256=
|
|
49
|
-
qlsdk/rsc/device/c64_rs.py,sha256=
|
|
48
|
+
qlsdk/rsc/device/c256_rs.py,sha256=hsv2MBDFkK2rfsNTkDdG3TBAfVMAaSnTgnsi_NiQB4o,13222
|
|
49
|
+
qlsdk/rsc/device/c64_rs.py,sha256=AAwYcioJ741b22fifhSHTC3C-ESbRtXTe0b8A8OvNjg,12607
|
|
50
50
|
qlsdk/rsc/device/c64s1.py,sha256=L7nKmsoMCGj6GMjHYfYkKgkBtrGfP516kQHQ5I1FAUE,13986
|
|
51
51
|
qlsdk/rsc/device/device_factory.py,sha256=6cPhm3pPGrVXA1s1HePFLjZqmhNI1vOAucFI0VRD_Y0,1317
|
|
52
52
|
qlsdk/rsc/interface/__init__.py,sha256=xeRzIlQSB7ZSf4r5kLfH5cDQLzCyWeJAReG8Xq5nOE0,70
|
|
@@ -70,7 +70,7 @@ qlsdk/sdk/libs/libAr4SDK.dll,sha256=kZp9_DRwPdAJ5OgTFQSqS8tEETxUs7YmmETuBP2g60U,
|
|
|
70
70
|
qlsdk/sdk/libs/libwinpthread-1.dll,sha256=W77ySaDQDi0yxpnQu-ifcU6-uHKzmQpcvsyx2J9j5eg,52224
|
|
71
71
|
qlsdk/x8/__init__.py,sha256=FDpDK7GAYL-g3vzfU9U_V03QzoYoxH9YLm93PjMlANg,4870
|
|
72
72
|
qlsdk/x8m/__init__.py,sha256=cLeUqEEj65qXw4Qa4REyxoLh6T24anSqPaKe9_lR340,634
|
|
73
|
-
qlsdk2-0.6.
|
|
74
|
-
qlsdk2-0.6.
|
|
75
|
-
qlsdk2-0.6.
|
|
76
|
-
qlsdk2-0.6.
|
|
73
|
+
qlsdk2-0.6.0a4.dist-info/METADATA,sha256=BBbbb11OYzAxMMoXHycDv36RDWPBTSQIjSJ0Aw51wL8,1882
|
|
74
|
+
qlsdk2-0.6.0a4.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
|
|
75
|
+
qlsdk2-0.6.0a4.dist-info/top_level.txt,sha256=2CHzn0SY-NIBVyBl07Suh-Eo8oBAQfyNPtqQ_aDatBg,6
|
|
76
|
+
qlsdk2-0.6.0a4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|