@neurodevs/node-lsl 16.0.3 → 16.1.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.js +0 -2
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/LiblslAdapter.test.d.ts +13 -0
- package/build/__tests__/impl/LiblslAdapter.test.js +87 -1
- package/build/__tests__/impl/LiblslAdapter.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamInfo.test.d.ts +2 -1
- package/build/__tests__/impl/LslStreamInfo.test.js +16 -6
- package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamInlet.test.js +2 -1
- package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
- package/build/__tests__/impl/LslWebSocketBridge.test.js +1 -0
- package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
- package/build/impl/LiblslAdapter.d.ts +14 -4
- package/build/impl/LiblslAdapter.js +49 -5
- package/build/impl/LiblslAdapter.js.map +1 -1
- package/build/impl/LslStreamInfo.d.ts +1 -1
- package/build/impl/LslStreamInfo.js +9 -20
- package/build/impl/LslStreamInfo.js.map +1 -1
- package/build/testDoubles/Liblsl/FakeLiblsl.d.ts +8 -4
- package/build/testDoubles/Liblsl/FakeLiblsl.js +12 -4
- package/build/testDoubles/Liblsl/FakeLiblsl.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/AbstractPackageTest.ts +0 -4
- package/src/__tests__/impl/LiblslAdapter.test.ts +118 -2
- package/src/__tests__/impl/LslStreamInfo.test.ts +20 -6
- package/src/__tests__/impl/LslStreamInlet.test.ts +2 -1
- package/src/__tests__/impl/LslWebSocketBridge.test.ts +1 -0
- package/src/impl/LiblslAdapter.ts +84 -11
- package/src/impl/LslStreamInfo.ts +9 -31
- package/src/testDoubles/Liblsl/FakeLiblsl.ts +18 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiblslAdapter.js","sourceRoot":"","sources":["../../src/impl/LiblslAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"LiblslAdapter.js","sourceRoot":"","sources":["../../src/impl/LiblslAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,QAAQ,EACR,MAAM,EAEN,IAAI,EACJ,IAAI,EACJ,aAAa,GAChB,MAAM,QAAQ,CAAA;AAKf,MAAM,CAAC,OAAO,OAAO,aAAa;IACvB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IAE1B,MAAM,CAAC,QAAQ,CAAS;IAEzB,UAAU,CAAQ;IACjB,QAAQ,CAAiB;IAEhB,gBAAgB,GAAG,yDAAyD,CAAA;IAE7F;QACI,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAA;QAClE,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC5B,CAAC;IAEO,iBAAiB;QACrB,IAAI,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,CAAA;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,uBAAuB,CAAC,KAAc,CAAC,CAAA;QAChD,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,KAAY;QACxC,MAAM,IAAI,KAAK,CACX,4DAA4D,IAAI,CAAC,UAAU,QAAQ,KAAK,CAAC,OAAO,MAAM,CACzG,CAAA;IACL,CAAC;IAEM,MAAM,CAAC,WAAW;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,QAAS,CAAA;IACzB,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,QAAgB;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;IAEM,MAAM,CAAC,aAAa;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAA;IACxB,CAAC;IAEO,YAAY;QAChB,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;IAC/C,CAAC;IAEO,UAAU;QACd,IAAI,CAAC,IAAI,CAAC;YACN,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,IAAI,CAAC,UAAU;SACxB,CAAC,CAAA;IACN,CAAC;IAEO,oBAAoB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAmB,CAAA;IAC1D,CAAC;IAEM,gBAAgB,CAAC,OAAgC;QACpD,MAAM,EACF,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,YAAY,GACf,GAAG,OAAO,CAAA;QAEX,OAAO,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACvC,IAAI;YACJ,IAAI;YACJ,YAAY;YACZ,YAAY;YACZ,aAAa;YACb,QAAQ;SACX,CAAC,CAAA;IACN,CAAC;IAEM,0BAA0B,CAC7B,OAA0C;QAE1C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAA;QAExE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;YACjE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBACjC,KAAK;gBACL,OAAO;gBACP,OAAO,CAAC,KAAK;aAChB,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;YACpE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QACvE,CAAC;IACL,CAAC;IAEM,iBAAiB,CAAC,OAAiC;QACtD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAChD,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAA6B;QACpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;QAEjE,MAAM,UAAU,GAAG,IAAI,CAAA;QACvB,MAAM,eAAe,GAAG,CAAC,CAAA;QAEzB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,eAAe,CAAC,CAAA;QAE9D,MAAM,gBAAgB,GAAG,aAAa,CAClC,aAAa,CAAC;YACV,UAAU,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC9B,WAAW,EAAE,CAAC,aAAa,CAAC;SAC/B,CAAC,CACL,CAAC,CAAC,CAAC,CAAA;QAEJ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC/B,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,oBAAoB;YAC9B,OAAO,EAAE,QAAQ,CAAC,GAAG;YACrB,UAAU,EAAE;gBACR,QAAQ,CAAC,QAAQ;gBACjB,QAAQ,CAAC,GAAG;gBACZ,QAAQ,CAAC,MAAM;gBACf,QAAQ,CAAC,MAAM;gBACf,QAAQ,CAAC,GAAG;gBACZ,QAAQ,CAAC,MAAM;aAClB;YACD,WAAW,EAAE;gBACT,gBAAgB;gBAChB,UAAU;gBACV,IAAI;gBACJ,KAAK;gBACL,UAAU;gBACV,SAAS,GAAG,IAAI;aACnB;YACD,cAAc,EAAE,IAAI;SACvB,CAAC,CAAA;QAEF,MAAM,OAAO,GAAa,EAAE,CAAA;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,CAAA;YAEjE,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACxB,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAA;IAClB,CAAC;IAEM,YAAY,CAAC,OAA4B;QAC5C,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;QAElD,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACnC,IAAI;YACJ,SAAS;YACT,aAAa,GAAG,IAAI;SACvB,CAAC,CAAA;IACN,CAAC;IAEM,wBAAwB,CAAC,OAAwC;QACpE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;IACxE,CAAC;IAEM,yBAAyB,CAC5B,OAAyC;QAEzC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;IAC1E,CAAC;IAEM,aAAa,CAAC,OAA6B;QAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QAC1B,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9C,CAAC;IAEM,WAAW,CAAC,OAA2B;QAC1C,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;QAEvC,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAClC,IAAI;YACJ,aAAa,GAAG,IAAI;YACpB,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,aAAa;SACrB,CAAC,CAAA;IACN,CAAC;IAEgB,YAAY,GAAG,CAAC,CAAA;IAChB,aAAa,GAAG,CAAC,CAAA;IAE3B,UAAU,CAAC,OAA0B;QACxC,MAAM,EACF,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,OAAO,EACP,UAAU,GACb,GAAG,OAAO,CAAA;QAEX,OAAO,IAAI,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,QAAQ,CAAC,MAAM;YACxB,UAAU,EAAE;gBACR,QAAQ,CAAC,QAAQ;gBACjB,QAAQ,CAAC,QAAQ;gBACjB,QAAQ,CAAC,GAAG;gBACZ,QAAQ,CAAC,MAAM;gBACf,QAAQ,CAAC,QAAQ;aACpB;YACD,WAAW,EAAE;gBACT,KAAK;gBACL,aAAa;gBACb,kBAAkB;gBAClB,OAAO;gBACP,UAAU;aACb;SACJ,CAAC,CAAA;IACN,CAAC;IAEM,SAAS,CAAC,OAAyB;QACtC,MAAM,EACF,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,OAAO,EACP,UAAU,GACb,GAAG,OAAO,CAAA;QAEX,OAAO,IAAI,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,kBAAkB;YAC5B,OAAO,EAAE,QAAQ,CAAC,MAAM;YACxB,UAAU,EAAE;gBACR,QAAQ,CAAC,QAAQ;gBACjB,QAAQ,CAAC,QAAQ;gBACjB,QAAQ,CAAC,QAAQ;gBACjB,QAAQ,CAAC,GAAG;gBACZ,QAAQ,CAAC,GAAG;gBACZ,QAAQ,CAAC,MAAM;gBACf,QAAQ,CAAC,QAAQ;aACpB;YACD,WAAW,EAAE;gBACT,KAAK;gBACL,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,aAAa,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,kBAAkB;gBAClB,uBAAuB;gBACvB,OAAO;gBACP,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aACjC;SACJ,CAAC,CAAA;IACN,CAAC;IAEM,UAAU,CAAC,OAA0B;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QACzB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1C,CAAC;IAEM,YAAY,CAAC,OAA4B;QAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QACzB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5C,CAAC;IAEM,UAAU;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,IAAY,IAAI;QACZ,OAAO,aAAa,CAAC,IAAI,CAAA;IAC7B,CAAC;IAED,IAAY,MAAM;QACd,OAAO,aAAa,CAAC,MAAM,CAAA;IAC/B,CAAC;IAED,IAAY,IAAI;QACZ,OAAO,aAAa,CAAC,IAAI,CAAA;IAC7B,CAAC;IAED,IAAY,KAAK;QACb,OAAO,aAAa,CAAC,KAAK,CAAA;IAC9B,CAAC;IAED,IAAY,WAAW;QACnB,OAAO;YACH,qBAAqB,EAAE;gBACnB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,UAAU,EAAE;oBACR,QAAQ,CAAC,MAAM;oBACf,QAAQ,CAAC,MAAM;oBACf,QAAQ,CAAC,GAAG;oBACZ,QAAQ,CAAC,MAAM;oBACf,QAAQ,CAAC,GAAG;oBACZ,QAAQ,CAAC,MAAM;iBAClB;aACJ;YACD,sBAAsB,EAAE;gBACpB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,IAAI;gBACtB,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAClC;YACD,iBAAiB,EAAE;gBACf,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC;aAC9D;YACD,kBAAkB,EAAE;gBAChB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,GAAG;gBACrB,UAAU,EAAE;oBACR,QAAQ,CAAC,QAAQ;oBACjB,QAAQ,CAAC,UAAU;oBACnB,QAAQ,CAAC,MAAM;iBAClB;aACJ;YACD,oBAAoB,EAAE;gBAClB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,GAAG;gBACrB,UAAU,EAAE;oBACR,QAAQ,CAAC,QAAQ;oBACjB,QAAQ,CAAC,WAAW;oBACpB,QAAQ,CAAC,MAAM;iBAClB;aACJ;YACD,kBAAkB,EAAE;gBAChB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,IAAI;gBACtB,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAClC;YACD,gBAAgB,EAAE;gBACd,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,UAAU,EAAE;oBACR,QAAQ,CAAC,QAAQ;oBACjB,QAAQ,CAAC,GAAG;oBACZ,QAAQ,CAAC,GAAG;oBACZ,QAAQ,CAAC,GAAG;iBACf;aACJ;YACD,eAAe,EAAE;gBACb,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,GAAG;gBACrB,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAClC;YACD,iBAAiB,EAAE;gBACf,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,IAAI;gBACtB,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAClC;YACD,YAAY,EAAE;gBACV,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAClC;YACD,gBAAgB,EAAE;gBACd,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;aACnD;YACD,sBAAsB,EAAE;gBACpB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,UAAU,EAAE;oBACR,QAAQ,CAAC,QAAQ;oBACjB,QAAQ,CAAC,MAAM;oBACf,QAAQ,CAAC,MAAM;iBAClB;aACJ;YACD,eAAe,EAAE;gBACb,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ,CAAC,MAAM;gBACxB,UAAU,EAAE,EAAE;aACjB;SACJ,CAAA;IACL,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { BoundStreamInfo, ChannelFormat } from './LiblslAdapter.js';
|
|
2
2
|
export default class LslStreamInfo implements StreamInfo {
|
|
3
3
|
static Class?: StreamInfoConstructor;
|
|
4
|
-
private static instanceCache;
|
|
5
4
|
readonly name: string;
|
|
6
5
|
readonly type: string;
|
|
7
6
|
readonly sourceId: string;
|
|
@@ -45,5 +44,6 @@ export interface StreamInfoOptions {
|
|
|
45
44
|
type?: string;
|
|
46
45
|
sourceId?: string;
|
|
47
46
|
units?: string;
|
|
47
|
+
boundStreamInfo?: BoundStreamInfo;
|
|
48
48
|
}
|
|
49
49
|
export {};
|
|
@@ -3,7 +3,6 @@ import { CHANNEL_FORMATS_MAP } from '../consts.js';
|
|
|
3
3
|
import LiblslAdapter from './LiblslAdapter.js';
|
|
4
4
|
export default class LslStreamInfo {
|
|
5
5
|
static Class;
|
|
6
|
-
static instanceCache = {};
|
|
7
6
|
name;
|
|
8
7
|
type;
|
|
9
8
|
sourceId;
|
|
@@ -19,7 +18,7 @@ export default class LslStreamInfo {
|
|
|
19
18
|
defaultUnits = 'N/A';
|
|
20
19
|
lsl = LiblslAdapter.getInstance();
|
|
21
20
|
constructor(options) {
|
|
22
|
-
const { name = this.defaultName, type = this.defaultType, sourceId = this.defaultSourceId, channelNames, channelFormat, sampleRateHz, units = this.defaultUnits, } = options;
|
|
21
|
+
const { name = this.defaultName, type = this.defaultType, sourceId = this.defaultSourceId, channelNames, channelFormat, sampleRateHz, units = this.defaultUnits, boundStreamInfo, } = options;
|
|
23
22
|
this.name = name;
|
|
24
23
|
this.type = type;
|
|
25
24
|
this.sourceId = sourceId;
|
|
@@ -28,26 +27,16 @@ export default class LslStreamInfo {
|
|
|
28
27
|
this.channelFormat = channelFormat;
|
|
29
28
|
this.sampleRateHz = sampleRateHz;
|
|
30
29
|
this.units = units;
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
if (!boundStreamInfo) {
|
|
31
|
+
this.createStreamInfo();
|
|
32
|
+
this.appendChannelsToStreamInfo();
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this.boundInfo = boundStreamInfo;
|
|
36
|
+
}
|
|
33
37
|
}
|
|
34
38
|
static Create(options) {
|
|
35
|
-
|
|
36
|
-
const channelCount = channelNames.length;
|
|
37
|
-
const key = JSON.stringify({
|
|
38
|
-
name,
|
|
39
|
-
type,
|
|
40
|
-
sourceId,
|
|
41
|
-
channelCount,
|
|
42
|
-
channelFormat,
|
|
43
|
-
sampleRateHz,
|
|
44
|
-
});
|
|
45
|
-
let instance = this.instanceCache[key];
|
|
46
|
-
if (instance === undefined) {
|
|
47
|
-
instance = new (this.Class ?? this)(options);
|
|
48
|
-
this.instanceCache[key] = instance;
|
|
49
|
-
}
|
|
50
|
-
return instance;
|
|
39
|
+
return new (this.Class ?? this)(options);
|
|
51
40
|
}
|
|
52
41
|
createStreamInfo() {
|
|
53
42
|
this.boundInfo = this.lsl.createStreamInfo({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslStreamInfo.js","sourceRoot":"","sources":["../../src/impl/LslStreamInfo.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,aAAa,MAAM,oBAAoB,CAAA;AAE9C,MAAM,CAAC,OAAO,OAAO,aAAa;IACvB,MAAM,CAAC,KAAK,CAAwB;
|
|
1
|
+
{"version":3,"file":"LslStreamInfo.js","sourceRoot":"","sources":["../../src/impl/LslStreamInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { BoundOutlet, BoundStreamInfo, CreateStreamInfoOptions, AppendChannelsToStreamInfoOptions, CreateOutletOptions, PushSampleFloatTimestampOptions, PushSampleStringTimestampOptions, Liblsl, CreateInletOptions, DestroyInletOptions, BoundInlet, FlushInletOptions, PullChunkOptions, PullSampleOptions, DestroyStreamInfoOptions } from 'impl/LiblslAdapter.js';
|
|
1
|
+
import { BoundOutlet, BoundStreamInfo, CreateStreamInfoOptions, AppendChannelsToStreamInfoOptions, CreateOutletOptions, PushSampleFloatTimestampOptions, PushSampleStringTimestampOptions, Liblsl, CreateInletOptions, DestroyInletOptions, BoundInlet, FlushInletOptions, PullChunkOptions, PullSampleOptions, DestroyStreamInfoOptions, ResolveByPropOptions, DestroyOutletOptions } from 'impl/LiblslAdapter.js';
|
|
2
2
|
export default class FakeLiblsl implements Liblsl {
|
|
3
|
+
static fakeResolveHandles: bigint[];
|
|
3
4
|
static fakeSamples: Float32Array[];
|
|
4
5
|
static fakeChunks: Float32Array[];
|
|
5
6
|
static fakeTimestamps: Float64Array[];
|
|
@@ -11,12 +12,14 @@ export default class FakeLiblsl implements Liblsl {
|
|
|
11
12
|
outlet: BoundOutlet;
|
|
12
13
|
streamInfo: BoundStreamInfo;
|
|
13
14
|
lastCreateStreamInfoOptions?: CreateStreamInfoOptions;
|
|
14
|
-
lastDestroyStreamInfoOptions?: DestroyStreamInfoOptions;
|
|
15
15
|
lastAppendChannelsToStreamInfoOptions?: AppendChannelsToStreamInfoOptions;
|
|
16
|
+
lastDestroyStreamInfoOptions?: DestroyStreamInfoOptions;
|
|
17
|
+
lastResolveByPropOptions?: ResolveByPropOptions;
|
|
16
18
|
lastCreateOutletOptions?: CreateOutletOptions;
|
|
17
19
|
lastPushSampleFloatTimestampOptions?: PushSampleFloatTimestampOptions;
|
|
18
20
|
lastPushSampleStringTimestampOptions?: PushSampleStringTimestampOptions;
|
|
19
21
|
lastCreateInletOptions?: CreateInletOptions;
|
|
22
|
+
lastDestroyOutletOptions?: DestroyOutletOptions;
|
|
20
23
|
lastPullSampleOptions?: PullSampleOptions;
|
|
21
24
|
lastPullChunkOptions?: PullChunkOptions;
|
|
22
25
|
lastFlushInletOptions?: FlushInletOptions;
|
|
@@ -30,12 +33,13 @@ export default class FakeLiblsl implements Liblsl {
|
|
|
30
33
|
localClockHitCount: number;
|
|
31
34
|
pushSampleStringTimestampHitCount: number;
|
|
32
35
|
createStreamInfo(options: CreateStreamInfoOptions): BoundStreamInfo;
|
|
33
|
-
destroyStreamInfo(options: DestroyStreamInfoOptions): void;
|
|
34
36
|
appendChannelsToStreamInfo(options: AppendChannelsToStreamInfoOptions): void;
|
|
37
|
+
destroyStreamInfo(options: DestroyStreamInfoOptions): void;
|
|
38
|
+
resolveByProp(options: ResolveByPropOptions): Promise<bigint[]>;
|
|
35
39
|
pushSampleFloatTimestamp(options: PushSampleFloatTimestampOptions): number;
|
|
36
40
|
pushSampleStringTimestamp(options: PushSampleStringTimestampOptions): number;
|
|
37
41
|
createOutlet(options: CreateOutletOptions): BoundOutlet;
|
|
38
|
-
destroyOutlet(): void;
|
|
42
|
+
destroyOutlet(options: DestroyOutletOptions): void;
|
|
39
43
|
createInlet(options: CreateInletOptions): BoundInlet;
|
|
40
44
|
pullSample(options: PullSampleOptions): 0 | 1;
|
|
41
45
|
pullChunk(options: PullChunkOptions): 0 | 1;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import generateId from '@neurodevs/generate-id';
|
|
2
2
|
export default class FakeLiblsl {
|
|
3
|
+
static fakeResolveHandles = [];
|
|
3
4
|
static fakeSamples = [
|
|
4
5
|
new Float32Array([1, 2, 3]),
|
|
5
6
|
new Float32Array([4, 5, 6]),
|
|
@@ -20,12 +21,14 @@ export default class FakeLiblsl {
|
|
|
20
21
|
outlet = {};
|
|
21
22
|
streamInfo = {};
|
|
22
23
|
lastCreateStreamInfoOptions;
|
|
23
|
-
lastDestroyStreamInfoOptions;
|
|
24
24
|
lastAppendChannelsToStreamInfoOptions;
|
|
25
|
+
lastDestroyStreamInfoOptions;
|
|
26
|
+
lastResolveByPropOptions;
|
|
25
27
|
lastCreateOutletOptions;
|
|
26
28
|
lastPushSampleFloatTimestampOptions;
|
|
27
29
|
lastPushSampleStringTimestampOptions;
|
|
28
30
|
lastCreateInletOptions;
|
|
31
|
+
lastDestroyOutletOptions;
|
|
29
32
|
lastPullSampleOptions;
|
|
30
33
|
lastPullChunkOptions;
|
|
31
34
|
lastFlushInletOptions;
|
|
@@ -43,11 +46,15 @@ export default class FakeLiblsl {
|
|
|
43
46
|
this.lastCreateStreamInfoOptions = options;
|
|
44
47
|
return this.streamInfo;
|
|
45
48
|
}
|
|
49
|
+
appendChannelsToStreamInfo(options) {
|
|
50
|
+
this.lastAppendChannelsToStreamInfoOptions = options;
|
|
51
|
+
}
|
|
46
52
|
destroyStreamInfo(options) {
|
|
47
53
|
this.lastDestroyStreamInfoOptions = options;
|
|
48
54
|
}
|
|
49
|
-
|
|
50
|
-
this.
|
|
55
|
+
async resolveByProp(options) {
|
|
56
|
+
this.lastResolveByPropOptions = options;
|
|
57
|
+
return FakeLiblsl.fakeResolveHandles;
|
|
51
58
|
}
|
|
52
59
|
pushSampleFloatTimestamp(options) {
|
|
53
60
|
this.lastPushSampleFloatTimestampOptions = options;
|
|
@@ -63,8 +70,9 @@ export default class FakeLiblsl {
|
|
|
63
70
|
this.lastCreateOutletOptions = options;
|
|
64
71
|
return this.outlet;
|
|
65
72
|
}
|
|
66
|
-
destroyOutlet() {
|
|
73
|
+
destroyOutlet(options) {
|
|
67
74
|
this.destroyOutletHitCount++;
|
|
75
|
+
this.lastDestroyOutletOptions = options;
|
|
68
76
|
}
|
|
69
77
|
createInlet(options) {
|
|
70
78
|
this.createInletHitCount++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeLiblsl.js","sourceRoot":"","sources":["../../../src/testDoubles/Liblsl/FakeLiblsl.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"FakeLiblsl.js","sourceRoot":"","sources":["../../../src/testDoubles/Liblsl/FakeLiblsl.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -27,8 +27,6 @@ export default class AbstractPackageTest extends AbstractModuleTest {
|
|
|
27
27
|
|
|
28
28
|
protected static async beforeEach() {
|
|
29
29
|
await super.beforeEach()
|
|
30
|
-
|
|
31
|
-
this.setFakeLiblsl()
|
|
32
30
|
}
|
|
33
31
|
|
|
34
32
|
protected static setFakeLiblsl() {
|
|
@@ -46,8 +44,6 @@ export default class AbstractPackageTest extends AbstractModuleTest {
|
|
|
46
44
|
protected static setFakeStreamInfo() {
|
|
47
45
|
LslStreamInfo.Class = FakeStreamInfo
|
|
48
46
|
FakeStreamInfo.resetTestDouble()
|
|
49
|
-
|
|
50
|
-
LslStreamInfo['instanceCache'] = {}
|
|
51
47
|
}
|
|
52
48
|
|
|
53
49
|
protected static setSpyStreamInlet() {
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
Liblsl,
|
|
19
19
|
LiblslBindings,
|
|
20
20
|
LslChannel,
|
|
21
|
+
ResolveByPropOptions,
|
|
21
22
|
} from 'impl/LiblslAdapter.js'
|
|
22
23
|
import LiblslAdapter from '../../impl/LiblslAdapter.js'
|
|
23
24
|
import FakeLiblsl from '../../testDoubles/Liblsl/FakeLiblsl.js'
|
|
@@ -97,7 +98,7 @@ export default class LiblslAdapterTest extends AbstractPackageTest {
|
|
|
97
98
|
|
|
98
99
|
LiblslAdapter.load = (options) => {
|
|
99
100
|
this.ffiRsLoadOptions = options
|
|
100
|
-
return
|
|
101
|
+
return this.fakeNumResolveResults as any
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
LiblslAdapter.resetInstance()
|
|
@@ -265,6 +266,89 @@ export default class LiblslAdapterTest extends AbstractPackageTest {
|
|
|
265
266
|
)
|
|
266
267
|
}
|
|
267
268
|
|
|
269
|
+
@test()
|
|
270
|
+
protected static async resolvesStreamInfoByProp() {
|
|
271
|
+
await this.resolveByProp()
|
|
272
|
+
|
|
273
|
+
assert.isEqualDeep(
|
|
274
|
+
this.ffiRsLoadOptions,
|
|
275
|
+
{
|
|
276
|
+
library: 'lsl',
|
|
277
|
+
funcName: 'lsl_resolve_byprop',
|
|
278
|
+
retType: DataType.I32,
|
|
279
|
+
paramsType: [
|
|
280
|
+
DataType.External,
|
|
281
|
+
DataType.I32,
|
|
282
|
+
DataType.String,
|
|
283
|
+
DataType.String,
|
|
284
|
+
DataType.I32,
|
|
285
|
+
DataType.Double,
|
|
286
|
+
],
|
|
287
|
+
paramsValue: [
|
|
288
|
+
this.resultsBufferPtr,
|
|
289
|
+
this.maxResults,
|
|
290
|
+
this.prop,
|
|
291
|
+
this.value,
|
|
292
|
+
this.minResults,
|
|
293
|
+
this.timeoutMs / 1000,
|
|
294
|
+
],
|
|
295
|
+
runInNewThread: true,
|
|
296
|
+
},
|
|
297
|
+
'Did not call resolveByProp with expected params!'
|
|
298
|
+
)
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
@test()
|
|
302
|
+
protected static async resolveByPropAcceptsOptionalArgs() {
|
|
303
|
+
const minResults = randomInt(0, 10)
|
|
304
|
+
const timeoutMs = Math.random() * 1000
|
|
305
|
+
|
|
306
|
+
await this.resolveByProp({
|
|
307
|
+
minResults,
|
|
308
|
+
timeoutMs,
|
|
309
|
+
})
|
|
310
|
+
|
|
311
|
+
assert.isEqualDeep(
|
|
312
|
+
{
|
|
313
|
+
minResults: this.ffiRsLoadOptions?.['paramsValue']?.[4],
|
|
314
|
+
timeoutMs: this.ffiRsLoadOptions?.['paramsValue']?.[5],
|
|
315
|
+
},
|
|
316
|
+
{ minResults, timeoutMs: timeoutMs / 1000 },
|
|
317
|
+
'Did not call resolveByProp with expected params!'
|
|
318
|
+
)
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
@test()
|
|
322
|
+
protected static async returnsHandlesForResolvedStreamInfos() {
|
|
323
|
+
LiblslAdapter.alloc = (size: number) => {
|
|
324
|
+
const buffer = Buffer.alloc(size)
|
|
325
|
+
|
|
326
|
+
for (let i = 0; i < this.fakeNumResolveResults; i++) {
|
|
327
|
+
const offset = i * this.bytesPerPointer
|
|
328
|
+
buffer.writeBigUInt64LE(BigInt(i + 1), offset)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
return buffer
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
const expectedHandles: bigint[] = []
|
|
335
|
+
|
|
336
|
+
for (let i = 0; i < this.fakeNumResolveResults; i++) {
|
|
337
|
+
expectedHandles.push(BigInt(i + 1))
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
const actualHandles = await this.resolveByProp()
|
|
341
|
+
|
|
342
|
+
const actual = actualHandles.map((h) => h.toString())
|
|
343
|
+
const expected = expectedHandles.map((h) => h.toString())
|
|
344
|
+
|
|
345
|
+
assert.isEqualDeep(
|
|
346
|
+
actual,
|
|
347
|
+
expected,
|
|
348
|
+
'Did not receive expected resolved stream info handles!'
|
|
349
|
+
)
|
|
350
|
+
}
|
|
351
|
+
|
|
268
352
|
@test()
|
|
269
353
|
protected static async createsOutletWithRequiredParams() {
|
|
270
354
|
const { options, outlet } = this.createRandomOutlet()
|
|
@@ -401,7 +485,7 @@ export default class LiblslAdapterTest extends AbstractPackageTest {
|
|
|
401
485
|
delete process.env.LIBLSL_PATH
|
|
402
486
|
|
|
403
487
|
LiblslAdapter.resetInstance()
|
|
404
|
-
this.instance = LiblslAdapter.getInstance()
|
|
488
|
+
this.instance = LiblslAdapter.getInstance() as FakeLiblsl
|
|
405
489
|
|
|
406
490
|
assert.isEqual(
|
|
407
491
|
this.ffiRsOpenOptions?.path,
|
|
@@ -586,6 +670,18 @@ export default class LiblslAdapterTest extends AbstractPackageTest {
|
|
|
586
670
|
)
|
|
587
671
|
}
|
|
588
672
|
|
|
673
|
+
private static async resolveByProp(
|
|
674
|
+
options?: Partial<ResolveByPropOptions>
|
|
675
|
+
) {
|
|
676
|
+
return this.instance.resolveByProp({
|
|
677
|
+
prop: this.prop,
|
|
678
|
+
value: this.value,
|
|
679
|
+
minResults: this.minResults,
|
|
680
|
+
timeoutMs: this.timeoutMs,
|
|
681
|
+
...options,
|
|
682
|
+
})
|
|
683
|
+
}
|
|
684
|
+
|
|
589
685
|
private static createRandomOutlet() {
|
|
590
686
|
const options = this.createRandomOutletOptions()
|
|
591
687
|
const outlet = this.instance.createOutlet(options)
|
|
@@ -636,6 +732,26 @@ export default class LiblslAdapterTest extends AbstractPackageTest {
|
|
|
636
732
|
}
|
|
637
733
|
}
|
|
638
734
|
|
|
735
|
+
// resolveByProp
|
|
736
|
+
private static readonly maxResults = 1024
|
|
737
|
+
private static readonly bytesPerPointer = 8
|
|
738
|
+
private static readonly minResults = 1
|
|
739
|
+
private static readonly timeoutMs = 1000
|
|
740
|
+
private static readonly prop = this.generateId()
|
|
741
|
+
private static readonly value = this.generateId()
|
|
742
|
+
private static readonly fakeNumResolveResults = 2
|
|
743
|
+
|
|
744
|
+
private static readonly resultsBuffer = Buffer.alloc(
|
|
745
|
+
this.maxResults * this.bytesPerPointer
|
|
746
|
+
)
|
|
747
|
+
|
|
748
|
+
private static readonly resultsBufferPtr = unwrapPointer(
|
|
749
|
+
createPointer({
|
|
750
|
+
paramsType: [DataType.U8Array],
|
|
751
|
+
paramsValue: [this.resultsBuffer],
|
|
752
|
+
})
|
|
753
|
+
)[0]
|
|
754
|
+
|
|
639
755
|
private static generateFailedMessage() {
|
|
640
756
|
return `Loading the liblsl dylib failed! I tried to load it from ${process.env.LIBLSL_PATH}.`
|
|
641
757
|
}
|
|
@@ -11,10 +11,9 @@ export default class LslStreamInfoTest extends AbstractPackageTest {
|
|
|
11
11
|
protected static async beforeEach() {
|
|
12
12
|
await super.beforeEach()
|
|
13
13
|
|
|
14
|
+
this.setFakeLiblsl()
|
|
14
15
|
this.setSpyStreamInfo()
|
|
15
16
|
|
|
16
|
-
LslStreamInfo['instanceCache'] = {}
|
|
17
|
-
|
|
18
17
|
this.instance = this.LslStreamInfo()
|
|
19
18
|
}
|
|
20
19
|
|
|
@@ -220,13 +219,28 @@ export default class LslStreamInfoTest extends AbstractPackageTest {
|
|
|
220
219
|
}
|
|
221
220
|
|
|
222
221
|
@test()
|
|
223
|
-
protected static async
|
|
224
|
-
this.LslStreamInfo(
|
|
222
|
+
protected static async doesNotCreateNewStreamInfoIfPassedBoundStreamInfo() {
|
|
223
|
+
this.LslStreamInfo({
|
|
224
|
+
boundStreamInfo: this.instance.getBoundInfo(),
|
|
225
|
+
})
|
|
225
226
|
|
|
226
227
|
assert.isEqual(
|
|
227
|
-
|
|
228
|
+
this.fakeLiblsl.createStreamInfoHitCount,
|
|
228
229
|
1,
|
|
229
|
-
'
|
|
230
|
+
'Should not have created new stream info!'
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
@test()
|
|
235
|
+
protected static async setsBoundStreamInfoWhenPassed() {
|
|
236
|
+
const instance = this.LslStreamInfo({
|
|
237
|
+
boundStreamInfo: this.instance.getBoundInfo(),
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
assert.isEqualDeep(
|
|
241
|
+
instance.getBoundInfo(),
|
|
242
|
+
this.instance.getBoundInfo(),
|
|
243
|
+
'Should have set bound stream info!'
|
|
230
244
|
)
|
|
231
245
|
}
|
|
232
246
|
|
|
@@ -15,8 +15,9 @@ export default class LslStreamInletTest extends AbstractPackageTest {
|
|
|
15
15
|
protected static async beforeEach() {
|
|
16
16
|
await super.beforeEach()
|
|
17
17
|
|
|
18
|
-
this.
|
|
18
|
+
this.setFakeLiblsl()
|
|
19
19
|
this.setFakeStreamInfo()
|
|
20
|
+
this.setSpyStreamInlet()
|
|
20
21
|
|
|
21
22
|
this.callsToOnData = []
|
|
22
23
|
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createPointer,
|
|
3
|
+
DataType,
|
|
4
|
+
define,
|
|
5
|
+
JsExternal,
|
|
6
|
+
load,
|
|
7
|
+
open,
|
|
8
|
+
unwrapPointer,
|
|
9
|
+
} from 'ffi-rs'
|
|
2
10
|
|
|
3
11
|
import { CHANNEL_FORMATS } from '../consts.js'
|
|
4
12
|
import { LslErrorCode } from '../handleError.js'
|
|
@@ -7,6 +15,7 @@ export default class LiblslAdapter implements Liblsl {
|
|
|
7
15
|
public static open = open
|
|
8
16
|
public static define = define
|
|
9
17
|
public static load = load
|
|
18
|
+
public static alloc = Buffer.alloc
|
|
10
19
|
|
|
11
20
|
private static instance?: Liblsl
|
|
12
21
|
|
|
@@ -62,7 +71,7 @@ export default class LiblslAdapter implements Liblsl {
|
|
|
62
71
|
}
|
|
63
72
|
|
|
64
73
|
private defineLiblslBindings() {
|
|
65
|
-
return this.define(this.liblslFuncs) as
|
|
74
|
+
return this.define(this.liblslFuncs) as LiblslBindings
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
public createStreamInfo(options: CreateStreamInfoOptions) {
|
|
@@ -85,11 +94,6 @@ export default class LiblslAdapter implements Liblsl {
|
|
|
85
94
|
])
|
|
86
95
|
}
|
|
87
96
|
|
|
88
|
-
public destroyStreamInfo(options: DestroyStreamInfoOptions) {
|
|
89
|
-
const { info } = options
|
|
90
|
-
this.bindings.lsl_destroy_streaminfo([info])
|
|
91
|
-
}
|
|
92
|
-
|
|
93
97
|
public appendChannelsToStreamInfo(
|
|
94
98
|
options: AppendChannelsToStreamInfoOptions
|
|
95
99
|
) {
|
|
@@ -110,6 +114,62 @@ export default class LiblslAdapter implements Liblsl {
|
|
|
110
114
|
}
|
|
111
115
|
}
|
|
112
116
|
|
|
117
|
+
public destroyStreamInfo(options: DestroyStreamInfoOptions) {
|
|
118
|
+
const { info } = options
|
|
119
|
+
this.bindings.lsl_destroy_streaminfo([info])
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
public async resolveByProp(options: ResolveByPropOptions) {
|
|
123
|
+
const { prop, value, minResults = 1, timeoutMs = 1000 } = options
|
|
124
|
+
|
|
125
|
+
const maxResults = 1024
|
|
126
|
+
const bytesPerPointer = 8
|
|
127
|
+
|
|
128
|
+
const resultsBuffer = this.alloc(maxResults * bytesPerPointer)
|
|
129
|
+
|
|
130
|
+
const resultsBufferPtr = unwrapPointer(
|
|
131
|
+
createPointer({
|
|
132
|
+
paramsType: [DataType.U8Array],
|
|
133
|
+
paramsValue: [resultsBuffer],
|
|
134
|
+
})
|
|
135
|
+
)[0]
|
|
136
|
+
|
|
137
|
+
const numResults = await this.load({
|
|
138
|
+
library: 'lsl',
|
|
139
|
+
funcName: 'lsl_resolve_byprop',
|
|
140
|
+
retType: DataType.I32,
|
|
141
|
+
paramsType: [
|
|
142
|
+
DataType.External,
|
|
143
|
+
DataType.I32,
|
|
144
|
+
DataType.String,
|
|
145
|
+
DataType.String,
|
|
146
|
+
DataType.I32,
|
|
147
|
+
DataType.Double,
|
|
148
|
+
],
|
|
149
|
+
paramsValue: [
|
|
150
|
+
resultsBufferPtr,
|
|
151
|
+
maxResults,
|
|
152
|
+
prop,
|
|
153
|
+
value,
|
|
154
|
+
minResults,
|
|
155
|
+
timeoutMs / 1000,
|
|
156
|
+
],
|
|
157
|
+
runInNewThread: true,
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
const handles: bigint[] = []
|
|
161
|
+
|
|
162
|
+
for (let i = 0; i < numResults; i++) {
|
|
163
|
+
const handle = resultsBuffer.readBigUInt64LE(i * bytesPerPointer)
|
|
164
|
+
|
|
165
|
+
if (handle !== 0n) {
|
|
166
|
+
handles.push(handle)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return handles
|
|
171
|
+
}
|
|
172
|
+
|
|
113
173
|
public createOutlet(options: CreateOutletOptions) {
|
|
114
174
|
const { info, chunkSize, maxBufferedMs } = options
|
|
115
175
|
|
|
@@ -243,6 +303,10 @@ export default class LiblslAdapter implements Liblsl {
|
|
|
243
303
|
return LiblslAdapter.load
|
|
244
304
|
}
|
|
245
305
|
|
|
306
|
+
private get alloc() {
|
|
307
|
+
return LiblslAdapter.alloc
|
|
308
|
+
}
|
|
309
|
+
|
|
246
310
|
private get liblslFuncs() {
|
|
247
311
|
return {
|
|
248
312
|
lsl_create_streaminfo: {
|
|
@@ -345,6 +409,8 @@ export interface Liblsl {
|
|
|
345
409
|
destroyStreamInfo(options: DestroyStreamInfoOptions): void
|
|
346
410
|
appendChannelsToStreamInfo(options: AppendChannelsToStreamInfoOptions): void
|
|
347
411
|
|
|
412
|
+
resolveByProp(options: ResolveByPropOptions): Promise<bigint[]>
|
|
413
|
+
|
|
348
414
|
createOutlet(options: CreateOutletOptions): BoundOutlet
|
|
349
415
|
|
|
350
416
|
pushSampleFloatTimestamp(
|
|
@@ -382,14 +448,21 @@ export interface AppendChannelsToStreamInfoOptions {
|
|
|
382
448
|
channels: LslChannel[]
|
|
383
449
|
}
|
|
384
450
|
|
|
385
|
-
export interface
|
|
451
|
+
export interface DestroyStreamInfoOptions {
|
|
386
452
|
info: BoundStreamInfo
|
|
387
|
-
chunkSize: number
|
|
388
|
-
maxBufferedMs: number
|
|
389
453
|
}
|
|
390
454
|
|
|
391
|
-
export interface
|
|
455
|
+
export interface ResolveByPropOptions {
|
|
456
|
+
prop: string
|
|
457
|
+
value: string
|
|
458
|
+
minResults?: number
|
|
459
|
+
timeoutMs?: number
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
export interface CreateOutletOptions {
|
|
392
463
|
info: BoundStreamInfo
|
|
464
|
+
chunkSize: number
|
|
465
|
+
maxBufferedMs: number
|
|
393
466
|
}
|
|
394
467
|
|
|
395
468
|
export interface PushSampleFloatTimestampOptions {
|