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.
@@ -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
- def transfer(self, body:bytes) -> 'ImpedancePacket':
79
- self.time_stamp = int.from_bytes(body[0:8], 'little')
80
- self.result = body[8]
81
- self.pkg_id = int.from_bytes(body[9: 13], 'little')
82
- self.channels = to_channels(body[13: 45])
83
-
84
- logger.trace(f"impedance: {self}")
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
+
@@ -297,8 +297,7 @@ class ImpedanceDataCommand(DeviceCommand):
297
297
  cmd_desc = "阻抗数据"
298
298
 
299
299
  def parse_body(self, body: bytes):
300
- # logger.info(f"Received impedance data: {body.hex()}")
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().transfer(body)
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=1000)
449
+ q = Queue(maxsize=1024 * 1024)
450
450
 
451
451
  # 订阅生理电信号数据
452
452
  if type == "signal":
@@ -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
 
@@ -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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qlsdk2
3
- Version: 0.6.0a3
3
+ Version: 0.6.0a4
4
4
  Summary: SDK for quanlan device
5
5
  Home-page: https://github.com/hehuajun/qlsdk
6
6
  Author: hehuajun
@@ -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=b0EFz0ND7eXNXKQvxjsoaH-rylws4iEuiKBRZwvPKyU,6620
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=27MhUuyxUfvatezdjOCYgt9rooHH5HZATRsZLrDli9U,12298
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=_brT05Ef-gLUdEcD32D9M08AvWqBB3ontCnlSFLmZmQ,19963
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=0hRS_sQaRI0AmJFFVpfewrq9zipFBRP7d1UPo60dAvo,13615
49
- qlsdk/rsc/device/c64_rs.py,sha256=cZIioIRGgd4Ub0ieho4_XujBNo8AQgJEjXcqgcEkyFQ,13644
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.0a3.dist-info/METADATA,sha256=dGKUPBYlPSKsgpSTADHDBNfMSQrCsvqx8xpdpgi3_Ds,1882
74
- qlsdk2-0.6.0a3.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
75
- qlsdk2-0.6.0a3.dist-info/top_level.txt,sha256=2CHzn0SY-NIBVyBl07Suh-Eo8oBAQfyNPtqQ_aDatBg,6
76
- qlsdk2-0.6.0a3.dist-info/RECORD,,
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,,