@neurodevs/node-lsl 23.1.1 → 23.2.0
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.
- package/build/__tests__/AbstractPackageTest.d.ts +1 -0
- package/build/__tests__/AbstractPackageTest.js +1 -0
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/BleGattController.test.d.ts +1 -0
- package/build/__tests__/impl/BleGattController.test.js +9 -0
- package/build/__tests__/impl/BleGattController.test.js.map +1 -1
- package/build/__tests__/impl/BleObserverController.test.d.ts +12 -1
- package/build/__tests__/impl/BleObserverController.test.js +77 -5
- package/build/__tests__/impl/BleObserverController.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamInlet.test.d.ts +4 -5
- package/build/__tests__/impl/LslStreamInlet.test.js +37 -58
- package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
- package/build/impl/LslStreamInlet.d.ts +9 -39
- package/build/impl/LslStreamInlet.js +23 -151
- package/build/impl/LslStreamInlet.js.map +1 -1
- package/build/impl/clocks/WindowedClockRegressor.d.ts +2 -2
- package/build/impl/clocks/WindowedClockRegressor.js.map +1 -1
- package/build/impl/controllers/BleGattController.d.ts +4 -3
- package/build/impl/controllers/BleGattController.js +6 -0
- package/build/impl/controllers/BleGattController.js.map +1 -1
- package/build/impl/controllers/BleObserverController.d.ts +11 -3
- package/build/impl/controllers/BleObserverController.js +25 -2
- package/build/impl/controllers/BleObserverController.js.map +1 -1
- package/package.json +3 -4
- package/src/__tests__/AbstractPackageTest.ts +2 -0
- package/src/__tests__/impl/BleGattController.test.ts +13 -0
- package/src/__tests__/impl/BleObserverController.test.ts +111 -6
- package/src/__tests__/impl/LslStreamInlet.test.ts +45 -86
- package/src/impl/LslStreamInlet.ts +38 -218
- package/src/impl/clocks/WindowedClockRegressor.ts +1 -1
- package/src/impl/controllers/BleGattController.ts +12 -2
- package/src/impl/controllers/BleObserverController.ts +37 -4
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import {
|
|
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
|
|
206
|
-
|
|
207
|
-
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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.
|
|
236
|
-
this.freeNativePointers();
|
|
237
|
-
}
|
|
238
|
-
doDestroyInlet() {
|
|
239
|
-
this.lsl.destroyInlet({ inletHandle: this.inletHandle });
|
|
128
|
+
this.destroyInletIfCreated();
|
|
240
129
|
}
|
|
241
|
-
|
|
242
|
-
this.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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":"AAAA,OAAO,
|
|
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):
|
|
10
|
-
deriveTimestamps(deviceTime: number, earliestLslTime: number, chunkSize: number):
|
|
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":"AAAA,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAChC,MAAM,CAAC,KAAK,CAA4B;IAE9B,SAAS,CAAQ;IACjB,YAAY,CAAQ;IACpB,mBAAmB,GAAG,EAAE,CAAA;IACxB,OAAO,GAGlB,EAAE,CAAA;IAEA,KAAK,GAAG,CAAC,CAAA,CAAC,qCAAqC;IAEvD,YACI,SAAiB,EACjB,OAAuC;QAEvC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAEjE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IACpC,CAAC;IAEM,MAAM,CAAC,MAAM,CAChB,SAAiB,EACjB,OAAuC;QAEvC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACvD,CAAC;IAEM,gBAAgB,CACnB,UAAkB,EAClB,eAAuB,EACvB,SAAiB;QAEjB,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC,CAAA;QAEjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAA;QAClD,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAChC,IAAI,CAAC,UAAU,EAAE,CAAA;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAE7C,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"WindowedClockRegressor.js","sourceRoot":"","sources":["../../../src/impl/clocks/WindowedClockRegressor.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,8 @@ 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):
|
|
14
|
+
static Create(options: BleGattOptions): BleGatt;
|
|
15
|
+
private throwTooManyParams;
|
|
15
16
|
connect(): Promise<void>;
|
|
16
17
|
private discoverUuid;
|
|
17
18
|
private waitForDiscoveredUuid;
|
|
@@ -29,8 +30,8 @@ export default class BleGattController implements BleGatt {
|
|
|
29
30
|
private requireUuid;
|
|
30
31
|
}
|
|
31
32
|
export interface BleGatt {
|
|
32
|
-
uuid: string;
|
|
33
|
-
name: string;
|
|
33
|
+
readonly uuid: string;
|
|
34
|
+
readonly name: string;
|
|
34
35
|
connect(): Promise<void>;
|
|
35
36
|
subscribeCharacteristics(charCallbacks: CharacteristicCallbacks): Promise<void>;
|
|
36
37
|
writeCharacteristic(charUuid: CharacteristicUuid, value: string): Promise<void>;
|
|
@@ -12,6 +12,9 @@ export default class BleGattController {
|
|
|
12
12
|
ndx = LibndxAdapter.getInstance();
|
|
13
13
|
constructor(options) {
|
|
14
14
|
const { deviceUuid, deviceNamePrefix, charCallbacks, onConnected, rssiIntervalMs, } = options;
|
|
15
|
+
if (deviceUuid && deviceNamePrefix) {
|
|
16
|
+
this.throwTooManyParams();
|
|
17
|
+
}
|
|
15
18
|
this.state = { status: 'disconnected', uuid: deviceUuid };
|
|
16
19
|
this.deviceNamePrefix = deviceNamePrefix;
|
|
17
20
|
this.charCallbacks = charCallbacks;
|
|
@@ -21,6 +24,9 @@ export default class BleGattController {
|
|
|
21
24
|
static Create(options) {
|
|
22
25
|
return new (this.Class ?? this)(options);
|
|
23
26
|
}
|
|
27
|
+
throwTooManyParams() {
|
|
28
|
+
throw new Error('Cannot pass both deviceUuid and deviceNamePrefix! Please pass only one.');
|
|
29
|
+
}
|
|
24
30
|
async connect() {
|
|
25
31
|
if (!this.state.uuid) {
|
|
26
32
|
await this.discoverUuid();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BleGattController.js","sourceRoot":"","sources":["../../../src/impl/controllers/BleGattController.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BleGattController.js","sourceRoot":"","sources":["../../../src/impl/controllers/BleGattController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { NativeAdvertisement } from '@neurodevs/ndx-native';
|
|
2
2
|
export default class BleObserverController implements BleObserver {
|
|
3
3
|
static Class?: BleObserverConstructor;
|
|
4
|
-
private readonly
|
|
4
|
+
private readonly deviceNamePrefix?;
|
|
5
5
|
private readonly onAdvertisement?;
|
|
6
6
|
private readonly ndx;
|
|
7
|
+
private deviceUuid;
|
|
7
8
|
protected constructor(options: BleObserverOptions);
|
|
8
9
|
static Create(options: BleObserverOptions): BleObserver;
|
|
10
|
+
private throwTooManyParams;
|
|
9
11
|
startObserving(): Promise<void>;
|
|
12
|
+
private discoverUuid;
|
|
10
13
|
private createBleObserverBackend;
|
|
11
14
|
private startBleObserverBackend;
|
|
12
15
|
stopObserving(): Promise<void>;
|
|
@@ -19,8 +22,13 @@ export interface BleObserver {
|
|
|
19
22
|
}
|
|
20
23
|
export type BleObserverConstructor = new (options: BleObserverOptions) => BleObserver;
|
|
21
24
|
export type BleObserverOptions = {
|
|
22
|
-
deviceUuid: string;
|
|
23
25
|
onAdvertisement?: OnAdvertisement;
|
|
24
|
-
}
|
|
26
|
+
} & ({
|
|
27
|
+
deviceUuid: string;
|
|
28
|
+
deviceNamePrefix?: string;
|
|
29
|
+
} | {
|
|
30
|
+
deviceUuid?: string;
|
|
31
|
+
deviceNamePrefix: string;
|
|
32
|
+
});
|
|
25
33
|
export type BleAdvertisement = NativeAdvertisement;
|
|
26
34
|
export type OnAdvertisement = (advertisement: BleAdvertisement) => void;
|
|
@@ -1,21 +1,44 @@
|
|
|
1
1
|
import { LibndxAdapter } from '@neurodevs/ndx-native';
|
|
2
2
|
export default class BleObserverController {
|
|
3
3
|
static Class;
|
|
4
|
-
|
|
4
|
+
deviceNamePrefix;
|
|
5
5
|
onAdvertisement;
|
|
6
6
|
ndx = LibndxAdapter.getInstance();
|
|
7
|
+
deviceUuid;
|
|
7
8
|
constructor(options) {
|
|
8
|
-
const { deviceUuid, onAdvertisement } = options;
|
|
9
|
+
const { deviceUuid, deviceNamePrefix, onAdvertisement } = options;
|
|
10
|
+
if (deviceUuid && deviceNamePrefix) {
|
|
11
|
+
this.throwTooManyParams();
|
|
12
|
+
}
|
|
9
13
|
this.deviceUuid = deviceUuid ?? '';
|
|
14
|
+
this.deviceNamePrefix = deviceNamePrefix;
|
|
10
15
|
this.onAdvertisement = onAdvertisement;
|
|
11
16
|
}
|
|
12
17
|
static Create(options) {
|
|
13
18
|
return new (this.Class ?? this)(options);
|
|
14
19
|
}
|
|
20
|
+
throwTooManyParams() {
|
|
21
|
+
throw new Error('Cannot pass both deviceUuid and deviceNamePrefix! Please pass only one.');
|
|
22
|
+
}
|
|
15
23
|
async startObserving() {
|
|
24
|
+
if (!this.deviceUuid && this.deviceNamePrefix) {
|
|
25
|
+
await this.discoverUuid(this.deviceNamePrefix);
|
|
26
|
+
}
|
|
16
27
|
this.createBleObserverBackend();
|
|
17
28
|
this.startBleObserverBackend();
|
|
18
29
|
}
|
|
30
|
+
discoverUuid(namePrefix) {
|
|
31
|
+
return new Promise((resolve) => {
|
|
32
|
+
const { status, error } = this.ndx.discoverBleUuid({
|
|
33
|
+
namePrefix,
|
|
34
|
+
onDiscovered: (uuid) => {
|
|
35
|
+
this.deviceUuid = uuid;
|
|
36
|
+
resolve();
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
this.throwIfError(status, error);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
19
42
|
createBleObserverBackend() {
|
|
20
43
|
const { status, error } = this.ndx.createBleObserverBackend({
|
|
21
44
|
deviceUuid: this.deviceUuid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BleObserverController.js","sourceRoot":"","sources":["../../../src/impl/controllers/BleObserverController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,uBAAuB,CAAA;AAE1E,MAAM,CAAC,OAAO,OAAO,qBAAqB;IAC/B,MAAM,CAAC,KAAK,CAAyB;IAE3B,
|
|
1
|
+
{"version":3,"file":"BleObserverController.js","sourceRoot":"","sources":["../../../src/impl/controllers/BleObserverController.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neurodevs/node-lsl",
|
|
3
|
-
"version": "23.
|
|
3
|
+
"version": "23.2.0",
|
|
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": "^
|
|
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.
|
|
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",
|
|
@@ -53,6 +53,8 @@ export default class AbstractPackageTest extends AbstractModuleTest {
|
|
|
53
53
|
protected static readonly sampleRateHz = Math.floor(Math.random() * 100)
|
|
54
54
|
protected static readonly maxBufferedMs = Math.floor(Math.random() * 1000)
|
|
55
55
|
|
|
56
|
+
protected static readonly tooManyParamsError = `Cannot pass both deviceUuid and deviceNamePrefix! Please pass only one.`
|
|
57
|
+
|
|
56
58
|
protected static async beforeEach() {
|
|
57
59
|
await super.beforeEach()
|
|
58
60
|
|
|
@@ -124,6 +124,19 @@ export default class BleGattControllerTest extends AbstractPackageTest {
|
|
|
124
124
|
)
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
@test()
|
|
128
|
+
protected static async throwsWhenBothUuidAndNamePrefixProvided() {
|
|
129
|
+
assert.doesThrow(
|
|
130
|
+
() =>
|
|
131
|
+
this.BleGattController({
|
|
132
|
+
deviceUuid: this.uuid,
|
|
133
|
+
deviceNamePrefix: this.namePrefix,
|
|
134
|
+
}),
|
|
135
|
+
this.tooManyParamsError,
|
|
136
|
+
'Did not throw when both uuid and name prefix were provided!'
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
|
|
127
140
|
@test()
|
|
128
141
|
protected static async usesDiscoveredUuidToCreateBleBackend() {
|
|
129
142
|
const instance = this.BleGattControllerWithPrefix()
|
|
@@ -13,6 +13,8 @@ export default class BleObserverControllerTest extends AbstractPackageTest {
|
|
|
13
13
|
private static passedAdvertisements: NativeAdvertisement[]
|
|
14
14
|
|
|
15
15
|
private static readonly fakeError = this.generateId()
|
|
16
|
+
private static readonly namePrefix = this.generateId()
|
|
17
|
+
private static readonly discoveredUuid = this.generateId()
|
|
16
18
|
|
|
17
19
|
private static readonly advertisement: NativeAdvertisement = {
|
|
18
20
|
localName: this.generateId(),
|
|
@@ -90,6 +92,93 @@ export default class BleObserverControllerTest extends AbstractPackageTest {
|
|
|
90
92
|
})
|
|
91
93
|
}
|
|
92
94
|
|
|
95
|
+
@test()
|
|
96
|
+
protected static async discoversUuidByNamePrefixWhenUuidNotProvided() {
|
|
97
|
+
const observer = this.BleObserverWithNamePrefix()
|
|
98
|
+
void observer.startObserving()
|
|
99
|
+
|
|
100
|
+
assert.isEqual(
|
|
101
|
+
FakeLibndx.callsToDiscoverBleUuid[0]?.namePrefix,
|
|
102
|
+
this.namePrefix,
|
|
103
|
+
'Did not discover uuid by name prefix!'
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@test()
|
|
108
|
+
protected static async doesNotDiscoverUuidWhenUuidProvided() {
|
|
109
|
+
await this.startObserving()
|
|
110
|
+
|
|
111
|
+
assert.isLength(
|
|
112
|
+
FakeLibndx.callsToDiscoverBleUuid,
|
|
113
|
+
0,
|
|
114
|
+
'Should not discover uuid when uuid is provided!'
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@test()
|
|
119
|
+
protected static async throwsWhenBothUuidAndNamePrefixProvided() {
|
|
120
|
+
assert.doesThrow(
|
|
121
|
+
() =>
|
|
122
|
+
BleObserverController.Create({
|
|
123
|
+
deviceUuid: this.deviceUuid,
|
|
124
|
+
deviceNamePrefix: this.namePrefix,
|
|
125
|
+
}),
|
|
126
|
+
this.tooManyParamsError,
|
|
127
|
+
'Did not throw when both uuid and name prefix were provided!'
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@test()
|
|
132
|
+
protected static async waitsForDiscoveredUuidBeforeCreatingBackend() {
|
|
133
|
+
const observer = this.BleObserverWithNamePrefix()
|
|
134
|
+
void observer.startObserving()
|
|
135
|
+
|
|
136
|
+
await this.wait(1)
|
|
137
|
+
|
|
138
|
+
assert.isLength(
|
|
139
|
+
FakeLibndx.callsToCreateBleObserver,
|
|
140
|
+
0,
|
|
141
|
+
'Created backend before uuid was discovered!'
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@test()
|
|
146
|
+
protected static async observesDeviceWithDiscoveredUuid() {
|
|
147
|
+
await this.startObservingWithDiscovery()
|
|
148
|
+
|
|
149
|
+
assert.isEqualDeep(
|
|
150
|
+
{
|
|
151
|
+
created: FakeLibndx.callsToCreateBleObserver[0]?.deviceUuid,
|
|
152
|
+
started: FakeLibndx.callsToStartBleObserver[0]?.deviceUuid,
|
|
153
|
+
},
|
|
154
|
+
{ created: this.discoveredUuid, started: this.discoveredUuid },
|
|
155
|
+
'Did not observe device with discovered uuid!'
|
|
156
|
+
)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
@test()
|
|
160
|
+
protected static async stopsObservingDeviceWithDiscoveredUuid() {
|
|
161
|
+
const observer = await this.startObservingWithDiscovery()
|
|
162
|
+
await observer.stopObserving()
|
|
163
|
+
|
|
164
|
+
assert.isEqualDeep(
|
|
165
|
+
FakeLibndx.callsToStopBleObserver[0],
|
|
166
|
+
{ deviceUuid: this.discoveredUuid },
|
|
167
|
+
'Did not stop observing device with discovered uuid!'
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@test()
|
|
172
|
+
protected static async startObservingThrowsWhenDiscoveryFails() {
|
|
173
|
+
this.setFakeErrorResult()
|
|
174
|
+
|
|
175
|
+
await assert.doesThrowAsync(
|
|
176
|
+
async () => await this.BleObserverWithNamePrefix().startObserving(),
|
|
177
|
+
this.fakeError,
|
|
178
|
+
'Did not throw when discovery failed!'
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
|
|
93
182
|
@test()
|
|
94
183
|
protected static async createBleObserverBackendThrowsOnError() {
|
|
95
184
|
this.setFakeErrorResult()
|
|
@@ -126,6 +215,24 @@ export default class BleObserverControllerTest extends AbstractPackageTest {
|
|
|
126
215
|
)
|
|
127
216
|
}
|
|
128
217
|
|
|
218
|
+
private static async startObserving() {
|
|
219
|
+
await this.instance.startObserving()
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
private static async stopObserving() {
|
|
223
|
+
await this.instance.stopObserving()
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private static async startObservingWithDiscovery() {
|
|
227
|
+
const observer = this.BleObserverWithNamePrefix()
|
|
228
|
+
const promise = observer.startObserving()
|
|
229
|
+
|
|
230
|
+
FakeLibndx.callsToDiscoverBleUuid[0]?.onDiscovered(this.discoveredUuid)
|
|
231
|
+
await promise
|
|
232
|
+
|
|
233
|
+
return observer
|
|
234
|
+
}
|
|
235
|
+
|
|
129
236
|
private static setFakeErrorResult() {
|
|
130
237
|
FakeLibndx.fakeResult = {
|
|
131
238
|
status: 400,
|
|
@@ -133,12 +240,10 @@ export default class BleObserverControllerTest extends AbstractPackageTest {
|
|
|
133
240
|
}
|
|
134
241
|
}
|
|
135
242
|
|
|
136
|
-
private static
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
private static async stopObserving() {
|
|
141
|
-
await this.instance.stopObserving()
|
|
243
|
+
private static BleObserverWithNamePrefix() {
|
|
244
|
+
return BleObserverController.Create({
|
|
245
|
+
deviceNamePrefix: this.namePrefix,
|
|
246
|
+
})
|
|
142
247
|
}
|
|
143
248
|
|
|
144
249
|
private static BleObserverController() {
|