qlsdk2 0.6.0a10__py3-none-any.whl → 0.6.0a11__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.
@@ -1,4 +1,5 @@
1
1
  from multiprocessing import Queue
2
+ from typing import Literal
2
3
  from loguru import logger
3
4
  from qlsdk.persist import ARSKindlingEDFHandler
4
5
  from qlsdk.rsc.interface import IDevice
@@ -180,6 +181,20 @@ class ARSKindling(QLBaseDevice):
180
181
 
181
182
  return list(set(arr))
182
183
 
184
+ def _produce_impedance(self, body: bytes):
185
+ # 分发阻抗数据包给订阅者
186
+ if len(self._impedance_consumer) > 0:
187
+ packet = ImpedancePacket.transfer(body)
188
+ real_data = self.__impedance_transfer(packet)
189
+ for topic, q in self._impedance_consumer.items():
190
+ try:
191
+ # 队列满了就丢弃最早的数据
192
+ if q.full():
193
+ q.get()
194
+ q.put(real_data, timeout=1)
195
+ except Exception as e:
196
+ logger.error(f"impedance data put to queue exception: {str(e)}")
197
+
183
198
  def _produce_signal(self, body: bytes):
184
199
 
185
200
  # 处理信号数据
@@ -218,7 +233,24 @@ class ARSKindling(QLBaseDevice):
218
233
  if q.full():
219
234
  q.get()
220
235
 
221
- q.put(real_data)
236
+ q.put(real_data)
237
+
238
+ # 信号数据转换
239
+ def __impedance_transfer(self, packet: ImpedancePacket):
240
+ channels = {}
241
+ impedance = {}
242
+ #按分区拆分数据格式
243
+ for k in self._channel_spilt.keys():
244
+ logger.trace(f'分区{k}的阻抗数据')
245
+ c, d, p = self.__packet_filter(packet, self._channel_spilt[k], type='impedance')
246
+ if c is not None:
247
+ channels[k] = c
248
+ impedance[k] = d
249
+ packet.channels = channels
250
+ packet.impedance = impedance
251
+
252
+ return packet
253
+
222
254
  # 信号数据转换
223
255
  def __signal_transfer(self, packet: RscPacket):
224
256
  channels = {}
@@ -241,11 +273,11 @@ class ARSKindling(QLBaseDevice):
241
273
 
242
274
  return packet
243
275
 
244
- def __packet_filter(self, packet: RscPacket, channel_filter=None):
276
+ def __packet_filter(self, packet, channel_filter=None, type:Literal['signal','impedance']='signal'):
245
277
  # 参数检查
246
278
  if packet is None or channel_filter is None:
247
279
  logger.warning("空数据,忽略")
248
- return None
280
+ return None, None, None
249
281
 
250
282
  channel_pos = get_sorted_indices_basic(packet.channels, channel_filter)
251
283
 
@@ -257,6 +289,13 @@ class ARSKindling(QLBaseDevice):
257
289
 
258
290
  # 保留本分区的通道和数据
259
291
  channels = [packet.channels[p] for p in channel_pos]
292
+
293
+ #阻抗数据
294
+ if type == 'impedance':
295
+ impedance = [packet.impedance[p] for p in channel_pos]
296
+ return [self._channel_mapping.get(channel_id, []) for channel_id in channels], impedance, None
297
+
298
+ # 信号数据
260
299
  eeg = [packet.eeg[p] for p in channel_pos]
261
300
  eeg_p = None
262
301
  if packet.eeg_p is not None:
qlsdk/rsc/device/base.py CHANGED
@@ -137,6 +137,9 @@ class QLBaseDevice(IDevice):
137
137
  if len(self._impedance_consumer) > 0:
138
138
  for topic, q in self._impedance_consumer.items():
139
139
  try:
140
+ # 队列满了就丢弃最早的数据
141
+ if q.full():
142
+ q.get()
140
143
  q.put(packet, timeout=1)
141
144
  except Exception as e:
142
145
  logger.error(f"impedance data put to queue exception: {str(e)}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qlsdk2
3
- Version: 0.6.0a10
3
+ Version: 0.6.0a11
4
4
  Summary: SDK for quanlan device
5
5
  Home-page: https://github.com/hehuajun/qlsdk
6
6
  Author: hehuajun
@@ -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=C67dDTFmytTI2tAAaWxwdXfQ-S1IHS2lIOH0B4UQLQA,9854
46
- qlsdk/rsc/device/base.py,sha256=GZx09zp-T61VwRIH6zEj3LMh-YNupxu5O8tMEBHRzOQ,21533
45
+ qlsdk/rsc/device/arskindling.py,sha256=IVYgCdePI1rnalhZmTWp95eyS05L_xbSo6EhvBTuIvA,11465
46
+ qlsdk/rsc/device/base.py,sha256=isdu4NKQpixWtnsh0t4U7Uecw9QQITmaGyZpKO04aL0,21661
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
@@ -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.0a10.dist-info/METADATA,sha256=qhpDHdNop673s66JoRwTli4Gyaago7OzeNzVQT4CZ1I,1883
74
- qlsdk2-0.6.0a10.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
75
- qlsdk2-0.6.0a10.dist-info/top_level.txt,sha256=2CHzn0SY-NIBVyBl07Suh-Eo8oBAQfyNPtqQ_aDatBg,6
76
- qlsdk2-0.6.0a10.dist-info/RECORD,,
73
+ qlsdk2-0.6.0a11.dist-info/METADATA,sha256=0LHCnkOCM5qaDZAoLglt-mIBltLnZBiaRrta8L9JbHE,1883
74
+ qlsdk2-0.6.0a11.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
75
+ qlsdk2-0.6.0a11.dist-info/top_level.txt,sha256=2CHzn0SY-NIBVyBl07Suh-Eo8oBAQfyNPtqQ_aDatBg,6
76
+ qlsdk2-0.6.0a11.dist-info/RECORD,,