@neurodevs/node-lsl 23.1.1 → 23.1.2

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.
@@ -4,16 +4,14 @@ import AbstractPackageTest from '../AbstractPackageTest.js';
4
4
  export default class LslStreamInletTest extends AbstractPackageTest {
5
5
  private static instance;
6
6
  private static callsToOnData;
7
- private static readonly sampleBufferPtr;
8
- private static readonly timestampBufferPtr;
9
- private static readonly errorCodePtr;
10
7
  protected static beforeAll(): Promise<void>;
11
8
  protected static beforeEach(): Promise<void>;
12
9
  protected static createsInstance(): Promise<void>;
13
10
  protected static callsBindingsToCreateStreamInlet(): Promise<void>;
14
11
  protected static flushInletCallsLslBinding(): Promise<void>;
15
12
  protected static destroyCallsLslBinding(): Promise<void>;
16
- protected static destroyFreesAllPointers(): Promise<void>;
13
+ protected static destroyDoesNotDestroyInletThatWasNeverCreated(): Promise<void>;
14
+ protected static destroyingTwiceDestroysInletOnce(): Promise<void>;
17
15
  protected static destroyCallsStopIfIsRunning(): Promise<void>;
18
16
  protected static destroyDoesNotCallStopIfNotRunning(): Promise<void>;
19
17
  protected static exposesIsRunningFieldThatIsFalseAtFirst(): Promise<void>;
@@ -29,7 +27,8 @@ export default class LslStreamInletTest extends AbstractPackageTest {
29
27
  protected static callsOnDataForChunkSizeOne(): Promise<void>;
30
28
  protected static callsPullSampleIfChunkSizeIsOne(): Promise<void>;
31
29
  protected static callsPullChunkIfChunkSizeIsNotOne(): Promise<void>;
32
- protected static pushSampleHandlesErrorCode(): Promise<void>;
30
+ protected static passesEachPulledSampleToOnData(): Promise<void>;
31
+ protected static passesEachPulledChunkToOnData(): Promise<void>;
33
32
  protected static waitsBetweenPullsIfPassedOption(): Promise<void>;
34
33
  protected static waitsOneMillisecondBetweenPullsIfNotPassed(): Promise<void>;
35
34
  protected static passesTimeoutMsOptionToPullSample(): Promise<void>;
@@ -6,24 +6,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { FakeLiblsl } from '@neurodevs/ndx-native';
8
8
  import { test, assert } from '@neurodevs/node-tdd';
9
- import { createPointer, DataType, PointerType, unwrapPointer, } from 'ffi-rs';
10
9
  import LslStreamInlet from '../../impl/LslStreamInlet.js';
11
10
  import AbstractPackageTest from '../AbstractPackageTest.js';
12
11
  export default class LslStreamInletTest extends AbstractPackageTest {
13
12
  static instance;
14
13
  static callsToOnData;
15
- static sampleBufferPtr = unwrapPointer(createPointer({
16
- paramsType: [DataType.U8Array],
17
- paramsValue: [new Float32Array(this.channelCount * this.chunkSize)],
18
- }))[0];
19
- static timestampBufferPtr = unwrapPointer(createPointer({
20
- paramsType: [DataType.U8Array],
21
- paramsValue: [new Float64Array(this.chunkSize)],
22
- }))[0];
23
- static errorCodePtr = unwrapPointer(createPointer({
24
- paramsType: [DataType.U8Array],
25
- paramsValue: [new Int32Array(1)],
26
- }))[0];
27
14
  static async beforeAll() {
28
15
  assert.isEqual(LslStreamInlet.waitAfterOpenStreamMs, 100, 'Default waitAfterOpenStreamMs should be 100!');
29
16
  }
@@ -34,7 +21,6 @@ export default class LslStreamInletTest extends AbstractPackageTest {
34
21
  this.callsToOnData = [];
35
22
  LslStreamInlet.waitAfterOpenStreamMs = 0;
36
23
  LslStreamInlet.lsl = this.fakeLiblsl;
37
- LslStreamInlet.freePointer = () => { };
38
24
  this.instance = await this.LslStreamInlet();
39
25
  }
40
26
  static async createsInstance() {
@@ -46,6 +32,7 @@ export default class LslStreamInletTest extends AbstractPackageTest {
46
32
  assert.isEqualDeep(this.fakeLiblsl.lastCreateInletOptions, {
47
33
  infoHandle: this.inletHandle,
48
34
  maxBufferedMs: this.maxBufferedMs,
35
+ chunkSize: this.chunkSize,
49
36
  }, 'Should have called createInlet!');
50
37
  this.stopPulling();
51
38
  }
@@ -54,25 +41,21 @@ export default class LslStreamInletTest extends AbstractPackageTest {
54
41
  assert.isEqualDeep(this.fakeLiblsl.lastFlushInletOptions, { inletHandle: this.inletHandle }, 'Should have called flushInlet!');
55
42
  }
56
43
  static async destroyCallsLslBinding() {
57
- await this.startPullingThenDestroy();
58
- assert.isEqualDeep(this.fakeLiblsl.lastDestroyInletOptions, { inletHandle: this.inletHandle }, 'Did not destroy inlet!');
44
+ await this.startPulling();
45
+ const inletHandle = this.inletHandle;
46
+ this.destroy();
47
+ assert.isTrue(inletHandle !== undefined &&
48
+ this.fakeLiblsl.lastDestroyInletOptions?.inletHandle ===
49
+ inletHandle, 'Did not destroy inlet!');
59
50
  }
60
- static async destroyFreesAllPointers() {
61
- let calls = [];
62
- LslStreamInlet.freePointer = (params) => {
63
- calls.push(params);
64
- };
51
+ static async destroyDoesNotDestroyInletThatWasNeverCreated() {
52
+ this.destroy();
53
+ assert.isEqual(this.fakeLiblsl.destroyInletHitCount, 0, 'Should not have destroyed an inlet that was never created!');
54
+ }
55
+ static async destroyingTwiceDestroysInletOnce() {
65
56
  await this.startPullingThenDestroy();
66
- const { paramsType, pointerType } = calls[0];
67
- assert.isEqualDeep({ paramsType, pointerType }, {
68
- paramsType: [
69
- DataType.U8Array,
70
- DataType.U8Array,
71
- DataType.U8Array,
72
- DataType.U8Array,
73
- ],
74
- pointerType: PointerType.CPointer,
75
- }, 'Destroy did not free all pointers!');
57
+ this.destroy();
58
+ assert.isEqual(this.fakeLiblsl.destroyInletHitCount, 1, 'Should have destroyed inlet only once!');
76
59
  }
77
60
  static async destroyCallsStopIfIsRunning() {
78
61
  await this.startPulling();
@@ -107,7 +90,6 @@ export default class LslStreamInletTest extends AbstractPackageTest {
107
90
  assert.isEqualDeep(this.fakeLiblsl.lastOpenStreamOptions, {
108
91
  inletHandle: this.inletHandle,
109
92
  timeoutMs: aboutOneYearInMs,
110
- errorCodePtr: this.errorCodePtr,
111
93
  }, 'Did not open inlet stream!');
112
94
  this.stopPulling();
113
95
  }
@@ -120,7 +102,6 @@ export default class LslStreamInletTest extends AbstractPackageTest {
120
102
  assert.isEqualDeep(this.fakeLiblsl.lastOpenStreamOptions, {
121
103
  inletHandle: instance['inletHandle'],
122
104
  timeoutMs: openStreamTimeoutMs,
123
- errorCodePtr: this.errorCodePtr,
124
105
  }, 'Did not open inlet stream with passed timeout!');
125
106
  instance.stopPulling();
126
107
  }
@@ -160,33 +141,25 @@ export default class LslStreamInletTest extends AbstractPackageTest {
160
141
  }
161
142
  static async callsPullSampleIfChunkSizeIsOne() {
162
143
  await this.runChunkSizeOne();
163
- assert.isEqualDeep(this.fakeLiblsl.lastPullSampleOptions, {
164
- inletHandle: this.inletHandle,
165
- sampleBufferPtr: this.sampleBufferPtr,
166
- sampleBufferElements: this.channelCount,
167
- timeoutMs: 0,
168
- errorCodePtr: this.errorCodePtr,
169
- }, 'Should have called pullSample!');
144
+ assert.isEqualDeep(this.fakeLiblsl.lastPullSampleOptions, { inletHandle: this.inletHandle, timeoutMs: 0 }, 'Should have called pullSample!');
170
145
  }
171
146
  static async callsPullChunkIfChunkSizeIsNotOne() {
172
147
  await this.startThenStop();
173
- assert.isEqualDeep(this.fakeLiblsl.lastPullChunkOptions, {
174
- inletHandle: this.inletHandle,
175
- sampleBufferPtr: this.sampleBufferPtr,
176
- timestampBufferPtr: this.timestampBufferPtr,
177
- sampleBufferElements: this.chunkSize * this.channelCount,
178
- timestampBufferElements: this.chunkSize,
179
- timeoutMs: 0,
180
- errorCodePtr: this.errorCodePtr,
181
- }, 'Should have called pullChunk!');
182
- }
183
- static async pushSampleHandlesErrorCode() {
184
- let passedErrorCode;
185
- LslStreamInlet.handleLslError = (errorCode) => {
186
- passedErrorCode = errorCode;
187
- };
148
+ assert.isEqualDeep(this.fakeLiblsl.lastPullChunkOptions, { inletHandle: this.inletHandle, timeoutMs: 0 }, 'Should have called pullChunk!');
149
+ }
150
+ static async passesEachPulledSampleToOnData() {
151
+ await this.runChunkSizeOne();
152
+ assert.isEqualDeep(this.callsToOnData, FakeLiblsl.fakeSamples.map((sample) => ({
153
+ samples: Array.from(sample),
154
+ timestamps: [FakeLiblsl.fakeSampleTimestampSec],
155
+ })), 'Did not pass each pulled sample to onData!');
156
+ }
157
+ static async passesEachPulledChunkToOnData() {
188
158
  await this.startThenStop();
189
- assert.isEqualDeep(passedErrorCode, FakeLiblsl.fakeErrorCode, 'Did not pass the expected error code to handleLslError!');
159
+ assert.isEqualDeep(this.callsToOnData, FakeLiblsl.fakeChunks.map((chunk, i) => ({
160
+ samples: Array.from(chunk),
161
+ timestamps: Array.from(FakeLiblsl.fakeTimestamps[i]),
162
+ })), 'Did not pass each pulled chunk to onData!');
190
163
  }
191
164
  static async waitsBetweenPullsIfPassedOption() {
192
165
  const waitBetweenPullsMs = 10;
@@ -294,7 +267,10 @@ __decorate([
294
267
  ], LslStreamInletTest, "destroyCallsLslBinding", null);
295
268
  __decorate([
296
269
  test()
297
- ], LslStreamInletTest, "destroyFreesAllPointers", null);
270
+ ], LslStreamInletTest, "destroyDoesNotDestroyInletThatWasNeverCreated", null);
271
+ __decorate([
272
+ test()
273
+ ], LslStreamInletTest, "destroyingTwiceDestroysInletOnce", null);
298
274
  __decorate([
299
275
  test()
300
276
  ], LslStreamInletTest, "destroyCallsStopIfIsRunning", null);
@@ -342,7 +318,10 @@ __decorate([
342
318
  ], LslStreamInletTest, "callsPullChunkIfChunkSizeIsNotOne", null);
343
319
  __decorate([
344
320
  test()
345
- ], LslStreamInletTest, "pushSampleHandlesErrorCode", null);
321
+ ], LslStreamInletTest, "passesEachPulledSampleToOnData", null);
322
+ __decorate([
323
+ test()
324
+ ], LslStreamInletTest, "passesEachPulledChunkToOnData", null);
346
325
  __decorate([
347
326
  test()
348
327
  ], LslStreamInletTest, "waitsBetweenPullsIfPassedOption", null);
@@ -1 +1 @@
1
- {"version":3,"file":"LslStreamInlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslStreamInlet.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LslStreamInlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslStreamInlet.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,7 @@
1
- import { handleLslError } from '@neurodevs/ndx-native';
2
- import { freePointer } from 'ffi-rs';
3
1
  export default class LslStreamInlet implements LslInlet {
4
2
  static Class?: LslInletConstructor;
5
3
  static waitAfterOpenStreamMs: number;
6
4
  static lsl: import("@neurodevs/ndx-native").Liblsl;
7
- static handleLslError: typeof handleLslError;
8
- static freePointer: typeof freePointer;
9
5
  isRunning: boolean;
10
6
  private sourceId;
11
7
  private chunkSize;
@@ -16,26 +12,10 @@ export default class LslStreamInlet implements LslInlet {
16
12
  private flushInletOnStop;
17
13
  private onData;
18
14
  private infoHandle;
19
- private inletHandle;
20
- private channelCount;
15
+ private inletHandle?;
21
16
  private pullMethod;
22
- private sampleBuffer;
23
- private sampleBufferRef;
24
- private sampleBufferPtr;
25
- private timestampBuffer;
26
- private timestampBufferRef;
27
- private timestampBufferPtr;
28
- private pullErrorBuffer;
29
- private pullErrorBufferRef;
30
- private pullErrorBufferPtr;
31
- private openStreamErrorBuffer;
32
- private openStreamErrorBufferRef;
33
- private openStreamErrorBufferPtr;
34
17
  private readonly sixMinutesInMs;
35
18
  private readonly aboutOneYearInMs;
36
- private readonly bytesPerFloat;
37
- private readonly bytesPerDouble;
38
- private readonly bytesPerI32;
39
19
  protected constructor(options: LslInletOptions, onData: OnDataCallback);
40
20
  static Create(options: LslInletOptions, onData: OnDataCallback): Promise<LslInlet>;
41
21
  startPulling(): Promise<void>;
@@ -45,33 +25,19 @@ export default class LslStreamInlet implements LslInlet {
45
25
  private throwNoStreamFound;
46
26
  private warnMultipleStreamsFound;
47
27
  private doCreateInlet;
48
- private getChannelCount;
49
- private allocateWritableBuffers;
50
- private allocateDataBuffer;
51
- private allocateTimestampBuffer;
52
- private allocatePullErrorBuffer;
53
- private allocateOpenStreamErrorBuffer;
54
- private setPullMethod;
55
- private pullSample;
56
- private doPullsample;
57
- private readSamplesFromBuffer;
58
- private pullChunk;
59
- private doPullChunk;
60
- private readTimestampsFromBuffer;
61
28
  private openStream;
62
29
  private pullLoop;
63
30
  private pullDataOnce;
64
- private handleLslErrorIfPresent;
31
+ private pullSample;
32
+ private pullChunk;
33
+ private get pullOptions();
65
34
  private waitBetweenPulls;
66
35
  flushInlet(): void;
67
36
  stopPulling(): void;
68
37
  private closeStream;
69
38
  destroy(): void;
70
- private doDestroyInlet;
71
- private freeNativePointers;
39
+ private destroyInletIfCreated;
72
40
  private get lsl();
73
- private get handleLslError();
74
- private get freePointer();
75
41
  }
76
42
  export interface LslInlet {
77
43
  startPulling(): Promise<void>;
@@ -90,4 +56,8 @@ export interface LslInletOptions {
90
56
  waitBetweenPullsMs?: number;
91
57
  flushInletOnStop?: boolean;
92
58
  }
59
+ export interface PulledData {
60
+ samples: number[];
61
+ timestamps: number[];
62
+ }
93
63
  export type OnDataCallback = (samples: number[], timestamps: number[]) => void;
@@ -1,11 +1,8 @@
1
- import { handleLslError, LiblslAdapter, } from '@neurodevs/ndx-native';
2
- import { unwrapPointer, createPointer, DataType, freePointer, PointerType, } from 'ffi-rs';
1
+ import { LiblslAdapter } from '@neurodevs/ndx-native';
3
2
  export default class LslStreamInlet {
4
3
  static Class;
5
4
  static waitAfterOpenStreamMs = 100;
6
5
  static lsl = LiblslAdapter.getInstance();
7
- static handleLslError = handleLslError;
8
- static freePointer = freePointer;
9
6
  isRunning = false;
10
7
  sourceId;
11
8
  chunkSize;
@@ -17,25 +14,9 @@ export default class LslStreamInlet {
17
14
  onData;
18
15
  infoHandle;
19
16
  inletHandle;
20
- channelCount;
21
17
  pullMethod;
22
- sampleBuffer;
23
- sampleBufferRef;
24
- sampleBufferPtr;
25
- timestampBuffer;
26
- timestampBufferRef;
27
- timestampBufferPtr;
28
- pullErrorBuffer;
29
- pullErrorBufferRef;
30
- pullErrorBufferPtr;
31
- openStreamErrorBuffer;
32
- openStreamErrorBufferRef;
33
- openStreamErrorBufferPtr;
34
18
  sixMinutesInMs = 360 * 1000;
35
19
  aboutOneYearInMs = 32000000 * 1000;
36
- bytesPerFloat = 4;
37
- bytesPerDouble = 8;
38
- bytesPerI32 = 4;
39
20
  constructor(options, onData) {
40
21
  const { sourceId, chunkSize, maxBufferedMs, pullTimeoutMs, openStreamTimeoutMs, waitBetweenPullsMs, flushInletOnStop, } = options ?? {};
41
22
  this.sourceId = sourceId;
@@ -46,6 +27,7 @@ export default class LslStreamInlet {
46
27
  this.waitBetweenPullsMs = waitBetweenPullsMs ?? 1;
47
28
  this.flushInletOnStop = flushInletOnStop ?? true;
48
29
  this.onData = onData;
30
+ this.pullMethod = (chunkSize === 1 ? this.pullSample : this.pullChunk).bind(this);
49
31
  }
50
32
  static async Create(options, onData) {
51
33
  return new (this.Class ?? this)(options, onData);
@@ -62,9 +44,6 @@ export default class LslStreamInlet {
62
44
  async createInlet() {
63
45
  this.infoHandle = this.resolveInfoHandle();
64
46
  this.inletHandle = this.doCreateInlet();
65
- this.channelCount = this.getChannelCount();
66
- this.allocateWritableBuffers();
67
- this.setPullMethod();
68
47
  this.openStream();
69
48
  }
70
49
  resolveInfoHandle() {
@@ -93,106 +72,13 @@ export default class LslStreamInlet {
93
72
  return this.lsl.createInlet({
94
73
  infoHandle: this.infoHandle,
95
74
  maxBufferedMs: this.maxBufferedMs,
75
+ chunkSize: this.chunkSize,
96
76
  });
97
77
  }
98
- getChannelCount() {
99
- return this.lsl.getChannelCount({ infoHandle: this.infoHandle });
100
- }
101
- allocateWritableBuffers() {
102
- this.allocateDataBuffer();
103
- this.allocateTimestampBuffer();
104
- this.allocatePullErrorBuffer();
105
- this.allocateOpenStreamErrorBuffer();
106
- }
107
- allocateDataBuffer() {
108
- this.sampleBuffer = Buffer.alloc(this.channelCount * this.chunkSize * this.bytesPerFloat);
109
- this.sampleBufferRef = createPointer({
110
- paramsType: [DataType.U8Array],
111
- paramsValue: [this.sampleBuffer],
112
- });
113
- this.sampleBufferPtr = unwrapPointer(this.sampleBufferRef)[0];
114
- }
115
- allocateTimestampBuffer() {
116
- this.timestampBuffer = Buffer.alloc(this.chunkSize * this.bytesPerDouble);
117
- this.timestampBufferRef = createPointer({
118
- paramsType: [DataType.U8Array],
119
- paramsValue: [this.timestampBuffer],
120
- });
121
- this.timestampBufferPtr = unwrapPointer(this.timestampBufferRef)[0];
122
- }
123
- allocatePullErrorBuffer() {
124
- this.pullErrorBuffer = Buffer.alloc(this.bytesPerI32);
125
- this.pullErrorBufferRef = createPointer({
126
- paramsType: [DataType.U8Array],
127
- paramsValue: [this.pullErrorBuffer],
128
- });
129
- this.pullErrorBufferPtr = unwrapPointer(this.pullErrorBufferRef)[0];
130
- }
131
- allocateOpenStreamErrorBuffer() {
132
- this.openStreamErrorBuffer = Buffer.alloc(this.bytesPerI32);
133
- this.openStreamErrorBufferRef = createPointer({
134
- paramsType: [DataType.U8Array],
135
- paramsValue: [this.openStreamErrorBuffer],
136
- });
137
- this.openStreamErrorBufferPtr = unwrapPointer(this.openStreamErrorBufferRef)[0];
138
- }
139
- setPullMethod() {
140
- this.pullMethod =
141
- this.chunkSize === 1 ? this.pullSample : this.pullChunk;
142
- }
143
- pullSample = () => {
144
- const timestampSec = this.doPullsample();
145
- if (timestampSec > 0) {
146
- return {
147
- samples: this.readSamplesFromBuffer(),
148
- timestamps: [timestampSec],
149
- };
150
- }
151
- return { samples: undefined, timestamps: undefined };
152
- };
153
- doPullsample() {
154
- return this.lsl.pullSample({
155
- inletHandle: this.inletHandle,
156
- sampleBufferPtr: this.sampleBufferPtr,
157
- sampleBufferElements: this.channelCount,
158
- timeoutMs: this.pullTimeoutMs,
159
- errorCodePtr: this.pullErrorBufferPtr,
160
- });
161
- }
162
- readSamplesFromBuffer() {
163
- const floats = new Float32Array(this.sampleBuffer.buffer, this.sampleBuffer.byteOffset, this.chunkSize * this.channelCount);
164
- return Array.from(floats);
165
- }
166
- pullChunk = () => {
167
- const firstTimestampSec = this.doPullChunk();
168
- if (firstTimestampSec > 0) {
169
- return {
170
- samples: this.readSamplesFromBuffer(),
171
- timestamps: this.readTimestampsFromBuffer(),
172
- };
173
- }
174
- return { samples: undefined, timestamps: undefined };
175
- };
176
- doPullChunk() {
177
- return this.lsl.pullChunk({
178
- inletHandle: this.inletHandle,
179
- sampleBufferPtr: this.sampleBufferPtr,
180
- sampleBufferElements: this.chunkSize * this.channelCount,
181
- timestampBufferPtr: this.timestampBufferPtr,
182
- timestampBufferElements: this.chunkSize,
183
- timeoutMs: this.pullTimeoutMs,
184
- errorCodePtr: this.pullErrorBufferPtr,
185
- });
186
- }
187
- readTimestampsFromBuffer() {
188
- const doubles = new Float64Array(this.timestampBuffer.buffer, this.timestampBuffer.byteOffset, this.chunkSize);
189
- return Array.from(doubles);
190
- }
191
78
  openStream() {
192
79
  this.lsl.openStream({
193
80
  inletHandle: this.inletHandle,
194
81
  timeoutMs: this.openStreamTimeoutMs,
195
- errorCodePtr: this.openStreamErrorBufferPtr,
196
82
  });
197
83
  }
198
84
  async pullLoop() {
@@ -202,15 +88,22 @@ export default class LslStreamInlet {
202
88
  }
203
89
  }
204
90
  async pullDataOnce() {
205
- const { samples, timestamps } = this.pullMethod();
206
- this.handleLslErrorIfPresent();
207
- if (samples && timestamps) {
208
- this.onData(samples, timestamps);
91
+ const pulled = this.pullMethod();
92
+ if (pulled) {
93
+ this.onData(pulled.samples, pulled.timestamps);
209
94
  }
210
95
  }
211
- handleLslErrorIfPresent() {
212
- const errorCode = this.pullErrorBuffer.readInt32LE();
213
- this.handleLslError(errorCode);
96
+ pullSample() {
97
+ return this.lsl.pullSample(this.pullOptions);
98
+ }
99
+ pullChunk() {
100
+ return this.lsl.pullChunk(this.pullOptions);
101
+ }
102
+ get pullOptions() {
103
+ return {
104
+ inletHandle: this.inletHandle,
105
+ timeoutMs: this.pullTimeoutMs,
106
+ };
214
107
  }
215
108
  async waitBetweenPulls() {
216
109
  await new Promise((r) => setTimeout(r, this.waitBetweenPullsMs));
@@ -232,37 +125,16 @@ export default class LslStreamInlet {
232
125
  if (this.isRunning) {
233
126
  this.stopPulling();
234
127
  }
235
- this.doDestroyInlet();
236
- this.freeNativePointers();
237
- }
238
- doDestroyInlet() {
239
- this.lsl.destroyInlet({ inletHandle: this.inletHandle });
128
+ this.destroyInletIfCreated();
240
129
  }
241
- freeNativePointers() {
242
- this.freePointer({
243
- paramsType: [
244
- DataType.U8Array,
245
- DataType.U8Array,
246
- DataType.U8Array,
247
- DataType.U8Array,
248
- ],
249
- paramsValue: [
250
- this.openStreamErrorBufferPtr,
251
- this.sampleBufferPtr,
252
- this.timestampBufferPtr,
253
- this.pullErrorBufferPtr,
254
- ],
255
- pointerType: PointerType.CPointer,
256
- });
130
+ destroyInletIfCreated() {
131
+ if (this.inletHandle) {
132
+ this.lsl.destroyInlet({ inletHandle: this.inletHandle });
133
+ delete this.inletHandle;
134
+ }
257
135
  }
258
136
  get lsl() {
259
137
  return LslStreamInlet.lsl;
260
138
  }
261
- get handleLslError() {
262
- return LslStreamInlet.handleLslError;
263
- }
264
- get freePointer() {
265
- return LslStreamInlet.freePointer;
266
- }
267
139
  }
268
140
  //# sourceMappingURL=LslStreamInlet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LslStreamInlet.js","sourceRoot":"","sources":["../../src/impl/LslStreamInlet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LslStreamInlet.js","sourceRoot":"","sources":["../../src/impl/LslStreamInlet.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@ export default class WindowedClockRegressor implements ClockRegressor {
6
6
  private readonly history;
7
7
  private slope;
8
8
  protected constructor(nominalHz: number, options?: WindowedClockRegressorOptions);
9
- static Create(nominalHz: number, options?: WindowedClockRegressorOptions): WindowedClockRegressor | ClockRegressor;
10
- deriveTimestamps(deviceTime: number, earliestLslTime: number, chunkSize: number): any[];
9
+ static Create(nominalHz: number, options?: WindowedClockRegressorOptions): ClockRegressor;
10
+ deriveTimestamps(deviceTime: number, earliestLslTime: number, chunkSize: number): number[];
11
11
  private anchorTimeFor;
12
12
  private throwIfDeviceTimeDoesNotIncrease;
13
13
  private pruneHistoryOutsideWindow;
@@ -1 +1 @@
1
- {"version":3,"file":"WindowedClockRegressor.js","sourceRoot":"","sources":["../../../src/impl/clocks/WindowedClockRegressor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WindowedClockRegressor.js","sourceRoot":"","sources":["../../../src/impl/clocks/WindowedClockRegressor.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export default class BleGattController implements BleGatt {
11
11
  private onConnected?;
12
12
  private readonly ndx;
13
13
  protected constructor(options: BleGattOptions);
14
- static Create(options: BleGattOptions): BleGattController | BleGatt;
14
+ static Create(options: BleGattOptions): BleGatt;
15
15
  connect(): Promise<void>;
16
16
  private discoverUuid;
17
17
  private waitForDiscoveredUuid;
@@ -29,8 +29,8 @@ export default class BleGattController implements BleGatt {
29
29
  private requireUuid;
30
30
  }
31
31
  export interface BleGatt {
32
- uuid: string;
33
- name: string;
32
+ readonly uuid: string;
33
+ readonly name: string;
34
34
  connect(): Promise<void>;
35
35
  subscribeCharacteristics(charCallbacks: CharacteristicCallbacks): Promise<void>;
36
36
  writeCharacteristic(charUuid: CharacteristicUuid, value: string): Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/node-lsl",
3
- "version": "23.1.1",
3
+ "version": "23.1.2",
4
4
  "description": "Lab Streaming Layer (LSL) bindings for Node",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -42,12 +42,11 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@neurodevs/generate-id": "^1.1.3",
45
- "@neurodevs/ndx-native": "^9.0.1",
46
- "ffi-rs": "^1.3.1",
45
+ "@neurodevs/ndx-native": "^10.0.0",
47
46
  "ws": "^8.18.3"
48
47
  },
49
48
  "devDependencies": {
50
- "@neurodevs/eslint-config-ndx": "2.0.0",
49
+ "@neurodevs/eslint-config-ndx": "2.0.3",
51
50
  "@neurodevs/node-tdd": "^3.0.3",
52
51
  "@neurodevs/prettier-config-ndx": "^1.0.2",
53
52
  "@types/ws": "^8.18.1",
@@ -1,13 +1,5 @@
1
1
  import { FakeLiblsl } from '@neurodevs/ndx-native'
2
2
  import { test, assert } from '@neurodevs/node-tdd'
3
- import {
4
- createPointer,
5
- DataType,
6
- FieldType,
7
- JsExternal,
8
- PointerType,
9
- unwrapPointer,
10
- } from 'ffi-rs'
11
3
 
12
4
  import LslStreamInlet, { LslInletOptions } from '../../impl/LslStreamInlet.js'
13
5
  import SpyLslInlet from '../../testDoubles/LslInlet/SpyLslInlet.js'
@@ -21,27 +13,6 @@ export default class LslStreamInletTest extends AbstractPackageTest {
21
13
  timestamps: number[]
22
14
  }[]
23
15
 
24
- private static readonly sampleBufferPtr = unwrapPointer(
25
- createPointer({
26
- paramsType: [DataType.U8Array],
27
- paramsValue: [new Float32Array(this.channelCount * this.chunkSize)],
28
- })
29
- )[0]
30
-
31
- private static readonly timestampBufferPtr = unwrapPointer(
32
- createPointer({
33
- paramsType: [DataType.U8Array],
34
- paramsValue: [new Float64Array(this.chunkSize)],
35
- })
36
- )[0]
37
-
38
- private static readonly errorCodePtr = unwrapPointer(
39
- createPointer({
40
- paramsType: [DataType.U8Array],
41
- paramsValue: [new Int32Array(1)],
42
- })
43
- )[0]
44
-
45
16
  protected static async beforeAll() {
46
17
  assert.isEqual(
47
18
  LslStreamInlet.waitAfterOpenStreamMs,
@@ -60,7 +31,6 @@ export default class LslStreamInletTest extends AbstractPackageTest {
60
31
 
61
32
  LslStreamInlet.waitAfterOpenStreamMs = 0
62
33
  LslStreamInlet.lsl = this.fakeLiblsl
63
- LslStreamInlet.freePointer = () => {}
64
34
 
65
35
  this.instance = await this.LslStreamInlet()
66
36
  }
@@ -81,6 +51,7 @@ export default class LslStreamInletTest extends AbstractPackageTest {
81
51
  {
82
52
  infoHandle: this.inletHandle,
83
53
  maxBufferedMs: this.maxBufferedMs,
54
+ chunkSize: this.chunkSize,
84
55
  },
85
56
  'Should have called createInlet!'
86
57
  )
@@ -101,46 +72,39 @@ export default class LslStreamInletTest extends AbstractPackageTest {
101
72
 
102
73
  @test()
103
74
  protected static async destroyCallsLslBinding() {
104
- await this.startPullingThenDestroy()
75
+ await this.startPulling()
76
+ const inletHandle = this.inletHandle
105
77
 
106
- assert.isEqualDeep(
107
- this.fakeLiblsl.lastDestroyInletOptions,
108
- { inletHandle: this.inletHandle },
78
+ this.destroy()
79
+
80
+ assert.isTrue(
81
+ inletHandle !== undefined &&
82
+ this.fakeLiblsl.lastDestroyInletOptions?.inletHandle ===
83
+ inletHandle,
109
84
  'Did not destroy inlet!'
110
85
  )
111
86
  }
112
87
 
113
88
  @test()
114
- protected static async destroyFreesAllPointers() {
115
- interface FreePointerParams {
116
- paramsType: FieldType[]
117
- paramsValue: JsExternal[]
118
- pointerType: PointerType
119
- }
120
-
121
- let calls: FreePointerParams[] = []
89
+ protected static async destroyDoesNotDestroyInletThatWasNeverCreated() {
90
+ this.destroy()
122
91
 
123
- LslStreamInlet.freePointer = (params: FreePointerParams) => {
124
- calls.push(params)
125
- }
92
+ assert.isEqual(
93
+ this.fakeLiblsl.destroyInletHitCount,
94
+ 0,
95
+ 'Should not have destroyed an inlet that was never created!'
96
+ )
97
+ }
126
98
 
99
+ @test()
100
+ protected static async destroyingTwiceDestroysInletOnce() {
127
101
  await this.startPullingThenDestroy()
102
+ this.destroy()
128
103
 
129
- const { paramsType, pointerType } = calls[0]
130
-
131
- assert.isEqualDeep(
132
- { paramsType, pointerType },
133
- {
134
- paramsType: [
135
- DataType.U8Array,
136
- DataType.U8Array,
137
- DataType.U8Array,
138
- DataType.U8Array,
139
- ],
140
- pointerType: PointerType.CPointer,
141
- },
142
-
143
- 'Destroy did not free all pointers!'
104
+ assert.isEqual(
105
+ this.fakeLiblsl.destroyInletHitCount,
106
+ 1,
107
+ 'Should have destroyed inlet only once!'
144
108
  )
145
109
  }
146
110
 
@@ -207,7 +171,6 @@ export default class LslStreamInletTest extends AbstractPackageTest {
207
171
  {
208
172
  inletHandle: this.inletHandle,
209
173
  timeoutMs: aboutOneYearInMs,
210
- errorCodePtr: this.errorCodePtr,
211
174
  },
212
175
  'Did not open inlet stream!'
213
176
  )
@@ -230,7 +193,6 @@ export default class LslStreamInletTest extends AbstractPackageTest {
230
193
  {
231
194
  inletHandle: instance['inletHandle'],
232
195
  timeoutMs: openStreamTimeoutMs,
233
- errorCodePtr: this.errorCodePtr,
234
196
  },
235
197
  'Did not open inlet stream with passed timeout!'
236
198
  )
@@ -316,13 +278,7 @@ export default class LslStreamInletTest extends AbstractPackageTest {
316
278
 
317
279
  assert.isEqualDeep(
318
280
  this.fakeLiblsl.lastPullSampleOptions,
319
- {
320
- inletHandle: this.inletHandle,
321
- sampleBufferPtr: this.sampleBufferPtr,
322
- sampleBufferElements: this.channelCount,
323
- timeoutMs: 0,
324
- errorCodePtr: this.errorCodePtr,
325
- },
281
+ { inletHandle: this.inletHandle, timeoutMs: 0 },
326
282
  'Should have called pullSample!'
327
283
  )
328
284
  }
@@ -333,33 +289,36 @@ export default class LslStreamInletTest extends AbstractPackageTest {
333
289
 
334
290
  assert.isEqualDeep(
335
291
  this.fakeLiblsl.lastPullChunkOptions,
336
- {
337
- inletHandle: this.inletHandle,
338
- sampleBufferPtr: this.sampleBufferPtr,
339
- timestampBufferPtr: this.timestampBufferPtr,
340
- sampleBufferElements: this.chunkSize * this.channelCount,
341
- timestampBufferElements: this.chunkSize,
342
- timeoutMs: 0,
343
- errorCodePtr: this.errorCodePtr,
344
- },
292
+ { inletHandle: this.inletHandle, timeoutMs: 0 },
345
293
  'Should have called pullChunk!'
346
294
  )
347
295
  }
348
296
 
349
297
  @test()
350
- protected static async pushSampleHandlesErrorCode() {
351
- let passedErrorCode: number | undefined
298
+ protected static async passesEachPulledSampleToOnData() {
299
+ await this.runChunkSizeOne()
352
300
 
353
- LslStreamInlet.handleLslError = (errorCode: number) => {
354
- passedErrorCode = errorCode
355
- }
301
+ assert.isEqualDeep(
302
+ this.callsToOnData,
303
+ FakeLiblsl.fakeSamples.map((sample) => ({
304
+ samples: Array.from(sample),
305
+ timestamps: [FakeLiblsl.fakeSampleTimestampSec],
306
+ })),
307
+ 'Did not pass each pulled sample to onData!'
308
+ )
309
+ }
356
310
 
311
+ @test()
312
+ protected static async passesEachPulledChunkToOnData() {
357
313
  await this.startThenStop()
358
314
 
359
315
  assert.isEqualDeep(
360
- passedErrorCode,
361
- FakeLiblsl.fakeErrorCode,
362
- 'Did not pass the expected error code to handleLslError!'
316
+ this.callsToOnData,
317
+ FakeLiblsl.fakeChunks.map((chunk, i) => ({
318
+ samples: Array.from(chunk),
319
+ timestamps: Array.from(FakeLiblsl.fakeTimestamps[i]),
320
+ })),
321
+ 'Did not pass each pulled chunk to onData!'
363
322
  )
364
323
  }
365
324
 
@@ -1,24 +1,9 @@
1
- import {
2
- handleLslError,
3
- InfoHandle,
4
- InletHandle,
5
- LiblslAdapter,
6
- } from '@neurodevs/ndx-native'
7
- import {
8
- JsExternal,
9
- unwrapPointer,
10
- createPointer,
11
- DataType,
12
- freePointer,
13
- PointerType,
14
- } from 'ffi-rs'
1
+ import { InfoHandle, InletHandle, LiblslAdapter } from '@neurodevs/ndx-native'
15
2
 
16
3
  export default class LslStreamInlet implements LslInlet {
17
4
  public static Class?: LslInletConstructor
18
5
  public static waitAfterOpenStreamMs = 100
19
6
  public static lsl = LiblslAdapter.getInstance()
20
- public static handleLslError = handleLslError
21
- public static freePointer = freePointer
22
7
 
23
8
  public isRunning = false
24
9
 
@@ -32,37 +17,12 @@ export default class LslStreamInlet implements LslInlet {
32
17
  private onData: OnDataCallback
33
18
 
34
19
  private infoHandle!: InfoHandle
35
- private inletHandle!: InletHandle
36
- private channelCount!: number
37
-
38
- private pullMethod!: () => {
39
- samples: number[] | undefined
40
- timestamps: number[] | undefined
41
- }
42
-
43
- private sampleBuffer!: Buffer<ArrayBuffer>
44
- private sampleBufferRef!: JsExternal[]
45
- private sampleBufferPtr!: JsExternal
46
-
47
- private timestampBuffer!: Buffer<ArrayBuffer>
48
- private timestampBufferRef!: JsExternal[]
49
- private timestampBufferPtr!: JsExternal
50
-
51
- private pullErrorBuffer!: Buffer<ArrayBuffer>
52
- private pullErrorBufferRef!: JsExternal[]
53
- private pullErrorBufferPtr!: JsExternal
54
-
55
- private openStreamErrorBuffer!: Buffer<ArrayBuffer>
56
- private openStreamErrorBufferRef!: JsExternal[]
57
- private openStreamErrorBufferPtr!: JsExternal
20
+ private inletHandle?: InletHandle
21
+ private pullMethod: () => PulledData | undefined
58
22
 
59
23
  private readonly sixMinutesInMs = 360 * 1000
60
24
  private readonly aboutOneYearInMs = 32000000 * 1000
61
25
 
62
- private readonly bytesPerFloat = 4
63
- private readonly bytesPerDouble = 8
64
- private readonly bytesPerI32 = 4
65
-
66
26
  protected constructor(options: LslInletOptions, onData: OnDataCallback) {
67
27
  const {
68
28
  sourceId,
@@ -82,6 +42,10 @@ export default class LslStreamInlet implements LslInlet {
82
42
  this.waitBetweenPullsMs = waitBetweenPullsMs ?? 1
83
43
  this.flushInletOnStop = flushInletOnStop ?? true
84
44
  this.onData = onData
45
+
46
+ this.pullMethod = (
47
+ chunkSize === 1 ? this.pullSample : this.pullChunk
48
+ ).bind(this)
85
49
  }
86
50
 
87
51
  public static async Create(
@@ -106,10 +70,6 @@ export default class LslStreamInlet implements LslInlet {
106
70
  private async createInlet() {
107
71
  this.infoHandle = this.resolveInfoHandle()
108
72
  this.inletHandle = this.doCreateInlet()
109
- this.channelCount = this.getChannelCount()
110
-
111
- this.allocateWritableBuffers()
112
- this.setPullMethod()
113
73
 
114
74
  this.openStream()
115
75
  }
@@ -146,144 +106,14 @@ export default class LslStreamInlet implements LslInlet {
146
106
  return this.lsl.createInlet({
147
107
  infoHandle: this.infoHandle,
148
108
  maxBufferedMs: this.maxBufferedMs,
109
+ chunkSize: this.chunkSize,
149
110
  })
150
111
  }
151
112
 
152
- private getChannelCount() {
153
- return this.lsl.getChannelCount({ infoHandle: this.infoHandle })
154
- }
155
-
156
- private allocateWritableBuffers() {
157
- this.allocateDataBuffer()
158
- this.allocateTimestampBuffer()
159
- this.allocatePullErrorBuffer()
160
- this.allocateOpenStreamErrorBuffer()
161
- }
162
-
163
- private allocateDataBuffer() {
164
- this.sampleBuffer = Buffer.alloc(
165
- this.channelCount * this.chunkSize * this.bytesPerFloat
166
- )
167
-
168
- this.sampleBufferRef = createPointer({
169
- paramsType: [DataType.U8Array],
170
- paramsValue: [this.sampleBuffer],
171
- })
172
-
173
- this.sampleBufferPtr = unwrapPointer(this.sampleBufferRef)[0]
174
- }
175
-
176
- private allocateTimestampBuffer() {
177
- this.timestampBuffer = Buffer.alloc(
178
- this.chunkSize * this.bytesPerDouble
179
- )
180
-
181
- this.timestampBufferRef = createPointer({
182
- paramsType: [DataType.U8Array],
183
- paramsValue: [this.timestampBuffer],
184
- })
185
-
186
- this.timestampBufferPtr = unwrapPointer(this.timestampBufferRef)[0]
187
- }
188
-
189
- private allocatePullErrorBuffer() {
190
- this.pullErrorBuffer = Buffer.alloc(this.bytesPerI32)
191
-
192
- this.pullErrorBufferRef = createPointer({
193
- paramsType: [DataType.U8Array],
194
- paramsValue: [this.pullErrorBuffer],
195
- })
196
-
197
- this.pullErrorBufferPtr = unwrapPointer(this.pullErrorBufferRef)[0]
198
- }
199
-
200
- private allocateOpenStreamErrorBuffer() {
201
- this.openStreamErrorBuffer = Buffer.alloc(this.bytesPerI32)
202
-
203
- this.openStreamErrorBufferRef = createPointer({
204
- paramsType: [DataType.U8Array],
205
- paramsValue: [this.openStreamErrorBuffer],
206
- })
207
-
208
- this.openStreamErrorBufferPtr = unwrapPointer(
209
- this.openStreamErrorBufferRef
210
- )[0]
211
- }
212
-
213
- private setPullMethod() {
214
- this.pullMethod =
215
- this.chunkSize === 1 ? this.pullSample : this.pullChunk
216
- }
217
-
218
- private pullSample = () => {
219
- const timestampSec = this.doPullsample()
220
-
221
- if (timestampSec > 0) {
222
- return {
223
- samples: this.readSamplesFromBuffer(),
224
- timestamps: [timestampSec],
225
- }
226
- }
227
- return { samples: undefined, timestamps: undefined }
228
- }
229
-
230
- private doPullsample() {
231
- return this.lsl.pullSample({
232
- inletHandle: this.inletHandle,
233
- sampleBufferPtr: this.sampleBufferPtr,
234
- sampleBufferElements: this.channelCount,
235
- timeoutMs: this.pullTimeoutMs,
236
- errorCodePtr: this.pullErrorBufferPtr,
237
- })
238
- }
239
-
240
- private readSamplesFromBuffer() {
241
- const floats = new Float32Array(
242
- this.sampleBuffer.buffer,
243
- this.sampleBuffer.byteOffset,
244
- this.chunkSize * this.channelCount
245
- )
246
- return Array.from(floats)
247
- }
248
-
249
- private pullChunk = () => {
250
- const firstTimestampSec = this.doPullChunk()
251
-
252
- if (firstTimestampSec > 0) {
253
- return {
254
- samples: this.readSamplesFromBuffer(),
255
- timestamps: this.readTimestampsFromBuffer(),
256
- }
257
- }
258
- return { samples: undefined, timestamps: undefined }
259
- }
260
-
261
- private doPullChunk() {
262
- return this.lsl.pullChunk({
263
- inletHandle: this.inletHandle,
264
- sampleBufferPtr: this.sampleBufferPtr,
265
- sampleBufferElements: this.chunkSize * this.channelCount,
266
- timestampBufferPtr: this.timestampBufferPtr,
267
- timestampBufferElements: this.chunkSize,
268
- timeoutMs: this.pullTimeoutMs,
269
- errorCodePtr: this.pullErrorBufferPtr,
270
- })
271
- }
272
-
273
- private readTimestampsFromBuffer() {
274
- const doubles = new Float64Array(
275
- this.timestampBuffer.buffer,
276
- this.timestampBuffer.byteOffset,
277
- this.chunkSize
278
- )
279
- return Array.from(doubles)
280
- }
281
-
282
113
  private openStream() {
283
114
  this.lsl.openStream({
284
- inletHandle: this.inletHandle,
115
+ inletHandle: this.inletHandle!,
285
116
  timeoutMs: this.openStreamTimeoutMs,
286
- errorCodePtr: this.openStreamErrorBufferPtr,
287
117
  })
288
118
  }
289
119
 
@@ -295,17 +125,26 @@ export default class LslStreamInlet implements LslInlet {
295
125
  }
296
126
 
297
127
  private async pullDataOnce() {
298
- const { samples, timestamps } = this.pullMethod()
299
- this.handleLslErrorIfPresent()
128
+ const pulled = this.pullMethod()
300
129
 
301
- if (samples && timestamps) {
302
- this.onData(samples, timestamps)
130
+ if (pulled) {
131
+ this.onData(pulled.samples, pulled.timestamps)
303
132
  }
304
133
  }
305
134
 
306
- private handleLslErrorIfPresent() {
307
- const errorCode = this.pullErrorBuffer.readInt32LE()
308
- this.handleLslError(errorCode)
135
+ private pullSample() {
136
+ return this.lsl.pullSample(this.pullOptions)
137
+ }
138
+
139
+ private pullChunk() {
140
+ return this.lsl.pullChunk(this.pullOptions)
141
+ }
142
+
143
+ private get pullOptions() {
144
+ return {
145
+ inletHandle: this.inletHandle!,
146
+ timeoutMs: this.pullTimeoutMs,
147
+ }
309
148
  }
310
149
 
311
150
  private async waitBetweenPulls() {
@@ -313,7 +152,7 @@ export default class LslStreamInlet implements LslInlet {
313
152
  }
314
153
 
315
154
  public flushInlet() {
316
- this.lsl.flushInlet({ inletHandle: this.inletHandle })
155
+ this.lsl.flushInlet({ inletHandle: this.inletHandle! })
317
156
  }
318
157
 
319
158
  public stopPulling() {
@@ -326,7 +165,7 @@ export default class LslStreamInlet implements LslInlet {
326
165
  }
327
166
 
328
167
  private closeStream() {
329
- this.lsl.closeStream({ inletHandle: this.inletHandle })
168
+ this.lsl.closeStream({ inletHandle: this.inletHandle! })
330
169
  }
331
170
 
332
171
  public destroy() {
@@ -334,43 +173,19 @@ export default class LslStreamInlet implements LslInlet {
334
173
  this.stopPulling()
335
174
  }
336
175
 
337
- this.doDestroyInlet()
338
- this.freeNativePointers()
339
- }
340
-
341
- private doDestroyInlet() {
342
- this.lsl.destroyInlet({ inletHandle: this.inletHandle })
176
+ this.destroyInletIfCreated()
343
177
  }
344
178
 
345
- private freeNativePointers() {
346
- this.freePointer({
347
- paramsType: [
348
- DataType.U8Array,
349
- DataType.U8Array,
350
- DataType.U8Array,
351
- DataType.U8Array,
352
- ],
353
- paramsValue: [
354
- this.openStreamErrorBufferPtr,
355
- this.sampleBufferPtr,
356
- this.timestampBufferPtr,
357
- this.pullErrorBufferPtr,
358
- ],
359
- pointerType: PointerType.CPointer,
360
- })
179
+ private destroyInletIfCreated() {
180
+ if (this.inletHandle) {
181
+ this.lsl.destroyInlet({ inletHandle: this.inletHandle })
182
+ delete this.inletHandle
183
+ }
361
184
  }
362
185
 
363
186
  private get lsl() {
364
187
  return LslStreamInlet.lsl
365
188
  }
366
-
367
- private get handleLslError() {
368
- return LslStreamInlet.handleLslError
369
- }
370
-
371
- private get freePointer() {
372
- return LslStreamInlet.freePointer
373
- }
374
189
  }
375
190
 
376
191
  export interface LslInlet {
@@ -396,4 +211,9 @@ export interface LslInletOptions {
396
211
  flushInletOnStop?: boolean
397
212
  }
398
213
 
214
+ export interface PulledData {
215
+ samples: number[]
216
+ timestamps: number[]
217
+ }
218
+
399
219
  export type OnDataCallback = (samples: number[], timestamps: number[]) => void
@@ -41,7 +41,7 @@ export default class WindowedClockRegressor implements ClockRegressor {
41
41
 
42
42
  const anchor = this.anchorTimeFor(deviceTime)
43
43
 
44
- const timestamps = Array(chunkSize).fill(0)
44
+ const timestamps: number[] = Array(chunkSize).fill(0)
45
45
 
46
46
  for (let i = 0; i <= chunkSize - 1; i++) {
47
47
  const stepsFromLast = chunkSize - 1 - i
@@ -191,8 +191,8 @@ export default class BleGattController implements BleGatt {
191
191
  }
192
192
 
193
193
  export interface BleGatt {
194
- uuid: string
195
- name: string
194
+ readonly uuid: string
195
+ readonly name: string
196
196
 
197
197
  connect(): Promise<void>
198
198