qlsdk2 0.6.0a8__py3-none-any.whl → 0.6.0a9__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/persist/ars_edf.py +6 -2
- qlsdk/rsc/device/arskindling.py +0 -15
- qlsdk/rsc/device/base.py +17 -6
- qlsdk/rsc/parser/base.py +9 -4
- {qlsdk2-0.6.0a8.dist-info → qlsdk2-0.6.0a9.dist-info}/METADATA +1 -1
- {qlsdk2-0.6.0a8.dist-info → qlsdk2-0.6.0a9.dist-info}/RECORD +8 -8
- {qlsdk2-0.6.0a8.dist-info → qlsdk2-0.6.0a9.dist-info}/WHEEL +0 -0
- {qlsdk2-0.6.0a8.dist-info → qlsdk2-0.6.0a9.dist-info}/top_level.txt +0 -0
qlsdk/persist/ars_edf.py
CHANGED
|
@@ -214,7 +214,7 @@ class ARSKindlingEDFHandler(object):
|
|
|
214
214
|
|
|
215
215
|
if channel_pos is None or len(channel_pos) == 0 :
|
|
216
216
|
logger.trace(f"没有指定分区{name}的通道,跳过")
|
|
217
|
-
|
|
217
|
+
return
|
|
218
218
|
|
|
219
219
|
# 分区数据包写入
|
|
220
220
|
if name not in self._edf_handler.keys():
|
|
@@ -234,7 +234,8 @@ class ARSKindlingEDFHandler(object):
|
|
|
234
234
|
data = RscPacket()
|
|
235
235
|
data.time_stamp = packet.time_stamp
|
|
236
236
|
data.pkg_id = packet.pkg_id
|
|
237
|
-
data.channels = channels
|
|
237
|
+
# data.channels = channels
|
|
238
|
+
data.channels = self.channel_display(channels)
|
|
238
239
|
data.origin_sample_rate = packet.origin_sample_rate
|
|
239
240
|
data.sample_rate = packet.sample_rate
|
|
240
241
|
data.sample_num = packet.sample_num
|
|
@@ -251,3 +252,6 @@ class ARSKindlingEDFHandler(object):
|
|
|
251
252
|
# trigger现在(20250702)多个分区共享, 分发到所有分区文件中标记
|
|
252
253
|
for k in self._edf_handler.keys():
|
|
253
254
|
self._edf_handler[k].trigger(desc, cur_time)
|
|
255
|
+
|
|
256
|
+
def channel_display(self, channel):
|
|
257
|
+
return [self._channel_mapping.get(channel_id, []) for channel_id in channel]
|
qlsdk/rsc/device/arskindling.py
CHANGED
|
@@ -77,19 +77,4 @@ class ARSKindling(QLBaseDevice):
|
|
|
77
77
|
|
|
78
78
|
return body
|
|
79
79
|
|
|
80
|
-
def __str__(self):
|
|
81
|
-
return f'''
|
|
82
|
-
Device:
|
|
83
|
-
Name: {self.device_no},
|
|
84
|
-
Type: {hex(self.device_type) if self.device_type else None},
|
|
85
|
-
ID: {self.device_id if self.device_id else None},
|
|
86
|
-
Software: {self.software_version},
|
|
87
|
-
Hardware: {self.hardware_version},
|
|
88
|
-
Connect Time: {self.connect_time},
|
|
89
|
-
Current Time: {self.current_time},
|
|
90
|
-
Voltage: {str(self.voltage) + "mV" if self.voltage else None},
|
|
91
|
-
Battery Remain: {str(self.battery_remain)+ "%" if self.battery_remain else None},
|
|
92
|
-
Battery Total: {str(self.battery_total) + "%" if self.battery_total else None}
|
|
93
|
-
'''
|
|
94
|
-
|
|
95
80
|
|
qlsdk/rsc/device/base.py
CHANGED
|
@@ -144,14 +144,14 @@ class QLBaseDevice(IDevice):
|
|
|
144
144
|
def _produce_signal(self, body: bytes):
|
|
145
145
|
|
|
146
146
|
# 处理信号数据
|
|
147
|
-
data = self._signal_wrapper(body)
|
|
147
|
+
data = self._signal_wrapper(body)
|
|
148
148
|
# logger.debug("pkg_id: {}, eeg len: {}".format(data.pkg_id, len(data.eeg)))
|
|
149
149
|
#
|
|
150
150
|
trigger_positions = [index for index, value in enumerate(data.trigger) if value != 0]
|
|
151
151
|
if len(trigger_positions) > 0:
|
|
152
152
|
# logger.debug(f"Trigger触发点位置: {trigger_positions}, 触发点时间戳: {[data.time_stamp + int(pos * 1000 / data.sample_rate) for pos in trigger_positions]}")
|
|
153
153
|
for pos in trigger_positions:
|
|
154
|
-
self.trigger(data.trigger[pos])
|
|
154
|
+
self.trigger(trigger_info(data.trigger[pos]))
|
|
155
155
|
# 存储
|
|
156
156
|
if self.storage_enable:
|
|
157
157
|
# 确保记录线程启动
|
|
@@ -402,8 +402,8 @@ class QLBaseDevice(IDevice):
|
|
|
402
402
|
msg = StartStimulationCommand.build(self).pack()
|
|
403
403
|
logger.trace(f"start_stimulation message is {msg.hex()}")
|
|
404
404
|
self.socket.sendall(msg)
|
|
405
|
-
t = Thread(target=self._stop_stimulation_trigger, args=(self.stim_paradigm.duration,), daemon=True)
|
|
406
|
-
t.start()
|
|
405
|
+
# t = Thread(target=self._stop_stimulation_trigger, args=(self.stim_paradigm.duration,), daemon=True)
|
|
406
|
+
# t.start()
|
|
407
407
|
|
|
408
408
|
def get_stim_param(self) -> bytes:
|
|
409
409
|
return self.stim_paradigm.to_bytes()
|
|
@@ -421,7 +421,7 @@ class QLBaseDevice(IDevice):
|
|
|
421
421
|
|
|
422
422
|
def stop_stimulation(self):
|
|
423
423
|
logger.info(f"[设备-{self.device_no}]停止电刺激")
|
|
424
|
-
msg = StopStimulationCommand.pack()
|
|
424
|
+
msg = StopStimulationCommand.build(self).pack()
|
|
425
425
|
logger.trace(f"stop_stimulation message is {msg.hex()}")
|
|
426
426
|
self.socket.sendall(msg)
|
|
427
427
|
|
|
@@ -537,4 +537,15 @@ class QLBaseDevice(IDevice):
|
|
|
537
537
|
return self.device_type == other.device_type and self.device_no == other.device_no
|
|
538
538
|
|
|
539
539
|
def __hash__(self):
|
|
540
|
-
return hash((self.device_type, self.device_no))
|
|
540
|
+
return hash((self.device_type, self.device_no))
|
|
541
|
+
|
|
542
|
+
__TRIGGER_MAPPING = {
|
|
543
|
+
0x3E8: "Start of stimulation",
|
|
544
|
+
0x3E9: "End of stimulation",
|
|
545
|
+
0x3EA: "Ascending end of stimulation",
|
|
546
|
+
0x3EB: "Descending start of stimulation ",
|
|
547
|
+
0x3EC: "刺激参数有误",
|
|
548
|
+
0x3ED: "End of stimulation (by force)",
|
|
549
|
+
}
|
|
550
|
+
def trigger_info(code: int) -> str:
|
|
551
|
+
return __TRIGGER_MAPPING.get(code, "未知触发事件")
|
qlsdk/rsc/parser/base.py
CHANGED
|
@@ -131,10 +131,15 @@ class TcpMessageParser(IParser):
|
|
|
131
131
|
|
|
132
132
|
def unpack(self, packet):
|
|
133
133
|
# 提取指令码
|
|
134
|
-
cmd_code =
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
cmd_code = None
|
|
135
|
+
try:
|
|
136
|
+
cmd_code = int.from_bytes(packet[self.cmd_pos : self.cmd_pos + 2], 'little')
|
|
137
|
+
cmd_class = CommandFactory.create_command(cmd_code)
|
|
138
|
+
instance = cmd_class(self.device)
|
|
139
|
+
instance.parse_body(packet[self.header_len:-2])
|
|
140
|
+
except Exception as e:
|
|
141
|
+
logger.error(f"指令[{cmd_code}]数据包[len={len(packet)}]解析异常: {e}")
|
|
142
|
+
|
|
138
143
|
return instance
|
|
139
144
|
|
|
140
145
|
def start(self):
|
|
@@ -28,7 +28,7 @@ qlsdk/interface/parser.py,sha256=00Ds01Xp9eUPwx7okL4B1Bl0_fRbgaxfm_2GOeWoZiM,248
|
|
|
28
28
|
qlsdk/interface/stimulator.py,sha256=MJbgiI-4qTMjbdhcBAZe8zb10hV9x8yhFCPL3Iq_QyI,28
|
|
29
29
|
qlsdk/interface/store.py,sha256=694WQnnrtXThP44JkQlBXzghvqA0PwHKK3uA640aiUo,23
|
|
30
30
|
qlsdk/persist/__init__.py,sha256=b8qk1aOU6snEMCQNYDl1ijV3-2gwBmMt76fiAzNk1E8,107
|
|
31
|
-
qlsdk/persist/ars_edf.py,sha256=
|
|
31
|
+
qlsdk/persist/ars_edf.py,sha256=EI0V3kcjBduqk6UDzPR99ua_5YED-LHsC6lpKV411kc,9131
|
|
32
32
|
qlsdk/persist/edf.py,sha256=ETngb86CfkIUJYWmw86QR445MvTFC7Edk_CH9nyNgtY,7857
|
|
33
33
|
qlsdk/persist/rsc_edf.py,sha256=djR_qXScb_XOOXaoMsvnK_qO2NCPzqEeKxKJCm4xnpk,13989
|
|
34
34
|
qlsdk/persist/stream.py,sha256=TCVF1sqDrHiYBsJC27At66AaCs-_blXeXA_WXdJiIVA,5828
|
|
@@ -42,8 +42,8 @@ qlsdk/rsc/proxy.py,sha256=9CPdGNGWremwBUh4GvlXAykYB-x_BEPPLqsNvwuwIDE,2736
|
|
|
42
42
|
qlsdk/rsc/command/__init__.py,sha256=iPrPor7NwBIrkQDxz061gVbnlLYK9KE7VXy-NKJy1XQ,12277
|
|
43
43
|
qlsdk/rsc/command/message.py,sha256=nTdG-Vp4MBnltyrgedAWiKD6kzOaPrg58Z_hq6yjhys,12220
|
|
44
44
|
qlsdk/rsc/device/__init__.py,sha256=BzY9lRfssGPUlJ1ys-v3CWNgGihg7mPa2T4X0tl0Vg4,214
|
|
45
|
-
qlsdk/rsc/device/arskindling.py,sha256=
|
|
46
|
-
qlsdk/rsc/device/base.py,sha256=
|
|
45
|
+
qlsdk/rsc/device/arskindling.py,sha256=j1t-_49MNpi2cNYCWpJaBgj6s_NGVQCuMrdAB7rpPfg,3358
|
|
46
|
+
qlsdk/rsc/device/base.py,sha256=G3o9Pgvy4zoTFvh_mX1ihw0AzglgCcFAmfwAXbmIKlk,21515
|
|
47
47
|
qlsdk/rsc/device/c16_rs.py,sha256=qXt8m5vwcKQsN8JBllWnAsda5_Y6qkEhfHQQX101TMQ,5826
|
|
48
48
|
qlsdk/rsc/device/c256_rs.py,sha256=7vAEzf_ggNcwrXKmcZMylnKzLFD5ZqtAIfkkI3lQ1iI,1682
|
|
49
49
|
qlsdk/rsc/device/c64_rs.py,sha256=x8wHdwATKDU34j9vXNEXsNSJg23RAWmAKL8pgIGamG8,1091
|
|
@@ -61,7 +61,7 @@ qlsdk/rsc/network/__init__.py,sha256=PfYiqXS2pZV__uegQ1TjaeYhY1pefZ_shwE_X5HNVbs
|
|
|
61
61
|
qlsdk/rsc/network/discover.py,sha256=GRXP0WxxIorDZWXq1X5CPAV60raSRvNiVwMQE8647XA,3044
|
|
62
62
|
qlsdk/rsc/parser/__init__.py,sha256=cVKk06bRYOnwE3XMoksGlatKJSaZE1GVrYypQm-9aro,69
|
|
63
63
|
qlsdk/rsc/parser/base-new.py,sha256=cAOy1V_1fAJyGq7bm7uLxpW41DbkllWOprnfWKpjtsQ,5116
|
|
64
|
-
qlsdk/rsc/parser/base.py,sha256=
|
|
64
|
+
qlsdk/rsc/parser/base.py,sha256=EelI7jYLQFJ-frN_X8X0bc7rWSe-pJWCCylSvJdr0TM,5897
|
|
65
65
|
qlsdk/rsc/parser/rsc.py,sha256=RuBqsg5KZNio7mTyM14svQEeU0_0CLhnRmfbP0NBM2o,4724
|
|
66
66
|
qlsdk/sdk/__init__.py,sha256=v9LKP-5qXCqnAsCkiRE9LDb5Tagvl_Qd_fqrw7y9yd4,68
|
|
67
67
|
qlsdk/sdk/ar4sdk.py,sha256=tugH3UUeNebdka78AzLyrtAXbYQQE3iFJ227zUit6tY,27261
|
|
@@ -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.0a9.dist-info/METADATA,sha256=As8KCL909tZ_a7nQ2H7lqircEwZx_Jxah768hCKkIWQ,1882
|
|
74
|
+
qlsdk2-0.6.0a9.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
|
|
75
|
+
qlsdk2-0.6.0a9.dist-info/top_level.txt,sha256=2CHzn0SY-NIBVyBl07Suh-Eo8oBAQfyNPtqQ_aDatBg,6
|
|
76
|
+
qlsdk2-0.6.0a9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|