@neurodevs/node-lsl 19.0.0 → 22.0.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/README.md +6 -6
- package/build/__tests__/AbstractPackageTest.d.ts +12 -11
- package/build/__tests__/AbstractPackageTest.js +32 -34
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/{BleDeviceController.test.d.ts → BleGattController.test.d.ts} +3 -3
- package/build/__tests__/impl/{BleDeviceController.test.js → BleGattController.test.js} +68 -70
- package/build/__tests__/impl/BleGattController.test.js.map +1 -0
- package/build/__tests__/impl/BleObserverController.test.d.ts +12 -0
- package/build/__tests__/impl/BleObserverController.test.js +62 -0
- package/build/__tests__/impl/BleObserverController.test.js.map +1 -0
- package/build/__tests__/impl/{LslEventMarkerEmitter.test.d.ts → LslEventMarkerOutlet.test.d.ts} +3 -3
- package/build/__tests__/impl/{LslEventMarkerEmitter.test.js → LslEventMarkerOutlet.test.js} +45 -46
- package/build/__tests__/impl/LslEventMarkerOutlet.test.js.map +1 -0
- package/build/__tests__/impl/LslJsonOutlet.test.d.ts +14 -0
- package/build/__tests__/impl/LslJsonOutlet.test.js +118 -0
- package/build/__tests__/impl/LslJsonOutlet.test.js.map +1 -0
- package/build/__tests__/impl/LslStreamInfo.test.js +2 -3
- package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamInlet.test.d.ts +3 -5
- package/build/__tests__/impl/LslStreamInlet.test.js +13 -47
- package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamOutlet.test.js +7 -13
- package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -1
- package/build/__tests__/impl/LslWebSocketBridge.test.js +9 -11
- package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
- package/build/__tests__/impl/UsbDeviceController.test.js.map +1 -1
- package/build/__tests__/impl/WindowedClockRegressor.test.js +1 -1
- package/build/__tests__/impl/WindowedClockRegressor.test.js.map +1 -1
- package/build/assertions.js +1 -1
- package/build/assertions.js.map +1 -1
- package/build/impl/LslEventMarkerOutlet.d.ts +35 -0
- package/build/impl/{LslEventMarkerEmitter.js → LslEventMarkerOutlet.js} +2 -2
- package/build/impl/LslEventMarkerOutlet.js.map +1 -0
- package/build/impl/LslJsonOutlet.d.ts +33 -0
- package/build/impl/LslJsonOutlet.js +44 -0
- package/build/impl/LslJsonOutlet.js.map +1 -0
- package/build/impl/LslStreamInfo.d.ts +7 -7
- package/build/impl/LslStreamInfo.js.map +1 -1
- package/build/impl/LslStreamInlet.d.ts +63 -21
- package/build/impl/LslStreamInlet.js +221 -65
- package/build/impl/LslStreamInlet.js.map +1 -1
- package/build/impl/LslStreamOutlet.d.ts +16 -16
- package/build/impl/LslStreamOutlet.js +32 -36
- package/build/impl/LslStreamOutlet.js.map +1 -1
- package/build/impl/LslWebSocketBridge.d.ts +10 -10
- package/build/impl/LslWebSocketBridge.js.map +1 -1
- package/build/impl/clocks/WindowedClockRegressor.js.map +1 -0
- package/build/impl/controllers/{BleDeviceController.d.ts → BleGattController.d.ts} +10 -10
- package/build/impl/controllers/{BleDeviceController.js → BleGattController.js} +19 -19
- package/build/impl/controllers/BleGattController.js.map +1 -0
- package/build/impl/controllers/BleObserverController.d.ts +20 -0
- package/build/impl/controllers/BleObserverController.js +37 -0
- package/build/impl/controllers/BleObserverController.js.map +1 -0
- package/build/impl/controllers/UsbDeviceController.d.ts +9 -9
- package/build/impl/controllers/UsbDeviceController.js +7 -7
- package/build/impl/controllers/UsbDeviceController.js.map +1 -1
- package/build/index.d.ts +43 -31
- package/build/index.js +52 -39
- package/build/index.js.map +1 -1
- package/build/scripts/{runLslEventMarkerEmitter.js → runEventMarkerOutlet.js} +4 -3
- package/build/scripts/runEventMarkerOutlet.js.map +1 -0
- package/build/scripts/{runLslStreamOutlet.js → runLslOutlet.js} +1 -1
- package/build/scripts/runLslOutlet.js.map +1 -0
- package/build/scripts/runMuse.js +2 -2
- package/build/scripts/runMuse.js.map +1 -1
- package/build/testDoubles/{BleController/FakeBleController.d.ts → BleGatt/FakeBleGatt.d.ts} +6 -6
- package/build/testDoubles/{BleController/FakeBleController.js → BleGatt/FakeBleGatt.js} +8 -8
- package/build/testDoubles/BleGatt/FakeBleGatt.js.map +1 -0
- package/build/testDoubles/{BleController/SpyBleController.d.ts → BleGatt/SpyBleGatt.d.ts} +4 -4
- package/build/testDoubles/{BleController/SpyBleController.js → BleGatt/SpyBleGatt.js} +3 -3
- package/build/testDoubles/BleGatt/SpyBleGatt.js.map +1 -0
- package/build/testDoubles/BleObserver/FakeBleObserver.d.ts +10 -0
- package/build/testDoubles/BleObserver/FakeBleObserver.js +20 -0
- package/build/testDoubles/BleObserver/FakeBleObserver.js.map +1 -0
- package/build/testDoubles/ClockRegressor/FakeClockRegressor.d.ts +1 -1
- package/build/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.d.ts → EventMarkerOutlet/FakeEventMarkerOutlet.d.ts} +4 -4
- package/build/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.js → EventMarkerOutlet/FakeEventMarkerOutlet.js} +7 -7
- package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js.map +1 -0
- package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.d.ts +10 -0
- package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js +23 -0
- package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js.map +1 -0
- package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.d.ts +9 -0
- package/build/testDoubles/{EventMarkerEmitter/ThrowingEventMarkerEmitter.js → EventMarkerOutlet/ThrowingEventMarkerOutlet.js} +2 -2
- package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js.map +1 -0
- package/build/testDoubles/JsonOutlet/FakeJsonOutlet.d.ts +10 -0
- package/build/testDoubles/JsonOutlet/FakeJsonOutlet.js +20 -0
- package/build/testDoubles/JsonOutlet/FakeJsonOutlet.js.map +1 -0
- package/build/testDoubles/{StreamInfo/FakeStreamInfo.d.ts → LslInfo/FakeLslInfo.d.ts} +4 -4
- package/build/testDoubles/{StreamInfo/FakeStreamInfo.js → LslInfo/FakeLslInfo.js} +7 -7
- package/build/testDoubles/LslInfo/FakeLslInfo.js.map +1 -0
- package/build/testDoubles/LslInfo/SpyLslInfo.d.ts +10 -0
- package/build/testDoubles/{StreamInfo/SpyStreamInfo.js → LslInfo/SpyLslInfo.js} +4 -4
- package/build/testDoubles/LslInfo/SpyLslInfo.js.map +1 -0
- package/build/testDoubles/{StreamInlet/FakeStreamInlet.d.ts → LslInlet/FakeLslInlet.d.ts} +4 -4
- package/build/testDoubles/{StreamInlet/FakeStreamInlet.js → LslInlet/FakeLslInlet.js} +12 -11
- package/build/testDoubles/LslInlet/FakeLslInlet.js.map +1 -0
- package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +4 -0
- package/build/testDoubles/{StreamInlet/SpyStreamInlet.js → LslInlet/SpyLslInlet.js} +2 -2
- package/build/testDoubles/LslInlet/SpyLslInlet.js.map +1 -0
- package/build/testDoubles/{StreamOutlet/FakeStreamOutlet.d.ts → LslOutlet/FakeLslOutlet.d.ts} +5 -5
- package/build/testDoubles/{StreamOutlet/FakeStreamOutlet.js → LslOutlet/FakeLslOutlet.js} +8 -8
- package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +1 -0
- package/build/testDoubles/LslWsBridge/FakeLslWsBridge.d.ts +14 -0
- package/build/testDoubles/{WebSocketBridge/FakeWebSocketBridge.js → LslWsBridge/FakeLslWsBridge.js} +14 -14
- package/build/testDoubles/LslWsBridge/FakeLslWsBridge.js.map +1 -0
- package/build/testDoubles/LslWsBridge/SpyLslWsBridge.d.ts +4 -0
- package/build/testDoubles/{WebSocketBridge/SpyLslWebSocketBridge.js → LslWsBridge/SpyLslWsBridge.js} +2 -2
- package/build/testDoubles/LslWsBridge/SpyLslWsBridge.js.map +1 -0
- package/build/testDoubles/UsbDevice/FakeUsbDevice.d.ts +12 -0
- package/build/testDoubles/UsbDevice/FakeUsbDevice.js +25 -0
- package/build/testDoubles/UsbDevice/FakeUsbDevice.js.map +1 -0
- package/build/testDoubles/consts.d.ts +2 -12
- package/build/testDoubles/consts.js +0 -20
- package/build/testDoubles/consts.js.map +1 -1
- package/build/testDoubles/generateRandomOutletOptions.d.ts +2 -2
- package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
- package/package.json +5 -4
- package/src/__tests__/AbstractPackageTest.ts +35 -42
- package/src/__tests__/impl/{BleDeviceController.test.ts → BleGattController.test.ts} +45 -47
- package/src/__tests__/impl/BleObserverController.test.ts +72 -0
- package/src/__tests__/impl/{LslEventMarkerEmitter.test.ts → LslEventMarkerOutlet.test.ts} +33 -37
- package/src/__tests__/impl/LslJsonOutlet.test.ts +135 -0
- package/src/__tests__/impl/LslStreamInfo.test.ts +8 -9
- package/src/__tests__/impl/LslStreamInlet.test.ts +21 -79
- package/src/__tests__/impl/LslStreamOutlet.test.ts +17 -25
- package/src/__tests__/impl/LslWebSocketBridge.test.ts +15 -19
- package/src/__tests__/impl/UsbDeviceController.test.ts +2 -2
- package/src/__tests__/impl/WindowedClockRegressor.test.ts +1 -1
- package/src/assertions.ts +1 -2
- package/src/impl/{LslEventMarkerEmitter.ts → LslEventMarkerOutlet.ts} +17 -17
- package/src/impl/LslJsonOutlet.ts +87 -0
- package/src/impl/LslStreamInfo.ts +7 -9
- package/src/impl/LslStreamInlet.ts +305 -81
- package/src/impl/LslStreamOutlet.ts +62 -59
- package/src/impl/LslWebSocketBridge.ts +15 -18
- package/src/impl/controllers/{BleDeviceController.ts → BleGattController.ts} +23 -28
- package/src/impl/controllers/BleObserverController.ts +62 -0
- package/src/impl/controllers/UsbDeviceController.ts +14 -16
- package/src/index.ts +64 -44
- package/src/scripts/{runLslEventMarkerEmitter.ts → runEventMarkerOutlet.ts} +3 -2
- package/src/scripts/runMuse.ts +2 -2
- package/src/testDoubles/{BleController/FakeBleController.ts → BleGatt/FakeBleGatt.ts} +14 -14
- package/src/testDoubles/{BleController/SpyBleController.ts → BleGatt/SpyBleGatt.ts} +5 -5
- package/src/testDoubles/BleObserver/FakeBleObserver.ts +28 -0
- package/src/testDoubles/ClockRegressor/FakeClockRegressor.ts +1 -1
- package/src/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.ts → EventMarkerOutlet/FakeEventMarkerOutlet.ts} +11 -11
- package/src/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.ts +31 -0
- package/src/testDoubles/{EventMarkerEmitter/ThrowingEventMarkerEmitter.ts → EventMarkerOutlet/ThrowingEventMarkerOutlet.ts} +5 -5
- package/src/testDoubles/JsonOutlet/FakeJsonOutlet.ts +25 -0
- package/src/testDoubles/{StreamInfo/FakeStreamInfo.ts → LslInfo/FakeLslInfo.ts} +9 -9
- package/src/testDoubles/{StreamInfo/SpyStreamInfo.ts → LslInfo/SpyLslInfo.ts} +5 -5
- package/src/testDoubles/{StreamInlet/FakeStreamInlet.ts → LslInlet/FakeLslInlet.ts} +15 -14
- package/src/testDoubles/LslInlet/SpyLslInlet.ts +10 -0
- package/src/testDoubles/{StreamOutlet/FakeStreamOutlet.ts → LslOutlet/FakeLslOutlet.ts} +11 -14
- package/src/testDoubles/{WebSocketBridge/FakeWebSocketBridge.ts → LslWsBridge/FakeLslWsBridge.ts} +19 -19
- package/src/testDoubles/LslWsBridge/SpyLslWsBridge.ts +9 -0
- package/src/testDoubles/UsbDevice/FakeUsbDevice.ts +34 -0
- package/src/testDoubles/consts.ts +3 -23
- package/src/testDoubles/generateRandomOutletOptions.ts +2 -2
- package/build/__tests__/impl/BleDeviceController.test.js.map +0 -1
- package/build/__tests__/impl/LslEventMarkerEmitter.test.js.map +0 -1
- package/build/consts.d.ts +0 -11
- package/build/consts.js +0 -21
- package/build/consts.js.map +0 -1
- package/build/impl/LslEventMarkerEmitter.d.ts +0 -35
- package/build/impl/LslEventMarkerEmitter.js.map +0 -1
- package/build/impl/WindowedClockRegressor.js.map +0 -1
- package/build/impl/controllers/BleDeviceController.js.map +0 -1
- package/build/impl/workers/inlet/LslStreamInlet.worker.d.ts +0 -22
- package/build/impl/workers/inlet/LslStreamInlet.worker.js +0 -42
- package/build/impl/workers/inlet/LslStreamInlet.worker.js.map +0 -1
- package/build/impl/workers/inlet/StreamInletWorker.d.ts +0 -73
- package/build/impl/workers/inlet/StreamInletWorker.js +0 -253
- package/build/impl/workers/inlet/StreamInletWorker.js.map +0 -1
- package/build/impl/workers/outlet/LslStreamOutlet.worker.d.ts +0 -32
- package/build/impl/workers/outlet/LslStreamOutlet.worker.js +0 -82
- package/build/impl/workers/outlet/LslStreamOutlet.worker.js.map +0 -1
- package/build/scripts/discoverMuse.js +0 -40
- package/build/scripts/discoverMuse.js.map +0 -1
- package/build/scripts/runLslEventMarkerEmitter.js.map +0 -1
- package/build/scripts/runLslStreamOutlet.d.ts +0 -1
- package/build/scripts/runLslStreamOutlet.js.map +0 -1
- package/build/scripts/testDestroyOutlet.d.ts +0 -1
- package/build/scripts/testDestroyOutlet.js +0 -4
- package/build/scripts/testDestroyOutlet.js.map +0 -1
- package/build/testDoubles/BleController/FakeBleController.js.map +0 -1
- package/build/testDoubles/BleController/SpyBleController.js.map +0 -1
- package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js.map +0 -1
- package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.d.ts +0 -10
- package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js +0 -23
- package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js.map +0 -1
- package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.d.ts +0 -9
- package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js.map +0 -1
- package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +0 -1
- package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +0 -10
- package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +0 -1
- package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +0 -1
- package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +0 -4
- package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +0 -1
- package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +0 -1
- package/build/testDoubles/UsbController/FakeUsbController.d.ts +0 -12
- package/build/testDoubles/UsbController/FakeUsbController.js +0 -25
- package/build/testDoubles/UsbController/FakeUsbController.js.map +0 -1
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.d.ts +0 -14
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js.map +0 -1
- package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.d.ts +0 -4
- package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.js.map +0 -1
- package/build/testDoubles/WorkerThreads/FakeWorker.d.ts +0 -27
- package/build/testDoubles/WorkerThreads/FakeWorker.js +0 -67
- package/build/testDoubles/WorkerThreads/FakeWorker.js.map +0 -1
- package/src/consts.ts +0 -21
- package/src/impl/workers/inlet/LslStreamInlet.worker.ts +0 -74
- package/src/impl/workers/inlet/StreamInletWorker.ts +0 -348
- package/src/impl/workers/outlet/LslStreamOutlet.worker.ts +0 -144
- package/src/scripts/discoverMuse.ts +0 -50
- package/src/scripts/testDestroyOutlet.ts +0 -5
- package/src/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.ts +0 -31
- package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +0 -10
- package/src/testDoubles/UsbController/FakeUsbController.ts +0 -34
- package/src/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.ts +0 -9
- package/src/testDoubles/WorkerThreads/FakeWorker.ts +0 -99
- /package/build/impl/{WindowedClockRegressor.d.ts → clocks/WindowedClockRegressor.d.ts} +0 -0
- /package/build/impl/{WindowedClockRegressor.js → clocks/WindowedClockRegressor.js} +0 -0
- /package/build/scripts/{discoverMuse.d.ts → runEventMarkerOutlet.d.ts} +0 -0
- /package/build/scripts/{runLslEventMarkerEmitter.d.ts → runLslOutlet.d.ts} +0 -0
- /package/src/impl/{WindowedClockRegressor.ts → clocks/WindowedClockRegressor.ts} +0 -0
- /package/src/scripts/{runLslStreamOutlet.ts → runLslOutlet.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChannelFormat, InfoHandle } from '@neurodevs/ndx-native';
|
|
2
|
-
export default class LslStreamInfo implements
|
|
3
|
-
static Class?:
|
|
2
|
+
export default class LslStreamInfo implements LslInfo {
|
|
3
|
+
static Class?: LslInfoConstructor;
|
|
4
4
|
readonly name: string;
|
|
5
5
|
readonly type: string;
|
|
6
6
|
readonly sourceId: string;
|
|
@@ -11,14 +11,14 @@ export default class LslStreamInfo implements StreamInfo {
|
|
|
11
11
|
readonly units: string;
|
|
12
12
|
readonly infoHandle: InfoHandle;
|
|
13
13
|
private lsl;
|
|
14
|
-
protected constructor(options:
|
|
15
|
-
static Create(options:
|
|
14
|
+
protected constructor(options: LslInfoOptions);
|
|
15
|
+
static Create(options: LslInfoOptions): LslInfo;
|
|
16
16
|
private createStreamInfo;
|
|
17
17
|
private get lslChannelFormat();
|
|
18
18
|
private appendChannelsToStreamInfo;
|
|
19
19
|
destroy(): void;
|
|
20
20
|
}
|
|
21
|
-
export interface
|
|
21
|
+
export interface LslInfo {
|
|
22
22
|
destroy(): void;
|
|
23
23
|
readonly name: string;
|
|
24
24
|
readonly type: string;
|
|
@@ -30,8 +30,8 @@ export interface StreamInfo {
|
|
|
30
30
|
readonly sampleRateHz: number;
|
|
31
31
|
readonly infoHandle: InfoHandle;
|
|
32
32
|
}
|
|
33
|
-
export type
|
|
34
|
-
export interface
|
|
33
|
+
export type LslInfoConstructor = new (options: LslInfoOptions) => LslInfo;
|
|
34
|
+
export interface LslInfoOptions {
|
|
35
35
|
channelNames: string[];
|
|
36
36
|
channelFormat: ChannelFormat;
|
|
37
37
|
sampleRateHz: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslStreamInfo.js","sourceRoot":"","sources":["../../src/impl/LslStreamInfo.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAGH,aAAa,EACb,mBAAmB,GACtB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,CAAC,OAAO,OAAO,aAAa;IACvB,MAAM,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"LslStreamInfo.js","sourceRoot":"","sources":["../../src/impl/LslStreamInfo.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAGH,aAAa,EACb,mBAAmB,GACtB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,CAAC,OAAO,OAAO,aAAa;IACvB,MAAM,CAAC,KAAK,CAAqB;IAExB,IAAI,CAAQ;IACZ,IAAI,CAAQ;IACZ,QAAQ,CAAQ;IAChB,YAAY,CAAU;IACtB,YAAY,CAAQ;IACpB,aAAa,CAAe;IAC5B,YAAY,CAAQ;IACpB,KAAK,CAAQ;IAEb,UAAU,CAAY;IAE9B,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAEzC,YAAsB,OAAuB;QACzC,MAAM,EACF,IAAI,GAAG,mBAAmB,UAAU,EAAE,EAAE,EACxC,IAAI,GAAG,UAAU,EAAE,EACnB,QAAQ,GAAG,UAAU,EAAE,EACvB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,GAAG,KAAK,GAChB,GAAG,OAAO,CAAA;QAEX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,MAAM,CAAA;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACzC,IAAI,CAAC,0BAA0B,EAAE,CAAA;IACrC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAuB;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEO,gBAAgB;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,gBAAgB;YACpC,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC,CAAA;IACN,CAAC;IAED,IAAY,gBAAgB;QACxB,OAAO,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC;IAEO,0BAA0B;QAC9B,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;YAChC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;gBAChD,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC,CAAC;SACN,CAAC,CAAA;IACN,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IAC/D,CAAC;CACJ"}
|
|
@@ -1,49 +1,91 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
static
|
|
1
|
+
import { handleLslError } from '@neurodevs/ndx-native';
|
|
2
|
+
import { freePointer } from 'ffi-rs';
|
|
3
|
+
export default class LslStreamInlet implements LslInlet {
|
|
4
|
+
static Class?: LslInletConstructor;
|
|
5
5
|
static waitAfterOpenStreamMs: number;
|
|
6
|
-
static
|
|
6
|
+
static lsl: import("@neurodevs/ndx-native").Liblsl;
|
|
7
|
+
static handleLslError: typeof handleLslError;
|
|
8
|
+
static freePointer: typeof freePointer;
|
|
9
|
+
isRunning: boolean;
|
|
7
10
|
private sourceId;
|
|
8
11
|
private chunkSize;
|
|
9
12
|
private maxBufferedMs;
|
|
10
13
|
private pullTimeoutMs;
|
|
11
14
|
private openStreamTimeoutMs;
|
|
12
|
-
private waitAfterOpenStreamMs;
|
|
13
15
|
private waitBetweenPullsMs;
|
|
14
16
|
private flushInletOnStop;
|
|
15
17
|
private onData;
|
|
16
|
-
private
|
|
17
|
-
private
|
|
18
|
+
private infoHandle;
|
|
19
|
+
private inletHandle;
|
|
20
|
+
private channelCount;
|
|
21
|
+
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;
|
|
18
34
|
private readonly sixMinutesInMs;
|
|
19
35
|
private readonly aboutOneYearInMs;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
36
|
+
private readonly bytesPerFloat;
|
|
37
|
+
private readonly bytesPerDouble;
|
|
38
|
+
private readonly bytesPerI32;
|
|
39
|
+
protected constructor(options: LslInletOptions, onData: OnDataCallback);
|
|
40
|
+
static Create(options: LslInletOptions, onData: OnDataCallback): Promise<LslInlet>;
|
|
24
41
|
startPulling(): Promise<void>;
|
|
25
|
-
private
|
|
26
|
-
private
|
|
27
|
-
|
|
42
|
+
private createInlet;
|
|
43
|
+
private resolveInfoHandle;
|
|
44
|
+
private resolveByProp;
|
|
45
|
+
private throwNoStreamFound;
|
|
46
|
+
private warnMultipleStreamsFound;
|
|
47
|
+
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
|
+
private openStream;
|
|
62
|
+
private pullLoop;
|
|
63
|
+
private pullDataOnce;
|
|
64
|
+
private handleLslErrorIfPresent;
|
|
65
|
+
private waitBetweenPulls;
|
|
28
66
|
flushInlet(): void;
|
|
67
|
+
stopPulling(): void;
|
|
68
|
+
private closeStream;
|
|
29
69
|
destroy(): void;
|
|
30
|
-
private
|
|
31
|
-
private
|
|
70
|
+
private doDestroyInlet;
|
|
71
|
+
private freeNativePointers;
|
|
72
|
+
private get lsl();
|
|
73
|
+
private get handleLslError();
|
|
74
|
+
private get freePointer();
|
|
32
75
|
}
|
|
33
|
-
export interface
|
|
76
|
+
export interface LslInlet {
|
|
34
77
|
startPulling(): Promise<void>;
|
|
35
78
|
stopPulling(): void;
|
|
36
79
|
flushInlet(): void;
|
|
37
80
|
destroy(): void;
|
|
38
81
|
readonly isRunning: boolean;
|
|
39
82
|
}
|
|
40
|
-
export type
|
|
41
|
-
export interface
|
|
83
|
+
export type LslInletConstructor = new (options: LslInletOptions, onData: OnDataCallback) => LslInlet;
|
|
84
|
+
export interface LslInletOptions {
|
|
42
85
|
sourceId: string;
|
|
43
86
|
chunkSize: number;
|
|
44
87
|
maxBufferedMs?: number;
|
|
45
88
|
openStreamTimeoutMs?: number;
|
|
46
|
-
waitAfterOpenStreamMs?: number;
|
|
47
89
|
pullTimeoutMs?: number;
|
|
48
90
|
waitBetweenPullsMs?: number;
|
|
49
91
|
flushInletOnStop?: boolean;
|
|
@@ -1,112 +1,268 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { handleLslError, LiblslAdapter, } from '@neurodevs/ndx-native';
|
|
2
|
+
import { unwrapPointer, createPointer, DataType, freePointer, PointerType, } from 'ffi-rs';
|
|
2
3
|
export default class LslStreamInlet {
|
|
3
4
|
static Class;
|
|
4
|
-
static Worker = Worker;
|
|
5
5
|
static waitAfterOpenStreamMs = 100;
|
|
6
|
-
static
|
|
6
|
+
static lsl = LiblslAdapter.getInstance();
|
|
7
|
+
static handleLslError = handleLslError;
|
|
8
|
+
static freePointer = freePointer;
|
|
9
|
+
isRunning = false;
|
|
7
10
|
sourceId;
|
|
8
11
|
chunkSize;
|
|
9
12
|
maxBufferedMs;
|
|
10
13
|
pullTimeoutMs;
|
|
11
14
|
openStreamTimeoutMs;
|
|
12
|
-
waitAfterOpenStreamMs;
|
|
13
15
|
waitBetweenPullsMs;
|
|
14
16
|
flushInletOnStop;
|
|
15
17
|
onData;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
infoHandle;
|
|
19
|
+
inletHandle;
|
|
20
|
+
channelCount;
|
|
21
|
+
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;
|
|
18
34
|
sixMinutesInMs = 360 * 1000;
|
|
19
35
|
aboutOneYearInMs = 32000000 * 1000;
|
|
20
|
-
|
|
36
|
+
bytesPerFloat = 4;
|
|
37
|
+
bytesPerDouble = 8;
|
|
38
|
+
bytesPerI32 = 4;
|
|
21
39
|
constructor(options, onData) {
|
|
22
|
-
const { sourceId, chunkSize, maxBufferedMs, pullTimeoutMs, openStreamTimeoutMs,
|
|
40
|
+
const { sourceId, chunkSize, maxBufferedMs, pullTimeoutMs, openStreamTimeoutMs, waitBetweenPullsMs, flushInletOnStop, } = options ?? {};
|
|
23
41
|
this.sourceId = sourceId;
|
|
24
42
|
this.chunkSize = chunkSize;
|
|
25
43
|
this.maxBufferedMs = maxBufferedMs ?? this.sixMinutesInMs;
|
|
26
44
|
this.pullTimeoutMs = pullTimeoutMs ?? 0;
|
|
27
45
|
this.openStreamTimeoutMs = openStreamTimeoutMs ?? this.aboutOneYearInMs;
|
|
28
|
-
this.waitAfterOpenStreamMs = waitAfterOpenStreamMs ?? this.defaultWaitMs;
|
|
29
46
|
this.waitBetweenPullsMs = waitBetweenPullsMs ?? 1;
|
|
30
47
|
this.flushInletOnStop = flushInletOnStop ?? true;
|
|
31
48
|
this.onData = onData;
|
|
32
|
-
this.createWorkerThread();
|
|
33
49
|
}
|
|
34
50
|
static async Create(options, onData) {
|
|
35
51
|
return new (this.Class ?? this)(options, onData);
|
|
36
52
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
async startPulling() {
|
|
54
|
+
if (this.isRunning) {
|
|
55
|
+
console.warn('Skipping startPulling: inlet is already running!');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.isRunning = true;
|
|
59
|
+
await this.createInlet();
|
|
60
|
+
void this.pullLoop();
|
|
61
|
+
}
|
|
62
|
+
async createInlet() {
|
|
63
|
+
this.infoHandle = this.resolveInfoHandle();
|
|
64
|
+
this.inletHandle = this.doCreateInlet();
|
|
65
|
+
this.channelCount = this.getChannelCount();
|
|
66
|
+
this.allocateWritableBuffers();
|
|
67
|
+
this.setPullMethod();
|
|
68
|
+
this.openStream();
|
|
69
|
+
}
|
|
70
|
+
resolveInfoHandle() {
|
|
71
|
+
const handles = this.resolveByProp();
|
|
72
|
+
if (handles.length === 0) {
|
|
73
|
+
this.throwNoStreamFound();
|
|
74
|
+
}
|
|
75
|
+
else if (handles.length > 1) {
|
|
76
|
+
this.warnMultipleStreamsFound();
|
|
77
|
+
}
|
|
78
|
+
return handles[0];
|
|
79
|
+
}
|
|
80
|
+
resolveByProp() {
|
|
81
|
+
return this.lsl.resolveByProp({
|
|
82
|
+
prop: 'source_id',
|
|
83
|
+
value: this.sourceId,
|
|
59
84
|
});
|
|
60
85
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
86
|
+
throwNoStreamFound() {
|
|
87
|
+
throw new Error(`No stream info for sourceId "${this.sourceId}"`);
|
|
88
|
+
}
|
|
89
|
+
warnMultipleStreamsFound() {
|
|
90
|
+
console.warn(`Multiple stream infos for sourceId "${this.sourceId}", using the first one.`);
|
|
91
|
+
}
|
|
92
|
+
doCreateInlet() {
|
|
93
|
+
return this.lsl.createInlet({
|
|
94
|
+
infoHandle: this.infoHandle,
|
|
95
|
+
maxBufferedMs: this.maxBufferedMs,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
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
|
+
};
|
|
69
150
|
}
|
|
70
|
-
|
|
71
|
-
|
|
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
|
+
};
|
|
72
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
|
+
});
|
|
73
186
|
}
|
|
74
|
-
|
|
75
|
-
this.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
pullTimeoutMs: this.pullTimeoutMs,
|
|
84
|
-
waitBetweenPullsMs: this.waitBetweenPullsMs,
|
|
85
|
-
flushInletOnStop: this.flushInletOnStop,
|
|
86
|
-
},
|
|
187
|
+
readTimestampsFromBuffer() {
|
|
188
|
+
const doubles = new Float64Array(this.timestampBuffer.buffer, this.timestampBuffer.byteOffset, this.chunkSize);
|
|
189
|
+
return Array.from(doubles);
|
|
190
|
+
}
|
|
191
|
+
openStream() {
|
|
192
|
+
this.lsl.openStream({
|
|
193
|
+
inletHandle: this.inletHandle,
|
|
194
|
+
timeoutMs: this.openStreamTimeoutMs,
|
|
195
|
+
errorCodePtr: this.openStreamErrorBufferPtr,
|
|
87
196
|
});
|
|
88
197
|
}
|
|
89
|
-
|
|
90
|
-
this.
|
|
198
|
+
async pullLoop() {
|
|
199
|
+
while (this.isRunning) {
|
|
200
|
+
await this.pullDataOnce();
|
|
201
|
+
await this.waitBetweenPulls();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async pullDataOnce() {
|
|
205
|
+
const { samples, timestamps } = this.pullMethod();
|
|
206
|
+
this.handleLslErrorIfPresent();
|
|
207
|
+
if (samples && timestamps) {
|
|
208
|
+
this.onData(samples, timestamps);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
handleLslErrorIfPresent() {
|
|
212
|
+
const errorCode = this.pullErrorBuffer.readInt32LE();
|
|
213
|
+
this.handleLslError(errorCode);
|
|
214
|
+
}
|
|
215
|
+
async waitBetweenPulls() {
|
|
216
|
+
await new Promise((r) => setTimeout(r, this.waitBetweenPullsMs));
|
|
217
|
+
}
|
|
218
|
+
flushInlet() {
|
|
219
|
+
this.lsl.flushInlet({ inletHandle: this.inletHandle });
|
|
91
220
|
}
|
|
92
221
|
stopPulling() {
|
|
93
222
|
this.isRunning = false;
|
|
94
|
-
this.
|
|
223
|
+
this.closeStream();
|
|
224
|
+
if (this.flushInletOnStop) {
|
|
225
|
+
this.flushInlet();
|
|
226
|
+
}
|
|
95
227
|
}
|
|
96
|
-
|
|
97
|
-
this.
|
|
228
|
+
closeStream() {
|
|
229
|
+
this.lsl.closeStream({ inletHandle: this.inletHandle });
|
|
98
230
|
}
|
|
99
231
|
destroy() {
|
|
100
232
|
if (this.isRunning) {
|
|
101
233
|
this.stopPulling();
|
|
102
234
|
}
|
|
103
|
-
this.
|
|
235
|
+
this.doDestroyInlet();
|
|
236
|
+
this.freeNativePointers();
|
|
237
|
+
}
|
|
238
|
+
doDestroyInlet() {
|
|
239
|
+
this.lsl.destroyInlet({ inletHandle: this.inletHandle });
|
|
240
|
+
}
|
|
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
|
+
});
|
|
257
|
+
}
|
|
258
|
+
get lsl() {
|
|
259
|
+
return LslStreamInlet.lsl;
|
|
104
260
|
}
|
|
105
|
-
get
|
|
106
|
-
return LslStreamInlet.
|
|
261
|
+
get handleLslError() {
|
|
262
|
+
return LslStreamInlet.handleLslError;
|
|
107
263
|
}
|
|
108
|
-
get
|
|
109
|
-
return LslStreamInlet.
|
|
264
|
+
get freePointer() {
|
|
265
|
+
return LslStreamInlet.freePointer;
|
|
110
266
|
}
|
|
111
267
|
}
|
|
112
268
|
//# 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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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
static Class?: StreamOutletConstructor;
|
|
5
|
-
static Worker: typeof Worker;
|
|
1
|
+
import { ChannelFormat, LslSample, handleLslError } from '@neurodevs/ndx-native';
|
|
2
|
+
export default class LslStreamOutlet implements LslOutlet {
|
|
3
|
+
static Class?: LslOutletConstructor;
|
|
6
4
|
static setTimeout: typeof setTimeout;
|
|
5
|
+
static lsl: import("@neurodevs/ndx-native").Liblsl;
|
|
6
|
+
static handleLslError: typeof handleLslError;
|
|
7
7
|
readonly name: string;
|
|
8
8
|
readonly type: string;
|
|
9
9
|
readonly sourceId: string;
|
|
@@ -15,23 +15,24 @@ export default class LslStreamOutlet implements StreamOutlet {
|
|
|
15
15
|
readonly maxBufferedMs: number;
|
|
16
16
|
readonly manufacturer: string;
|
|
17
17
|
readonly units: string;
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
private info;
|
|
19
|
+
private handle;
|
|
20
|
+
private pushSampleToLsl;
|
|
21
|
+
protected constructor(options: LslOutletOptions);
|
|
22
|
+
static Create(options: LslOutletOptions): Promise<LslOutlet>;
|
|
21
23
|
private validateOptions;
|
|
22
24
|
private validateChannelFormat;
|
|
23
25
|
private get isChannelFormatSupported();
|
|
24
26
|
private throwUnsupportedChannelFormat;
|
|
25
|
-
private createWorkerThread;
|
|
26
27
|
private createStreamOutlet;
|
|
28
|
+
private get lsl();
|
|
27
29
|
private get pushMethod();
|
|
28
30
|
private readonly methodMap;
|
|
29
31
|
pushSample(sample: LslSample, timestampSec?: number): void;
|
|
30
32
|
destroy(): void;
|
|
31
|
-
private get Worker();
|
|
32
33
|
private static waitForSetup;
|
|
33
34
|
}
|
|
34
|
-
export interface
|
|
35
|
+
export interface LslOutlet {
|
|
35
36
|
pushSample(sample: LslSample, timestampSec?: number): void;
|
|
36
37
|
destroy(): void;
|
|
37
38
|
readonly name: string;
|
|
@@ -46,11 +47,8 @@ export interface StreamOutlet {
|
|
|
46
47
|
readonly maxBufferedMs: number;
|
|
47
48
|
readonly manufacturer: string;
|
|
48
49
|
}
|
|
49
|
-
export type
|
|
50
|
-
export interface
|
|
51
|
-
waitAfterConstructionMs?: number;
|
|
52
|
-
}
|
|
53
|
-
export interface StreamOutletConstructorOptions {
|
|
50
|
+
export type LslOutletConstructor = new (options: LslOutletOptions) => LslOutlet;
|
|
51
|
+
export interface LslOutletOptions {
|
|
54
52
|
name: string;
|
|
55
53
|
type: string;
|
|
56
54
|
sourceId: string;
|
|
@@ -61,4 +59,6 @@ export interface StreamOutletConstructorOptions {
|
|
|
61
59
|
maxBufferedMs?: number;
|
|
62
60
|
manufacturer?: string;
|
|
63
61
|
units?: string;
|
|
62
|
+
waitAfterConstructionMs?: number;
|
|
64
63
|
}
|
|
64
|
+
export type LslOutletConstructorOptions = Omit<LslOutletOptions, 'waitAfterConstructionMs'>;
|