@neurodevs/node-lsl 1.0.4 → 1.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/Liblsl.d.ts +16 -4
- package/build/Liblsl.js +14 -0
- package/build/Liblsl.js.map +1 -1
- package/build/__tests__/behavioral/LslOutlet.test.js +1 -0
- package/build/__tests__/behavioral/LslOutlet.test.js.map +1 -1
- package/build/__tests__/implementation/Liblsl.test.d.ts +10 -0
- package/build/__tests__/implementation/Liblsl.test.js +77 -1
- package/build/__tests__/implementation/Liblsl.test.js.map +1 -1
- package/package.json +1 -1
- package/src/Liblsl.ts +42 -5
- package/src/__tests__/behavioral/LslOutlet.test.ts +6 -0
- package/src/__tests__/implementation/Liblsl.test.ts +97 -6
package/build/Liblsl.d.ts
CHANGED
|
@@ -7,19 +7,19 @@ export default class LiblslImpl implements Liblsl {
|
|
|
7
7
|
static reset(): void;
|
|
8
8
|
static setInstance(instance: Liblsl): void;
|
|
9
9
|
constructor();
|
|
10
|
+
appendChannelsToStreamInfo(info: LslBindingsStreamInfo, channels: LslChannel[]): void;
|
|
10
11
|
private loadBindings;
|
|
11
12
|
pushSample(outlet: LslBindingsOutlet, sample: LslSample): void;
|
|
12
13
|
createOutlet(options: CreateOutletOptions): LslBindingsOutlet;
|
|
13
|
-
createStreamInfo(options: CreateStreamInfoOptions):
|
|
14
|
+
createStreamInfo(options: CreateStreamInfoOptions): LslBindingsStreamInfo;
|
|
14
15
|
}
|
|
15
16
|
export interface Liblsl {
|
|
17
|
+
appendChannelsToStreamInfo(info: LslBindingsStreamInfo, channels: LslChannel[]): void;
|
|
16
18
|
createStreamInfo(options: CreateStreamInfoOptions): LslBindingsStreamInfo;
|
|
17
19
|
createOutlet(options: CreateOutletOptions): LslBindingsOutlet;
|
|
18
20
|
pushSample(outlet: LslBindingsOutlet, sample: LslSample): void;
|
|
19
21
|
}
|
|
20
22
|
export type LslSample = (number | string | undefined)[];
|
|
21
|
-
export interface StreamInfo {
|
|
22
|
-
}
|
|
23
23
|
export interface CreateStreamInfoOptions {
|
|
24
24
|
name: string;
|
|
25
25
|
type: string;
|
|
@@ -30,14 +30,22 @@ export interface CreateStreamInfoOptions {
|
|
|
30
30
|
manufacturer?: string;
|
|
31
31
|
unit?: string;
|
|
32
32
|
}
|
|
33
|
+
export interface LslChannel {
|
|
34
|
+
label: string;
|
|
35
|
+
unit: string;
|
|
36
|
+
type: string;
|
|
37
|
+
}
|
|
33
38
|
export interface LiblslBindings {
|
|
34
39
|
lsl_create_streaminfo(name: string, type: string, channelCount: number, sampleRate: number, channelFormat: number, sourceId: string): LslBindingsStreamInfo;
|
|
35
40
|
lsl_create_outlet(info: LslBindingsStreamInfo, chunkSize: number, maxBuffered: number): LslBindingsOutlet;
|
|
36
41
|
lsl_push_sample_ft(outlet: LslBindingsOutlet, sample: LslSample, timestamp: number): void;
|
|
37
42
|
lsl_local_clock(): number;
|
|
43
|
+
lsl_get_desc(info: LslBindingsStreamInfo): LslBindingsDesc;
|
|
44
|
+
lsl_append_child(desc: LslBindingsDesc, name: string): LslBindingsChild;
|
|
45
|
+
lsl_append_child_value(child: LslBindingsChild, name: string, value: string): void;
|
|
38
46
|
}
|
|
39
47
|
export interface CreateOutletOptions {
|
|
40
|
-
info:
|
|
48
|
+
info: LslBindingsStreamInfo;
|
|
41
49
|
chunkSize: number;
|
|
42
50
|
maxBuffered: number;
|
|
43
51
|
}
|
|
@@ -45,3 +53,7 @@ export interface LslBindingsStreamInfo {
|
|
|
45
53
|
}
|
|
46
54
|
export interface LslBindingsOutlet {
|
|
47
55
|
}
|
|
56
|
+
export interface LslBindingsDesc {
|
|
57
|
+
}
|
|
58
|
+
export interface LslBindingsChild {
|
|
59
|
+
}
|
package/build/Liblsl.js
CHANGED
|
@@ -37,6 +37,16 @@ class LiblslImpl {
|
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
appendChannelsToStreamInfo(info, channels) {
|
|
41
|
+
(0, schema_1.assertOptions)({ info, channels }, ['info', 'channels']);
|
|
42
|
+
const desc = this.bindings.lsl_get_desc(info);
|
|
43
|
+
const parent = this.bindings.lsl_append_child(desc, 'channels');
|
|
44
|
+
for (const channel of channels) {
|
|
45
|
+
this.bindings.lsl_append_child_value(parent, 'label', channel.label);
|
|
46
|
+
this.bindings.lsl_append_child_value(parent, 'unit', channel.unit);
|
|
47
|
+
this.bindings.lsl_append_child_value(parent, 'type', channel.type);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
40
50
|
loadBindings(path) {
|
|
41
51
|
return LiblslImpl.ffi.Library(path, {
|
|
42
52
|
lsl_create_streaminfo: [
|
|
@@ -46,6 +56,9 @@ class LiblslImpl {
|
|
|
46
56
|
lsl_create_outlet: [outletType, [streamInfo, 'int', 'int']],
|
|
47
57
|
lsl_local_clock: ['double', []],
|
|
48
58
|
lsl_push_sample_ft: ['void', [outletType, FloatArray, 'double']],
|
|
59
|
+
lsl_get_desc: [xmlPtr, [streamInfo]],
|
|
60
|
+
lsl_append_child: [xmlPtr, [xmlPtr, 'string']],
|
|
61
|
+
lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
|
|
49
62
|
});
|
|
50
63
|
}
|
|
51
64
|
pushSample(outlet, sample) {
|
|
@@ -78,4 +91,5 @@ exports.default = LiblslImpl;
|
|
|
78
91
|
const streamInfo = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
79
92
|
const outletType = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
80
93
|
const FloatArray = (0, ref_array_napi_1.default)(ref_napi_1.default.types.float);
|
|
94
|
+
const xmlPtr = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
81
95
|
//# sourceMappingURL=Liblsl.js.map
|
package/build/Liblsl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Liblsl.js","sourceRoot":"","sources":["../src/Liblsl.ts"],"names":[],"mappings":";;;;;AAAA,+CAAkD;AAClD,wDAA0B;AAC1B,oEAAsC;AACtC,wDAA0B;AAC1B,uEAA8C;AAE9C,MAAqB,UAAU;IAKvB,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAA;SAC1B;QACD,OAAO,IAAI,CAAC,QAAS,CAAA;IACtB,CAAC;IAEM,MAAM,CAAC,KAAK;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAA;IACrB,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,QAAgB;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACzB,CAAC;IAED;QACC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAY,CAAA;QAErC,IAAI,CAAC,IAAI,EAAE;YACV,IAAA,sBAAa,EAAC,OAAO,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;SAC3C;QACD,IAAI;YACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;SACvC;QAAC,OAAO,GAAG,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,IAAI,qBAAW,CAAC;gBACrB,IAAI,EAAE,uBAAuB;gBAC7B,UAAU,EAAE,IAAI;aAChB,CAAC,CAAA;SACF;IACF,CAAC;IAEO,YAAY,CAAC,IAAY;QAChC,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAK,EAAE;YACpC,qBAAqB,EAAE;gBACtB,UAAU;gBACV,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC;aACtD;YACD,iBAAiB,EAAE,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3D,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC/B,kBAAkB,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Liblsl.js","sourceRoot":"","sources":["../src/Liblsl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAkC;AAClC,qEAK+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,16 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
6
6
|
private static fakeBindings;
|
|
7
7
|
private static fakeStreamInfo;
|
|
8
8
|
private static fakeOutlet;
|
|
9
|
+
private static fakeDesc;
|
|
10
|
+
private static fakeChildNamedChannels;
|
|
9
11
|
private static createStreamInfoParams?;
|
|
12
|
+
private static appendChildParams?;
|
|
10
13
|
private static createOutletParams?;
|
|
11
14
|
private static pushSampleParams?;
|
|
15
|
+
private static appendChildValueParams;
|
|
12
16
|
private static localClock;
|
|
13
17
|
private static shouldThrowWhenCreatingBindings;
|
|
18
|
+
private static getDescriptionParams?;
|
|
14
19
|
protected static beforeEach(): Promise<void>;
|
|
15
20
|
protected static throwsIfNoEnvSet(): Promise<void>;
|
|
16
21
|
protected static throwsHelpfulErrorWhenBindingsFailToLoad(): Promise<void>;
|
|
@@ -24,5 +29,10 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
24
29
|
protected static canCreateOutletWithRequiredParams(): Promise<void>;
|
|
25
30
|
protected static pushSampleThrowsWhenMissingRequiredParams(): Promise<void>;
|
|
26
31
|
protected static pushSampleCallsBindings(): Promise<void>;
|
|
32
|
+
protected static appendChannelsThrowsWithMissingParams(): Promise<void>;
|
|
33
|
+
protected static addingSingleChannelGetsDescription(): Promise<void>;
|
|
34
|
+
protected static addingMultpleChannelsAddsChildrenToChannelsChild(): Promise<void>;
|
|
35
|
+
private static generateRandomChannelValues;
|
|
36
|
+
private static createRandomStreamInfo;
|
|
27
37
|
private static generateRandomCreateStreamInfoOptions;
|
|
28
38
|
}
|
|
@@ -45,9 +45,14 @@ class LiblslTest extends test_utils_1.default {
|
|
|
45
45
|
delete this.createStreamInfoParams;
|
|
46
46
|
delete this.createOutletParams;
|
|
47
47
|
delete this.pushSampleParams;
|
|
48
|
+
delete this.getDescriptionParams;
|
|
49
|
+
delete this.appendChildParams;
|
|
50
|
+
this.appendChildValueParams = [];
|
|
48
51
|
process.env.LIBLSL_PATH = (0, test_utils_1.generateId)();
|
|
49
52
|
this.fakeStreamInfo = {};
|
|
53
|
+
this.fakeDesc = {};
|
|
50
54
|
this.fakeOutlet = {};
|
|
55
|
+
this.fakeChildNamedChannels = {};
|
|
51
56
|
this.localClock = new Date().getTime();
|
|
52
57
|
this.shouldThrowWhenCreatingBindings = false;
|
|
53
58
|
this.fakeBindings = {
|
|
@@ -64,6 +69,17 @@ class LiblslTest extends test_utils_1.default {
|
|
|
64
69
|
return 0;
|
|
65
70
|
},
|
|
66
71
|
lsl_local_clock: () => this.localClock,
|
|
72
|
+
lsl_get_desc: (info) => {
|
|
73
|
+
this.getDescriptionParams = [info];
|
|
74
|
+
return this.fakeDesc;
|
|
75
|
+
},
|
|
76
|
+
lsl_append_child: (...params) => {
|
|
77
|
+
this.appendChildParams = params;
|
|
78
|
+
return this.fakeChildNamedChannels;
|
|
79
|
+
},
|
|
80
|
+
lsl_append_child_value: (...params) => {
|
|
81
|
+
this.appendChildValueParams.push(params);
|
|
82
|
+
},
|
|
67
83
|
};
|
|
68
84
|
Liblsl_1.default.ffi = {
|
|
69
85
|
//@ts-ignore
|
|
@@ -117,6 +133,9 @@ class LiblslTest extends test_utils_1.default {
|
|
|
117
133
|
lsl_create_outlet: [outletType, [streamInfo, 'int', 'int']],
|
|
118
134
|
lsl_local_clock: ['double', []],
|
|
119
135
|
lsl_push_sample_ft: ['void', [outletType, FloatArray, 'double']],
|
|
136
|
+
lsl_get_desc: [xmlPtr, [streamInfo]],
|
|
137
|
+
lsl_append_child: [xmlPtr, [xmlPtr, 'string']],
|
|
138
|
+
lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
|
|
120
139
|
};
|
|
121
140
|
test_utils_1.assert.isEqual(JSON.stringify(this.libraryOptions), JSON.stringify(expected));
|
|
122
141
|
}
|
|
@@ -148,7 +167,7 @@ class LiblslTest extends test_utils_1.default {
|
|
|
148
167
|
});
|
|
149
168
|
}
|
|
150
169
|
static async canCreateOutletWithRequiredParams() {
|
|
151
|
-
const info = this.
|
|
170
|
+
const info = this.createRandomStreamInfo();
|
|
152
171
|
const options = {
|
|
153
172
|
info,
|
|
154
173
|
chunkSize: (0, crypto_1.randomInt)(10),
|
|
@@ -173,6 +192,52 @@ class LiblslTest extends test_utils_1.default {
|
|
|
173
192
|
test_utils_1.assert.isEqual((_b = this.pushSampleParams) === null || _b === void 0 ? void 0 : _b[1], expected);
|
|
174
193
|
test_utils_1.assert.isEqual((_c = this.pushSampleParams) === null || _c === void 0 ? void 0 : _c[2], this.localClock);
|
|
175
194
|
}
|
|
195
|
+
static async appendChannelsThrowsWithMissingParams() {
|
|
196
|
+
//@ts-ignore
|
|
197
|
+
const err = test_utils_1.assert.doesThrow(() => this.lsl.appendChannelsToStreamInfo());
|
|
198
|
+
test_utils_1.errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
199
|
+
parameters: ['info', 'channels'],
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
static async addingSingleChannelGetsDescription() {
|
|
203
|
+
var _a, _b, _c;
|
|
204
|
+
const info = this.createRandomStreamInfo();
|
|
205
|
+
const channel = this.generateRandomChannelValues();
|
|
206
|
+
this.lsl.appendChannelsToStreamInfo(info, [channel]);
|
|
207
|
+
test_utils_1.assert.isEqual((_a = this.getDescriptionParams) === null || _a === void 0 ? void 0 : _a[0], info);
|
|
208
|
+
test_utils_1.assert.isEqual((_b = this.appendChildParams) === null || _b === void 0 ? void 0 : _b[0], this.fakeDesc);
|
|
209
|
+
test_utils_1.assert.isEqual((_c = this.appendChildParams) === null || _c === void 0 ? void 0 : _c[1], 'channels');
|
|
210
|
+
test_utils_1.assert.isLength(this.appendChildValueParams, 3);
|
|
211
|
+
for (let i = 0; i < 3; i++) {
|
|
212
|
+
const param = this.appendChildValueParams[i];
|
|
213
|
+
test_utils_1.assert.isEqual(param[0], this.fakeChildNamedChannels);
|
|
214
|
+
}
|
|
215
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[0][1], 'label');
|
|
216
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[1][1], 'unit');
|
|
217
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[2][1], 'type');
|
|
218
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[0][2], channel.label);
|
|
219
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[1][2], channel.unit);
|
|
220
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[2][2], channel.type);
|
|
221
|
+
}
|
|
222
|
+
static async addingMultpleChannelsAddsChildrenToChannelsChild() {
|
|
223
|
+
const info = this.createRandomStreamInfo();
|
|
224
|
+
const channel1 = this.generateRandomChannelValues();
|
|
225
|
+
const channel2 = this.generateRandomChannelValues();
|
|
226
|
+
this.lsl.appendChannelsToStreamInfo(info, [channel1, channel2]);
|
|
227
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[3][2], channel2.label);
|
|
228
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[4][2], channel2.unit);
|
|
229
|
+
test_utils_1.assert.isEqual(this.appendChildValueParams[5][2], channel2.type);
|
|
230
|
+
}
|
|
231
|
+
static generateRandomChannelValues() {
|
|
232
|
+
return {
|
|
233
|
+
label: (0, test_utils_1.generateId)(),
|
|
234
|
+
type: (0, test_utils_1.generateId)(),
|
|
235
|
+
unit: (0, test_utils_1.generateId)(),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
static createRandomStreamInfo() {
|
|
239
|
+
return this.lsl.createStreamInfo(this.generateRandomCreateStreamInfoOptions());
|
|
240
|
+
}
|
|
176
241
|
static generateRandomCreateStreamInfoOptions() {
|
|
177
242
|
return {
|
|
178
243
|
name: (0, test_utils_1.generateId)(),
|
|
@@ -221,7 +286,17 @@ __decorate([
|
|
|
221
286
|
__decorate([
|
|
222
287
|
(0, test_utils_1.test)()
|
|
223
288
|
], LiblslTest, "pushSampleCallsBindings", null);
|
|
289
|
+
__decorate([
|
|
290
|
+
(0, test_utils_1.test)()
|
|
291
|
+
], LiblslTest, "appendChannelsThrowsWithMissingParams", null);
|
|
292
|
+
__decorate([
|
|
293
|
+
(0, test_utils_1.test)()
|
|
294
|
+
], LiblslTest, "addingSingleChannelGetsDescription", null);
|
|
295
|
+
__decorate([
|
|
296
|
+
(0, test_utils_1.test)()
|
|
297
|
+
], LiblslTest, "addingMultpleChannelsAddsChildrenToChannelsChild", null);
|
|
224
298
|
class FakeLiblsl {
|
|
299
|
+
appendChannelsToStreamInfo(_info, _channels) { }
|
|
225
300
|
createOutlet(_options) {
|
|
226
301
|
return {};
|
|
227
302
|
}
|
|
@@ -233,4 +308,5 @@ class FakeLiblsl {
|
|
|
233
308
|
const streamInfo = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
234
309
|
const outletType = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
235
310
|
const FloatArray = (0, ref_array_napi_1.default)(ref_napi_1.default.types.float);
|
|
311
|
+
const xmlPtr = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
236
312
|
//# sourceMappingURL=Liblsl.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Liblsl.test.js","sourceRoot":"","sources":["../../../src/__tests__/implementation/Liblsl.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAkC;AAClC,qEAK+B;AAC/B,oEAAsC;AACtC,wDAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"Liblsl.test.js","sourceRoot":"","sources":["../../../src/__tests__/implementation/Liblsl.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Liblsl.ts
CHANGED
|
@@ -40,6 +40,21 @@ export default class LiblslImpl implements Liblsl {
|
|
|
40
40
|
})
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
public appendChannelsToStreamInfo(
|
|
44
|
+
info: LslBindingsStreamInfo,
|
|
45
|
+
channels: LslChannel[]
|
|
46
|
+
): void {
|
|
47
|
+
assertOptions({ info, channels }, ['info', 'channels'])
|
|
48
|
+
const desc = this.bindings.lsl_get_desc(info)
|
|
49
|
+
|
|
50
|
+
const parent = this.bindings.lsl_append_child(desc, 'channels')
|
|
51
|
+
|
|
52
|
+
for (const channel of channels) {
|
|
53
|
+
this.bindings.lsl_append_child_value(parent, 'label', channel.label)
|
|
54
|
+
this.bindings.lsl_append_child_value(parent, 'unit', channel.unit)
|
|
55
|
+
this.bindings.lsl_append_child_value(parent, 'type', channel.type)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
43
58
|
|
|
44
59
|
private loadBindings(path: string) {
|
|
45
60
|
return LiblslImpl.ffi.Library(path!, {
|
|
@@ -50,6 +65,9 @@ export default class LiblslImpl implements Liblsl {
|
|
|
50
65
|
lsl_create_outlet: [outletType, [streamInfo, 'int', 'int']],
|
|
51
66
|
lsl_local_clock: ['double', []],
|
|
52
67
|
lsl_push_sample_ft: ['void', [outletType, FloatArray, 'double']],
|
|
68
|
+
lsl_get_desc: [xmlPtr, [streamInfo]],
|
|
69
|
+
lsl_append_child: [xmlPtr, [xmlPtr, 'string']],
|
|
70
|
+
lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
|
|
53
71
|
}) as unknown as LiblslBindings
|
|
54
72
|
}
|
|
55
73
|
|
|
@@ -69,7 +87,9 @@ export default class LiblslImpl implements Liblsl {
|
|
|
69
87
|
return this.bindings.lsl_create_outlet(info, chunkSize, maxBuffered)
|
|
70
88
|
}
|
|
71
89
|
|
|
72
|
-
public createStreamInfo(
|
|
90
|
+
public createStreamInfo(
|
|
91
|
+
options: CreateStreamInfoOptions
|
|
92
|
+
): LslBindingsStreamInfo {
|
|
73
93
|
const { name, type, channelCount, sampleRate, channelFormat, sourceId } =
|
|
74
94
|
assertOptions(options, [
|
|
75
95
|
'name',
|
|
@@ -92,6 +112,10 @@ export default class LiblslImpl implements Liblsl {
|
|
|
92
112
|
}
|
|
93
113
|
|
|
94
114
|
export interface Liblsl {
|
|
115
|
+
appendChannelsToStreamInfo(
|
|
116
|
+
info: LslBindingsStreamInfo,
|
|
117
|
+
channels: LslChannel[]
|
|
118
|
+
): void
|
|
95
119
|
createStreamInfo(options: CreateStreamInfoOptions): LslBindingsStreamInfo
|
|
96
120
|
createOutlet(options: CreateOutletOptions): LslBindingsOutlet
|
|
97
121
|
pushSample(outlet: LslBindingsOutlet, sample: LslSample): void
|
|
@@ -99,8 +123,6 @@ export interface Liblsl {
|
|
|
99
123
|
|
|
100
124
|
export type LslSample = (number | string | undefined)[]
|
|
101
125
|
|
|
102
|
-
export interface StreamInfo {}
|
|
103
|
-
|
|
104
126
|
export interface CreateStreamInfoOptions {
|
|
105
127
|
name: string
|
|
106
128
|
type: string
|
|
@@ -112,6 +134,12 @@ export interface CreateStreamInfoOptions {
|
|
|
112
134
|
unit?: string
|
|
113
135
|
}
|
|
114
136
|
|
|
137
|
+
export interface LslChannel {
|
|
138
|
+
label: string
|
|
139
|
+
unit: string
|
|
140
|
+
type: string
|
|
141
|
+
}
|
|
142
|
+
|
|
115
143
|
export interface LiblslBindings {
|
|
116
144
|
lsl_create_streaminfo(
|
|
117
145
|
name: string,
|
|
@@ -135,17 +163,26 @@ export interface LiblslBindings {
|
|
|
135
163
|
): void
|
|
136
164
|
|
|
137
165
|
lsl_local_clock(): number
|
|
166
|
+
lsl_get_desc(info: LslBindingsStreamInfo): LslBindingsDesc
|
|
167
|
+
lsl_append_child(desc: LslBindingsDesc, name: string): LslBindingsChild
|
|
168
|
+
lsl_append_child_value(
|
|
169
|
+
child: LslBindingsChild,
|
|
170
|
+
name: string,
|
|
171
|
+
value: string
|
|
172
|
+
): void
|
|
138
173
|
}
|
|
139
174
|
|
|
140
175
|
const streamInfo = ref.refType(ref.types.void)
|
|
141
176
|
const outletType = ref.refType(ref.types.void)
|
|
142
177
|
const FloatArray = ArrayType(ref.types.float)
|
|
143
|
-
|
|
178
|
+
const xmlPtr = ref.refType(ref.types.void)
|
|
144
179
|
export interface CreateOutletOptions {
|
|
145
|
-
info:
|
|
180
|
+
info: LslBindingsStreamInfo
|
|
146
181
|
chunkSize: number
|
|
147
182
|
maxBuffered: number
|
|
148
183
|
}
|
|
149
184
|
|
|
150
185
|
export interface LslBindingsStreamInfo {}
|
|
151
186
|
export interface LslBindingsOutlet {}
|
|
187
|
+
export interface LslBindingsDesc {}
|
|
188
|
+
export interface LslBindingsChild {}
|
|
@@ -11,6 +11,7 @@ import LiblslImpl, {
|
|
|
11
11
|
Liblsl,
|
|
12
12
|
LslBindingsOutlet,
|
|
13
13
|
LslBindingsStreamInfo,
|
|
14
|
+
LslChannel,
|
|
14
15
|
LslSample,
|
|
15
16
|
} from '../../Liblsl'
|
|
16
17
|
import LslOutlet, { ChannelFormat, LslOutletOptions } from '../../LslOutlet'
|
|
@@ -213,6 +214,11 @@ class SpyLiblsl implements Liblsl {
|
|
|
213
214
|
this.lastStreamInfoOptions = options
|
|
214
215
|
return this.streamInfo
|
|
215
216
|
}
|
|
217
|
+
public appendChannelsToStreamInfo(
|
|
218
|
+
info: LslBindingsStreamInfo,
|
|
219
|
+
channels: LslChannel[]
|
|
220
|
+
): void {}
|
|
221
|
+
|
|
216
222
|
public createOutlet(options: CreateOutletOptions): LslBindingsOutlet {
|
|
217
223
|
this.lastOutletOptions = options
|
|
218
224
|
return this.outlet
|
|
@@ -12,10 +12,12 @@ import LiblslImpl, {
|
|
|
12
12
|
LiblslBindings,
|
|
13
13
|
Liblsl,
|
|
14
14
|
LslSample,
|
|
15
|
-
StreamInfo,
|
|
16
15
|
CreateOutletOptions,
|
|
17
16
|
LslBindingsOutlet,
|
|
18
17
|
LslBindingsStreamInfo,
|
|
18
|
+
LslChannel,
|
|
19
|
+
LslBindingsDesc,
|
|
20
|
+
LslBindingsChild,
|
|
19
21
|
} from '../../Liblsl'
|
|
20
22
|
|
|
21
23
|
export default class LiblslTest extends AbstractSpruceTest {
|
|
@@ -23,13 +25,18 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
23
25
|
private static libraryPath?: string
|
|
24
26
|
private static libraryOptions?: Record<string, any>
|
|
25
27
|
private static fakeBindings: LiblslBindings
|
|
26
|
-
private static fakeStreamInfo:
|
|
28
|
+
private static fakeStreamInfo: LslBindingsStreamInfo
|
|
27
29
|
private static fakeOutlet: LslBindingsOutlet
|
|
30
|
+
private static fakeDesc: LslBindingsDesc
|
|
31
|
+
private static fakeChildNamedChannels: LslBindingsChild
|
|
28
32
|
private static createStreamInfoParams?: any[]
|
|
33
|
+
private static appendChildParams?: any[]
|
|
29
34
|
private static createOutletParams?: any[]
|
|
30
35
|
private static pushSampleParams?: any[]
|
|
36
|
+
private static appendChildValueParams: any[]
|
|
31
37
|
private static localClock: number
|
|
32
38
|
private static shouldThrowWhenCreatingBindings: boolean
|
|
39
|
+
private static getDescriptionParams?: [LslBindingsStreamInfo]
|
|
33
40
|
|
|
34
41
|
protected static async beforeEach(): Promise<void> {
|
|
35
42
|
await super.beforeEach()
|
|
@@ -39,11 +46,17 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
39
46
|
delete this.createStreamInfoParams
|
|
40
47
|
delete this.createOutletParams
|
|
41
48
|
delete this.pushSampleParams
|
|
49
|
+
delete this.getDescriptionParams
|
|
50
|
+
delete this.appendChildParams
|
|
51
|
+
this.appendChildValueParams = []
|
|
42
52
|
|
|
43
53
|
process.env.LIBLSL_PATH = generateId()
|
|
44
54
|
|
|
45
55
|
this.fakeStreamInfo = {}
|
|
56
|
+
this.fakeDesc = {}
|
|
46
57
|
this.fakeOutlet = {}
|
|
58
|
+
this.fakeChildNamedChannels = {}
|
|
59
|
+
|
|
47
60
|
this.localClock = new Date().getTime()
|
|
48
61
|
this.shouldThrowWhenCreatingBindings = false
|
|
49
62
|
|
|
@@ -61,6 +74,17 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
61
74
|
return 0
|
|
62
75
|
},
|
|
63
76
|
lsl_local_clock: () => this.localClock,
|
|
77
|
+
lsl_get_desc: (info: LslBindingsStreamInfo) => {
|
|
78
|
+
this.getDescriptionParams = [info]
|
|
79
|
+
return this.fakeDesc
|
|
80
|
+
},
|
|
81
|
+
lsl_append_child: (...params: any) => {
|
|
82
|
+
this.appendChildParams = params
|
|
83
|
+
return this.fakeChildNamedChannels
|
|
84
|
+
},
|
|
85
|
+
lsl_append_child_value: (...params: any[]) => {
|
|
86
|
+
this.appendChildValueParams.push(params)
|
|
87
|
+
},
|
|
64
88
|
}
|
|
65
89
|
|
|
66
90
|
LiblslImpl.ffi = {
|
|
@@ -128,6 +152,9 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
128
152
|
lsl_create_outlet: [outletType, [streamInfo, 'int', 'int']],
|
|
129
153
|
lsl_local_clock: ['double', []],
|
|
130
154
|
lsl_push_sample_ft: ['void', [outletType, FloatArray, 'double']],
|
|
155
|
+
lsl_get_desc: [xmlPtr, [streamInfo]],
|
|
156
|
+
lsl_append_child: [xmlPtr, [xmlPtr, 'string']],
|
|
157
|
+
lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
|
|
131
158
|
}
|
|
132
159
|
assert.isEqual(
|
|
133
160
|
JSON.stringify(this.libraryOptions),
|
|
@@ -171,9 +198,7 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
171
198
|
|
|
172
199
|
@test()
|
|
173
200
|
protected static async canCreateOutletWithRequiredParams() {
|
|
174
|
-
const info = this.
|
|
175
|
-
this.generateRandomCreateStreamInfoOptions()
|
|
176
|
-
)
|
|
201
|
+
const info = this.createRandomStreamInfo()
|
|
177
202
|
const options = {
|
|
178
203
|
info,
|
|
179
204
|
chunkSize: randomInt(10),
|
|
@@ -202,6 +227,67 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
202
227
|
assert.isEqual(this.pushSampleParams?.[2], this.localClock)
|
|
203
228
|
}
|
|
204
229
|
|
|
230
|
+
@test()
|
|
231
|
+
protected static async appendChannelsThrowsWithMissingParams() {
|
|
232
|
+
//@ts-ignore
|
|
233
|
+
const err = assert.doesThrow(() => this.lsl.appendChannelsToStreamInfo())
|
|
234
|
+
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
235
|
+
parameters: ['info', 'channels'],
|
|
236
|
+
})
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
@test()
|
|
240
|
+
protected static async addingSingleChannelGetsDescription() {
|
|
241
|
+
const info = this.createRandomStreamInfo()
|
|
242
|
+
const channel: LslChannel = this.generateRandomChannelValues()
|
|
243
|
+
this.lsl.appendChannelsToStreamInfo(info, [channel])
|
|
244
|
+
assert.isEqual(this.getDescriptionParams?.[0], info)
|
|
245
|
+
|
|
246
|
+
assert.isEqual(this.appendChildParams?.[0], this.fakeDesc)
|
|
247
|
+
assert.isEqual(this.appendChildParams?.[1], 'channels')
|
|
248
|
+
|
|
249
|
+
assert.isLength(this.appendChildValueParams, 3)
|
|
250
|
+
|
|
251
|
+
for (let i = 0; i < 3; i++) {
|
|
252
|
+
const param = this.appendChildValueParams[i]
|
|
253
|
+
assert.isEqual(param[0], this.fakeChildNamedChannels)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
assert.isEqual(this.appendChildValueParams[0][1], 'label')
|
|
257
|
+
assert.isEqual(this.appendChildValueParams[1][1], 'unit')
|
|
258
|
+
assert.isEqual(this.appendChildValueParams[2][1], 'type')
|
|
259
|
+
|
|
260
|
+
assert.isEqual(this.appendChildValueParams[0][2], channel.label)
|
|
261
|
+
assert.isEqual(this.appendChildValueParams[1][2], channel.unit)
|
|
262
|
+
assert.isEqual(this.appendChildValueParams[2][2], channel.type)
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
@test()
|
|
266
|
+
protected static async addingMultpleChannelsAddsChildrenToChannelsChild() {
|
|
267
|
+
const info = this.createRandomStreamInfo()
|
|
268
|
+
const channel1 = this.generateRandomChannelValues()
|
|
269
|
+
const channel2 = this.generateRandomChannelValues()
|
|
270
|
+
this.lsl.appendChannelsToStreamInfo(info, [channel1, channel2])
|
|
271
|
+
|
|
272
|
+
assert.isEqual(this.appendChildValueParams[3][2], channel2.label)
|
|
273
|
+
assert.isEqual(this.appendChildValueParams[4][2], channel2.unit)
|
|
274
|
+
assert.isEqual(this.appendChildValueParams[5][2], channel2.type)
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
private static generateRandomChannelValues(): LslChannel {
|
|
278
|
+
return {
|
|
279
|
+
label: generateId(),
|
|
280
|
+
type: generateId(),
|
|
281
|
+
unit: generateId(),
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
private static createRandomStreamInfo() {
|
|
286
|
+
return this.lsl.createStreamInfo(
|
|
287
|
+
this.generateRandomCreateStreamInfoOptions()
|
|
288
|
+
)
|
|
289
|
+
}
|
|
290
|
+
|
|
205
291
|
private static generateRandomCreateStreamInfoOptions() {
|
|
206
292
|
return {
|
|
207
293
|
name: generateId(),
|
|
@@ -215,13 +301,17 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
215
301
|
}
|
|
216
302
|
|
|
217
303
|
class FakeLiblsl implements Liblsl {
|
|
304
|
+
public appendChannelsToStreamInfo(
|
|
305
|
+
_info: LslBindingsStreamInfo,
|
|
306
|
+
_channels: LslChannel[]
|
|
307
|
+
): void {}
|
|
218
308
|
public createOutlet(_options: CreateOutletOptions): LslBindingsOutlet {
|
|
219
309
|
return {} as LslBindingsOutlet
|
|
220
310
|
}
|
|
221
311
|
public createStreamInfo(
|
|
222
312
|
_options: CreateStreamInfoOptions
|
|
223
313
|
): LslBindingsStreamInfo {
|
|
224
|
-
return {} as
|
|
314
|
+
return {} as LslBindingsStreamInfo
|
|
225
315
|
}
|
|
226
316
|
public pushSample(_sample: LslSample): void {}
|
|
227
317
|
}
|
|
@@ -229,3 +319,4 @@ class FakeLiblsl implements Liblsl {
|
|
|
229
319
|
const streamInfo = ref.refType(ref.types.void)
|
|
230
320
|
const outletType = ref.refType(ref.types.void)
|
|
231
321
|
const FloatArray = ArrayType(ref.types.float)
|
|
322
|
+
const xmlPtr = ref.refType(ref.types.void)
|