@neurodevs/node-lsl 18.1.0 → 20.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.
Files changed (189) hide show
  1. package/build/__tests__/AbstractPackageTest.d.ts +19 -17
  2. package/build/__tests__/AbstractPackageTest.js +54 -39
  3. package/build/__tests__/AbstractPackageTest.js.map +1 -1
  4. package/build/__tests__/impl/BleDeviceController.test.d.ts +6 -1
  5. package/build/__tests__/impl/BleDeviceController.test.js +44 -15
  6. package/build/__tests__/impl/BleDeviceController.test.js.map +1 -1
  7. package/build/__tests__/impl/LslEventMarkerEmitter.test.js +13 -13
  8. package/build/__tests__/impl/LslEventMarkerEmitter.test.js.map +1 -1
  9. package/build/__tests__/impl/LslStreamInfo.test.js +2 -2
  10. package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -1
  11. package/build/__tests__/impl/LslStreamInlet.test.d.ts +3 -5
  12. package/build/__tests__/impl/LslStreamInlet.test.js +13 -46
  13. package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
  14. package/build/__tests__/impl/LslStreamOutlet.test.js +9 -16
  15. package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -1
  16. package/build/__tests__/impl/LslWebSocketBridge.test.js +9 -10
  17. package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
  18. package/build/__tests__/impl/UsbDeviceController.test.d.ts +17 -0
  19. package/build/__tests__/impl/UsbDeviceController.test.js +81 -0
  20. package/build/__tests__/impl/UsbDeviceController.test.js.map +1 -0
  21. package/build/__tests__/impl/WindowedClockRegressor.test.d.ts +19 -0
  22. package/build/__tests__/impl/WindowedClockRegressor.test.js +172 -0
  23. package/build/__tests__/impl/WindowedClockRegressor.test.js.map +1 -0
  24. package/build/assertions.js +1 -1
  25. package/build/assertions.js.map +1 -1
  26. package/build/impl/LslEventMarkerEmitter.d.ts +12 -12
  27. package/build/impl/LslEventMarkerEmitter.js.map +1 -1
  28. package/build/impl/LslStreamInfo.d.ts +7 -7
  29. package/build/impl/LslStreamInfo.js.map +1 -1
  30. package/build/impl/LslStreamInlet.d.ts +63 -20
  31. package/build/impl/LslStreamInlet.js +221 -64
  32. package/build/impl/LslStreamInlet.js.map +1 -1
  33. package/build/impl/LslStreamOutlet.d.ts +16 -14
  34. package/build/impl/LslStreamOutlet.js +34 -37
  35. package/build/impl/LslStreamOutlet.js.map +1 -1
  36. package/build/impl/LslWebSocketBridge.d.ts +10 -10
  37. package/build/impl/LslWebSocketBridge.js.map +1 -1
  38. package/build/impl/clocks/WindowedClockRegressor.d.ts +24 -0
  39. package/build/impl/clocks/WindowedClockRegressor.js +73 -0
  40. package/build/impl/clocks/WindowedClockRegressor.js.map +1 -0
  41. package/build/impl/controllers/BleDeviceController.d.ts +3 -1
  42. package/build/impl/controllers/BleDeviceController.js +9 -1
  43. package/build/impl/controllers/BleDeviceController.js.map +1 -1
  44. package/build/impl/controllers/UsbDeviceController.d.ts +23 -0
  45. package/build/impl/controllers/UsbDeviceController.js +40 -0
  46. package/build/impl/controllers/UsbDeviceController.js.map +1 -0
  47. package/build/index.d.ts +32 -20
  48. package/build/index.js +39 -26
  49. package/build/index.js.map +1 -1
  50. package/build/scripts/{runLslEventMarkerEmitter.js → runLslEmitter.js} +5 -4
  51. package/build/scripts/runLslEmitter.js.map +1 -0
  52. package/build/scripts/{runLslStreamOutlet.js → runLslOutlet.js} +1 -1
  53. package/build/scripts/runLslOutlet.js.map +1 -0
  54. package/build/scripts/runMuse.js +1 -1
  55. package/build/scripts/runMuse.js.map +1 -1
  56. package/build/scripts/runUsb.js +14 -0
  57. package/build/scripts/runUsb.js.map +1 -0
  58. package/build/testDoubles/BleController/FakeBleController.d.ts +3 -1
  59. package/build/testDoubles/BleController/FakeBleController.js +5 -0
  60. package/build/testDoubles/BleController/FakeBleController.js.map +1 -1
  61. package/build/testDoubles/ClockRegressor/FakeClockRegressor.d.ts +17 -0
  62. package/build/testDoubles/ClockRegressor/FakeClockRegressor.js +23 -0
  63. package/build/testDoubles/ClockRegressor/FakeClockRegressor.js.map +1 -0
  64. package/build/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.d.ts → LslEmitter/FakeLslEmitter.d.ts} +4 -4
  65. package/build/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.js → LslEmitter/FakeLslEmitter.js} +7 -7
  66. package/build/testDoubles/LslEmitter/FakeLslEmitter.js.map +1 -0
  67. package/build/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.d.ts → LslEmitter/SpyLslEmitter.d.ts} +4 -4
  68. package/build/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.js → LslEmitter/SpyLslEmitter.js} +3 -3
  69. package/build/testDoubles/LslEmitter/SpyLslEmitter.js.map +1 -0
  70. package/build/testDoubles/LslEmitter/ThrowingLslEmitter.d.ts +9 -0
  71. package/build/testDoubles/{EventMarkerEmitter/ThrowingEventMarkerEmitter.js → LslEmitter/ThrowingLslEmitter.js} +2 -2
  72. package/build/testDoubles/LslEmitter/ThrowingLslEmitter.js.map +1 -0
  73. package/build/testDoubles/{StreamInfo/FakeStreamInfo.d.ts → LslInfo/FakeLslInfo.d.ts} +4 -4
  74. package/build/testDoubles/{StreamInfo/FakeStreamInfo.js → LslInfo/FakeLslInfo.js} +7 -7
  75. package/build/testDoubles/LslInfo/FakeLslInfo.js.map +1 -0
  76. package/build/testDoubles/LslInfo/SpyLslInfo.d.ts +10 -0
  77. package/build/testDoubles/{StreamInfo/SpyStreamInfo.js → LslInfo/SpyLslInfo.js} +4 -4
  78. package/build/testDoubles/LslInfo/SpyLslInfo.js.map +1 -0
  79. package/build/testDoubles/{StreamInlet/FakeStreamInlet.d.ts → LslInlet/FakeLslInlet.d.ts} +4 -4
  80. package/build/testDoubles/{StreamInlet/FakeStreamInlet.js → LslInlet/FakeLslInlet.js} +12 -11
  81. package/build/testDoubles/LslInlet/FakeLslInlet.js.map +1 -0
  82. package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +4 -0
  83. package/build/testDoubles/{StreamInlet/SpyStreamInlet.js → LslInlet/SpyLslInlet.js} +2 -2
  84. package/build/testDoubles/LslInlet/SpyLslInlet.js.map +1 -0
  85. package/build/testDoubles/{StreamOutlet/FakeStreamOutlet.d.ts → LslOutlet/FakeLslOutlet.d.ts} +5 -5
  86. package/build/testDoubles/{StreamOutlet/FakeStreamOutlet.js → LslOutlet/FakeLslOutlet.js} +8 -8
  87. package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +1 -0
  88. package/build/testDoubles/LslWsBridge/FakeLslWsBridge.d.ts +14 -0
  89. package/build/testDoubles/{WebSocketBridge/FakeWebSocketBridge.js → LslWsBridge/FakeLslWsBridge.js} +14 -14
  90. package/build/testDoubles/LslWsBridge/FakeLslWsBridge.js.map +1 -0
  91. package/build/testDoubles/LslWsBridge/SpyLslWsBridge.d.ts +4 -0
  92. package/build/testDoubles/{WebSocketBridge/SpyLslWebSocketBridge.js → LslWsBridge/SpyLslWsBridge.js} +2 -2
  93. package/build/testDoubles/LslWsBridge/SpyLslWsBridge.js.map +1 -0
  94. package/build/testDoubles/UsbController/FakeUsbController.d.ts +12 -0
  95. package/build/testDoubles/UsbController/FakeUsbController.js +25 -0
  96. package/build/testDoubles/UsbController/FakeUsbController.js.map +1 -0
  97. package/build/testDoubles/consts.d.ts +2 -12
  98. package/build/testDoubles/consts.js +0 -20
  99. package/build/testDoubles/consts.js.map +1 -1
  100. package/build/testDoubles/generateRandomOutletOptions.d.ts +2 -2
  101. package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
  102. package/package.json +6 -5
  103. package/src/__tests__/AbstractPackageTest.ts +78 -49
  104. package/src/__tests__/impl/BleDeviceController.test.ts +59 -18
  105. package/src/__tests__/impl/LslEventMarkerEmitter.test.ts +19 -24
  106. package/src/__tests__/impl/LslStreamInfo.test.ts +8 -8
  107. package/src/__tests__/impl/LslStreamInlet.test.ts +21 -78
  108. package/src/__tests__/impl/LslStreamOutlet.test.ts +22 -28
  109. package/src/__tests__/impl/LslWebSocketBridge.test.ts +15 -18
  110. package/src/__tests__/impl/UsbDeviceController.test.ts +109 -0
  111. package/src/__tests__/impl/WindowedClockRegressor.test.ts +262 -0
  112. package/src/assertions.ts +1 -2
  113. package/src/impl/LslEventMarkerEmitter.ts +15 -17
  114. package/src/impl/LslStreamInfo.ts +7 -9
  115. package/src/impl/LslStreamInlet.ts +304 -77
  116. package/src/impl/LslStreamOutlet.ts +59 -57
  117. package/src/impl/LslWebSocketBridge.ts +15 -18
  118. package/src/impl/clocks/WindowedClockRegressor.ts +136 -0
  119. package/src/impl/controllers/BleDeviceController.ts +18 -1
  120. package/src/impl/controllers/UsbDeviceController.ts +65 -0
  121. package/src/index.ts +48 -28
  122. package/src/scripts/{runLslEventMarkerEmitter.ts → runLslEmitter.ts} +4 -3
  123. package/src/scripts/runMuse.ts +1 -1
  124. package/src/scripts/runUsb.ts +20 -0
  125. package/src/testDoubles/BleController/FakeBleController.ts +11 -0
  126. package/src/testDoubles/ClockRegressor/FakeClockRegressor.ts +46 -0
  127. package/src/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.ts → LslEmitter/FakeLslEmitter.ts} +10 -10
  128. package/src/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.ts → LslEmitter/SpyLslEmitter.ts} +4 -4
  129. package/src/testDoubles/{EventMarkerEmitter/ThrowingEventMarkerEmitter.ts → LslEmitter/ThrowingLslEmitter.ts} +4 -4
  130. package/src/testDoubles/{StreamInfo/FakeStreamInfo.ts → LslInfo/FakeLslInfo.ts} +9 -9
  131. package/src/testDoubles/{StreamInfo/SpyStreamInfo.ts → LslInfo/SpyLslInfo.ts} +5 -5
  132. package/src/testDoubles/{StreamInlet/FakeStreamInlet.ts → LslInlet/FakeLslInlet.ts} +15 -14
  133. package/src/testDoubles/LslInlet/SpyLslInlet.ts +10 -0
  134. package/src/testDoubles/{StreamOutlet/FakeStreamOutlet.ts → LslOutlet/FakeLslOutlet.ts} +11 -14
  135. package/src/testDoubles/{WebSocketBridge/FakeWebSocketBridge.ts → LslWsBridge/FakeLslWsBridge.ts} +19 -20
  136. package/src/testDoubles/LslWsBridge/SpyLslWsBridge.ts +9 -0
  137. package/src/testDoubles/UsbController/FakeUsbController.ts +34 -0
  138. package/src/testDoubles/consts.ts +3 -23
  139. package/src/testDoubles/generateRandomOutletOptions.ts +2 -2
  140. package/build/consts.d.ts +0 -11
  141. package/build/consts.js +0 -21
  142. package/build/consts.js.map +0 -1
  143. package/build/impl/workers/inlet/LslStreamInlet.worker.d.ts +0 -22
  144. package/build/impl/workers/inlet/LslStreamInlet.worker.js +0 -42
  145. package/build/impl/workers/inlet/LslStreamInlet.worker.js.map +0 -1
  146. package/build/impl/workers/inlet/StreamInletWorker.d.ts +0 -73
  147. package/build/impl/workers/inlet/StreamInletWorker.js +0 -253
  148. package/build/impl/workers/inlet/StreamInletWorker.js.map +0 -1
  149. package/build/impl/workers/outlet/LslStreamOutlet.worker.d.ts +0 -32
  150. package/build/impl/workers/outlet/LslStreamOutlet.worker.js +0 -82
  151. package/build/impl/workers/outlet/LslStreamOutlet.worker.js.map +0 -1
  152. package/build/scripts/discoverMuse.js +0 -40
  153. package/build/scripts/discoverMuse.js.map +0 -1
  154. package/build/scripts/runLslEventMarkerEmitter.js.map +0 -1
  155. package/build/scripts/runLslStreamOutlet.js.map +0 -1
  156. package/build/scripts/testDestroyOutlet.d.ts +0 -1
  157. package/build/scripts/testDestroyOutlet.js +0 -4
  158. package/build/scripts/testDestroyOutlet.js.map +0 -1
  159. package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js.map +0 -1
  160. package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js.map +0 -1
  161. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.d.ts +0 -9
  162. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js.map +0 -1
  163. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +0 -1
  164. package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +0 -10
  165. package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +0 -1
  166. package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +0 -1
  167. package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +0 -4
  168. package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +0 -1
  169. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +0 -1
  170. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.d.ts +0 -14
  171. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js.map +0 -1
  172. package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.d.ts +0 -4
  173. package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.js.map +0 -1
  174. package/build/testDoubles/WorkerThreads/FakeWorker.d.ts +0 -27
  175. package/build/testDoubles/WorkerThreads/FakeWorker.js +0 -67
  176. package/build/testDoubles/WorkerThreads/FakeWorker.js.map +0 -1
  177. package/src/consts.ts +0 -21
  178. package/src/impl/workers/inlet/LslStreamInlet.worker.ts +0 -74
  179. package/src/impl/workers/inlet/StreamInletWorker.ts +0 -348
  180. package/src/impl/workers/outlet/LslStreamOutlet.worker.ts +0 -144
  181. package/src/scripts/discoverMuse.ts +0 -50
  182. package/src/scripts/testDestroyOutlet.ts +0 -5
  183. package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +0 -10
  184. package/src/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.ts +0 -9
  185. package/src/testDoubles/WorkerThreads/FakeWorker.ts +0 -99
  186. /package/build/scripts/{discoverMuse.d.ts → runLslEmitter.d.ts} +0 -0
  187. /package/build/scripts/{runLslEventMarkerEmitter.d.ts → runLslOutlet.d.ts} +0 -0
  188. /package/build/scripts/{runLslStreamOutlet.d.ts → runUsb.d.ts} +0 -0
  189. /package/src/scripts/{runLslStreamOutlet.ts → runLslOutlet.ts} +0 -0
@@ -0,0 +1,24 @@
1
+ export default class WindowedClockRegressor implements ClockRegressor {
2
+ static Class?: ClockRegressorConstructor;
3
+ private readonly nominalHz;
4
+ private readonly windowLenSec;
5
+ private readonly defaultWindowLenSec;
6
+ private readonly history;
7
+ private slope;
8
+ protected constructor(nominalHz: number, options?: WindowedClockRegressorOptions);
9
+ static Create(nominalHz: number, options?: WindowedClockRegressorOptions): WindowedClockRegressor | ClockRegressor;
10
+ deriveTimestamps(deviceTime: number, earliestLslTime: number, chunkSize: number): any[];
11
+ private anchorTimeFor;
12
+ private throwIfDeviceTimeDoesNotIncrease;
13
+ private pruneHistoryOutsideWindow;
14
+ private refitSlope;
15
+ private get currentMeanDeviceTime();
16
+ private get currentMeanLslTime();
17
+ }
18
+ export interface ClockRegressor {
19
+ deriveTimestamps(deviceTime: number, earliestLslTime: number, chunkSize: number): number[];
20
+ }
21
+ export type ClockRegressorConstructor = new (nominalHz: number, options?: WindowedClockRegressorOptions) => ClockRegressor;
22
+ export interface WindowedClockRegressorOptions {
23
+ windowLenSec?: number;
24
+ }
@@ -0,0 +1,73 @@
1
+ export default class WindowedClockRegressor {
2
+ static Class;
3
+ nominalHz;
4
+ windowLenSec;
5
+ defaultWindowLenSec = 30;
6
+ history = [];
7
+ slope = 1; // lsl-host-seconds per device-second
8
+ constructor(nominalHz, options) {
9
+ const { windowLenSec = this.defaultWindowLenSec } = options ?? {};
10
+ this.nominalHz = nominalHz;
11
+ this.windowLenSec = windowLenSec;
12
+ }
13
+ static Create(nominalHz, options) {
14
+ return new (this.Class ?? this)(nominalHz, options);
15
+ }
16
+ deriveTimestamps(deviceTime, earliestLslTime, chunkSize) {
17
+ this.throwIfDeviceTimeDoesNotIncrease(deviceTime);
18
+ this.history.push({ deviceTime, earliestLslTime });
19
+ this.pruneHistoryOutsideWindow();
20
+ this.refitSlope();
21
+ const anchor = this.anchorTimeFor(deviceTime);
22
+ const timestamps = Array(chunkSize).fill(0);
23
+ for (let i = 0; i <= chunkSize - 1; i++) {
24
+ const stepsFromLast = chunkSize - 1 - i;
25
+ const deviceTimeOffset = -stepsFromLast / this.nominalHz;
26
+ const lslTimeOffset = deviceTimeOffset * this.slope;
27
+ timestamps[i] = anchor + lslTimeOffset;
28
+ }
29
+ return timestamps;
30
+ }
31
+ anchorTimeFor(deviceTime) {
32
+ const xMean = this.currentMeanDeviceTime;
33
+ const yMean = this.currentMeanLslTime;
34
+ return yMean + this.slope * (deviceTime - xMean);
35
+ }
36
+ throwIfDeviceTimeDoesNotIncrease(deviceTime) {
37
+ const last = this.history[this.history.length - 1];
38
+ if (last && deviceTime <= last.deviceTime) {
39
+ throw new Error(`\nDevice time (${deviceTime}) did not increase from the previous device time (${last.deviceTime})! Device time is expected to always increase between calls, so this likely indicates a bug in the calling code.\n`);
40
+ }
41
+ }
42
+ pruneHistoryOutsideWindow() {
43
+ const { deviceTime: latest } = this.history[this.history.length - 1];
44
+ const cutoff = latest - this.windowLenSec;
45
+ while (this.history.length > 0 && this.history[0].deviceTime < cutoff) {
46
+ this.history.shift();
47
+ }
48
+ }
49
+ refitSlope() {
50
+ if (this.history.length < 2) {
51
+ return;
52
+ }
53
+ const xMean = this.currentMeanDeviceTime;
54
+ const yMean = this.currentMeanLslTime;
55
+ let numerator = 0;
56
+ let denominator = 0;
57
+ for (const { deviceTime, earliestLslTime } of this.history) {
58
+ const xCentered = deviceTime - xMean;
59
+ numerator += xCentered * (earliestLslTime - yMean);
60
+ denominator += xCentered * xCentered;
61
+ }
62
+ this.slope = numerator / denominator;
63
+ }
64
+ get currentMeanDeviceTime() {
65
+ const totalDeviceTime = this.history.reduce((sum, { deviceTime }) => sum + deviceTime, 0);
66
+ return totalDeviceTime / this.history.length;
67
+ }
68
+ get currentMeanLslTime() {
69
+ const totalLslTime = this.history.reduce((sum, { earliestLslTime }) => sum + earliestLslTime, 0);
70
+ return totalLslTime / this.history.length;
71
+ }
72
+ }
73
+ //# sourceMappingURL=WindowedClockRegressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WindowedClockRegressor.js","sourceRoot":"","sources":["../../../src/impl/clocks/WindowedClockRegressor.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ export default class BleDeviceController implements BleController {
15
15
  private deviceName?;
16
16
  private onConnected?;
17
17
  protected constructor(options: BleControllerOptions);
18
- static Create(options: BleControllerOptions): Promise<BleDeviceController | BleController>;
18
+ static Create(options: BleControllerOptions): BleDeviceController | BleController;
19
19
  connect(): Promise<void>;
20
20
  private discoverUuid;
21
21
  private waitForDiscoveredUuid;
@@ -26,6 +26,7 @@ export default class BleDeviceController implements BleController {
26
26
  private waitForOnConnected;
27
27
  private waitToDiscoverServices;
28
28
  writeCharacteristic(charUuid: CharacteristicUuid, value: string): Promise<void>;
29
+ subscribeCharacteristics(charCallbacks: CharacteristicCallbacks): Promise<void>;
29
30
  disconnect(): Promise<void>;
30
31
  get uuid(): string;
31
32
  get name(): string;
@@ -35,6 +36,7 @@ export interface BleController {
35
36
  uuid: string;
36
37
  name: string;
37
38
  connect(): Promise<void>;
39
+ subscribeCharacteristics(charCallbacks: CharacteristicCallbacks): Promise<void>;
38
40
  writeCharacteristic(charUuid: CharacteristicUuid, value: string): Promise<void>;
39
41
  disconnect(): Promise<void>;
40
42
  }
@@ -29,7 +29,7 @@ export default class BleDeviceController {
29
29
  this.onConnected = onConnected;
30
30
  this.rssiIntervalMs = rssiIntervalMs;
31
31
  }
32
- static async Create(options) {
32
+ static Create(options) {
33
33
  return new (this.Class ?? this)(options);
34
34
  }
35
35
  async connect() {
@@ -125,6 +125,14 @@ export default class BleDeviceController {
125
125
  });
126
126
  this.throwIfError(status, error);
127
127
  }
128
+ async subscribeCharacteristics(charCallbacks) {
129
+ const { status, error } = this.ndx.addBleCharCallbacks({
130
+ deviceUuid: this.uuid,
131
+ charCallbacks,
132
+ });
133
+ this.throwIfError(status, error);
134
+ this.charCallbacks = [...this.charCallbacks, ...charCallbacks];
135
+ }
128
136
  async disconnect() {
129
137
  const { status, error } = this.ndx.stopBleBackend({
130
138
  deviceUuid: this.uuid,
@@ -1 +1 @@
1
- {"version":3,"file":"BleDeviceController.js","sourceRoot":"","sources":["../../../src/impl/controllers/BleDeviceController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BleDeviceController.js","sourceRoot":"","sources":["../../../src/impl/controllers/BleDeviceController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export default class UsbDeviceController implements UsbController {
2
+ static Class?: UsbControllerConstructor;
3
+ private onData;
4
+ private serialNumber;
5
+ private ndx;
6
+ protected constructor(options: UsbControllerOptions);
7
+ static Create(options: UsbControllerOptions): UsbController;
8
+ connect(): Promise<void>;
9
+ private get usbControllerOptions();
10
+ private get startUsbControllerOptions();
11
+ writeUsb(value: string): Promise<void>;
12
+ disconnect(): Promise<void>;
13
+ }
14
+ export interface UsbController {
15
+ connect(): Promise<void>;
16
+ writeUsb(value: string): Promise<void>;
17
+ disconnect(): Promise<void>;
18
+ }
19
+ export interface UsbControllerOptions {
20
+ onData: (data: Buffer, length: number, timestampSec: number) => void;
21
+ serialNumber?: string;
22
+ }
23
+ export type UsbControllerConstructor = new (options?: UsbControllerOptions) => UsbController;
@@ -0,0 +1,40 @@
1
+ import { LibndxAdapter } from '@neurodevs/ndx-native';
2
+ export default class UsbDeviceController {
3
+ static Class;
4
+ onData;
5
+ serialNumber;
6
+ ndx = LibndxAdapter.getInstance();
7
+ constructor(options) {
8
+ const { onData, serialNumber } = options ?? {};
9
+ this.onData = onData;
10
+ this.serialNumber = serialNumber ?? '';
11
+ }
12
+ static Create(options) {
13
+ return new (this.Class ?? this)(options);
14
+ }
15
+ async connect() {
16
+ this.ndx.createUsbBackend(this.usbControllerOptions);
17
+ this.ndx.startUsbBackend(this.startUsbControllerOptions);
18
+ }
19
+ get usbControllerOptions() {
20
+ return {
21
+ serialNumber: this.serialNumber,
22
+ };
23
+ }
24
+ get startUsbControllerOptions() {
25
+ return {
26
+ ...this.usbControllerOptions,
27
+ onData: this.onData,
28
+ };
29
+ }
30
+ async writeUsb(value) {
31
+ this.ndx.writeUsbBackend({
32
+ ...this.usbControllerOptions,
33
+ value,
34
+ });
35
+ }
36
+ async disconnect() {
37
+ this.ndx.stopUsbBackend(this.usbControllerOptions);
38
+ }
39
+ }
40
+ //# sourceMappingURL=UsbDeviceController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UsbDeviceController.js","sourceRoot":"","sources":["../../../src/impl/controllers/UsbDeviceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC7B,MAAM,CAAC,KAAK,CAA2B;IAEtC,MAAM,CAA8D;IACpE,YAAY,CAAQ;IAEpB,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAEzC,YAAsB,OAA6B;QAC/C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAE9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE,CAAA;IAC1C,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAA6B;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QACpD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IAC5D,CAAC;IAED,IAAY,oBAAoB;QAC5B,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAA;IACL,CAAC;IAED,IAAY,yBAAyB;QACjC,OAAO;YACH,GAAG,IAAI,CAAC,oBAAoB;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC/B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;YACrB,GAAG,IAAI,CAAC,oBAAoB;YAC5B,KAAK;SACR,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACtD,CAAC;CACJ"}
package/build/index.d.ts CHANGED
@@ -1,36 +1,48 @@
1
+ export { default as WindowedClockRegressor } from './impl/clocks/WindowedClockRegressor.js';
2
+ export * from './impl/clocks/WindowedClockRegressor.js';
3
+ export { default as FakeClockRegressor } from './testDoubles/ClockRegressor/FakeClockRegressor.js';
4
+ export * from './testDoubles/ClockRegressor/FakeClockRegressor.js';
1
5
  export { default as BleDeviceController } from './impl/controllers/BleDeviceController.js';
2
6
  export * from './impl/controllers/BleDeviceController.js';
3
- export { default as FakeBleController } from './testDoubles/BleController/FakeBleController.js';
4
- export * from './testDoubles/BleController/FakeBleController.js';
5
7
  export { default as SpyBleController } from './testDoubles/BleController/SpyBleController.js';
6
8
  export * from './testDoubles/BleController/SpyBleController.js';
9
+ export { default as FakeBleController } from './testDoubles/BleController/FakeBleController.js';
10
+ export * from './testDoubles/BleController/FakeBleController.js';
11
+ export { default as LslWebSocketBridge } from './impl/LslWebSocketBridge.js';
12
+ export * from './impl/LslWebSocketBridge.js';
13
+ export { default as SpyLslWsBridge } from './testDoubles/LslWsBridge/SpyLslWsBridge.js';
14
+ export * from './testDoubles/LslWsBridge/SpyLslWsBridge.js';
15
+ export { default as FakeLslWsBridge } from './testDoubles/LslWsBridge/FakeLslWsBridge.js';
16
+ export * from './testDoubles/LslWsBridge/FakeLslWsBridge.js';
7
17
  export { default as LslEventMarkerEmitter } from './impl/LslEventMarkerEmitter.js';
8
18
  export * from './impl/LslEventMarkerEmitter.js';
9
- export { default as FakeEventMarkerEmitter } from './testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js';
10
- export * from './testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js';
11
- export { default as SpyEventMarkerEmitter } from './testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js';
12
- export * from './testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js';
13
- export { default as ThrowingEventMarkerEmitter } from './testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js';
14
- export * from './testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js';
19
+ export { default as SpyLslEmitter } from './testDoubles/LslEmitter/SpyLslEmitter.js';
20
+ export * from './testDoubles/LslEmitter/SpyLslEmitter.js';
21
+ export { default as FakeLslEmitter } from './testDoubles/LslEmitter/FakeLslEmitter.js';
22
+ export * from './testDoubles/LslEmitter/FakeLslEmitter.js';
23
+ export { default as ThrowingLslEmitter } from './testDoubles/LslEmitter/ThrowingLslEmitter.js';
24
+ export * from './testDoubles/LslEmitter/ThrowingLslEmitter.js';
15
25
  export { default as LslStreamInfo } from './impl/LslStreamInfo.js';
16
26
  export * from './impl/LslStreamInfo.js';
17
- export { default as SpyStreamInfo } from './testDoubles/StreamInfo/SpyStreamInfo.js';
18
- export * from './testDoubles/StreamInfo/SpyStreamInfo.js';
19
- export { default as FakeStreamInfo } from './testDoubles/StreamInfo/FakeStreamInfo.js';
20
- export * from './testDoubles/StreamInfo/FakeStreamInfo.js';
27
+ export { default as SpyLslInfo } from './testDoubles/LslInfo/SpyLslInfo.js';
28
+ export * from './testDoubles/LslInfo/SpyLslInfo.js';
29
+ export { default as FakeLslInfo } from './testDoubles/LslInfo/FakeLslInfo.js';
30
+ export * from './testDoubles/LslInfo/FakeLslInfo.js';
21
31
  export { default as LslStreamInlet } from './impl/LslStreamInlet.js';
22
32
  export * from './impl/LslStreamInlet.js';
23
- export { default as FakeStreamInlet } from './testDoubles/StreamInlet/FakeStreamInlet.js';
24
- export * from './testDoubles/StreamInlet/FakeStreamInlet.js';
33
+ export { default as SpyLslInlet } from './testDoubles/LslInlet/SpyLslInlet.js';
34
+ export * from './testDoubles/LslInlet/SpyLslInlet.js';
35
+ export { default as FakeLslInlet } from './testDoubles/LslInlet/FakeLslInlet.js';
36
+ export * from './testDoubles/LslInlet/FakeLslInlet.js';
25
37
  export { default as LslStreamOutlet } from './impl/LslStreamOutlet.js';
26
38
  export * from './impl/LslStreamOutlet.js';
27
- export { default as FakeStreamOutlet } from './testDoubles/StreamOutlet/FakeStreamOutlet.js';
28
- export * from './testDoubles/StreamOutlet/FakeStreamOutlet.js';
29
- export { default as LslWebSocketBridge } from './impl/LslWebSocketBridge.js';
30
- export * from './impl/LslWebSocketBridge.js';
31
- export { default as FakeWebSocketBridge } from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js';
32
- export * from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js';
39
+ export { default as FakeLslOutlet } from './testDoubles/LslOutlet/FakeLslOutlet.js';
40
+ export * from './testDoubles/LslOutlet/FakeLslOutlet.js';
33
41
  export { default as generateRandomOutletOptions } from './testDoubles/generateRandomOutletOptions.js';
42
+ export { default as UsbDeviceController } from './impl/controllers/UsbDeviceController.js';
43
+ export * from './impl/controllers/UsbDeviceController.js';
44
+ export { default as FakeUsbController } from './testDoubles/UsbController/FakeUsbController.js';
45
+ export * from './testDoubles/UsbController/FakeUsbController.js';
34
46
  export { default as FakeWebSocket } from './testDoubles/WebSockets/FakeWebSocket.js';
35
47
  export * from './testDoubles/WebSockets/FakeWebSocket.js';
36
48
  export { default as FakeWebSocketServer } from './testDoubles/WebSockets/FakeWebSocketServer.js';
package/build/index.js CHANGED
@@ -1,43 +1,56 @@
1
+ // ClockRegressor
2
+ export { default as WindowedClockRegressor } from './impl/clocks/WindowedClockRegressor.js';
3
+ export * from './impl/clocks/WindowedClockRegressor.js';
4
+ export { default as FakeClockRegressor } from './testDoubles/ClockRegressor/FakeClockRegressor.js';
5
+ export * from './testDoubles/ClockRegressor/FakeClockRegressor.js';
1
6
  // DeviceController
2
7
  export { default as BleDeviceController } from './impl/controllers/BleDeviceController.js';
3
8
  export * from './impl/controllers/BleDeviceController.js';
4
- export { default as FakeBleController } from './testDoubles/BleController/FakeBleController.js';
5
- export * from './testDoubles/BleController/FakeBleController.js';
6
9
  export { default as SpyBleController } from './testDoubles/BleController/SpyBleController.js';
7
10
  export * from './testDoubles/BleController/SpyBleController.js';
8
- // EventMarkerEmitter
11
+ export { default as FakeBleController } from './testDoubles/BleController/FakeBleController.js';
12
+ export * from './testDoubles/BleController/FakeBleController.js';
13
+ // LslWsBridge
14
+ export { default as LslWebSocketBridge } from './impl/LslWebSocketBridge.js';
15
+ export * from './impl/LslWebSocketBridge.js';
16
+ export { default as SpyLslWsBridge } from './testDoubles/LslWsBridge/SpyLslWsBridge.js';
17
+ export * from './testDoubles/LslWsBridge/SpyLslWsBridge.js';
18
+ export { default as FakeLslWsBridge } from './testDoubles/LslWsBridge/FakeLslWsBridge.js';
19
+ export * from './testDoubles/LslWsBridge/FakeLslWsBridge.js';
20
+ // LslEmitter
9
21
  export { default as LslEventMarkerEmitter } from './impl/LslEventMarkerEmitter.js';
10
22
  export * from './impl/LslEventMarkerEmitter.js';
11
- export { default as FakeEventMarkerEmitter } from './testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js';
12
- export * from './testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js';
13
- export { default as SpyEventMarkerEmitter } from './testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js';
14
- export * from './testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js';
15
- export { default as ThrowingEventMarkerEmitter } from './testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js';
16
- export * from './testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js';
17
- // StreamInfo
23
+ export { default as SpyLslEmitter } from './testDoubles/LslEmitter/SpyLslEmitter.js';
24
+ export * from './testDoubles/LslEmitter/SpyLslEmitter.js';
25
+ export { default as FakeLslEmitter } from './testDoubles/LslEmitter/FakeLslEmitter.js';
26
+ export * from './testDoubles/LslEmitter/FakeLslEmitter.js';
27
+ export { default as ThrowingLslEmitter } from './testDoubles/LslEmitter/ThrowingLslEmitter.js';
28
+ export * from './testDoubles/LslEmitter/ThrowingLslEmitter.js';
29
+ // LslInfo
18
30
  export { default as LslStreamInfo } from './impl/LslStreamInfo.js';
19
31
  export * from './impl/LslStreamInfo.js';
20
- export { default as SpyStreamInfo } from './testDoubles/StreamInfo/SpyStreamInfo.js';
21
- export * from './testDoubles/StreamInfo/SpyStreamInfo.js';
22
- export { default as FakeStreamInfo } from './testDoubles/StreamInfo/FakeStreamInfo.js';
23
- export * from './testDoubles/StreamInfo/FakeStreamInfo.js';
24
- // StreamInlet
32
+ export { default as SpyLslInfo } from './testDoubles/LslInfo/SpyLslInfo.js';
33
+ export * from './testDoubles/LslInfo/SpyLslInfo.js';
34
+ export { default as FakeLslInfo } from './testDoubles/LslInfo/FakeLslInfo.js';
35
+ export * from './testDoubles/LslInfo/FakeLslInfo.js';
36
+ // LslInlet
25
37
  export { default as LslStreamInlet } from './impl/LslStreamInlet.js';
26
38
  export * from './impl/LslStreamInlet.js';
27
- export { default as FakeStreamInlet } from './testDoubles/StreamInlet/FakeStreamInlet.js';
28
- export * from './testDoubles/StreamInlet/FakeStreamInlet.js';
29
- // StreamOutlet
39
+ export { default as SpyLslInlet } from './testDoubles/LslInlet/SpyLslInlet.js';
40
+ export * from './testDoubles/LslInlet/SpyLslInlet.js';
41
+ export { default as FakeLslInlet } from './testDoubles/LslInlet/FakeLslInlet.js';
42
+ export * from './testDoubles/LslInlet/FakeLslInlet.js';
43
+ // LslOutlet
30
44
  export { default as LslStreamOutlet } from './impl/LslStreamOutlet.js';
31
45
  export * from './impl/LslStreamOutlet.js';
32
- export { default as FakeStreamOutlet } from './testDoubles/StreamOutlet/FakeStreamOutlet.js';
33
- export * from './testDoubles/StreamOutlet/FakeStreamOutlet.js';
34
- // WebSocketBridge
35
- export { default as LslWebSocketBridge } from './impl/LslWebSocketBridge.js';
36
- export * from './impl/LslWebSocketBridge.js';
37
- export { default as FakeWebSocketBridge } from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js';
38
- export * from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js';
39
- // Utils
46
+ export { default as FakeLslOutlet } from './testDoubles/LslOutlet/FakeLslOutlet.js';
47
+ export * from './testDoubles/LslOutlet/FakeLslOutlet.js';
40
48
  export { default as generateRandomOutletOptions } from './testDoubles/generateRandomOutletOptions.js';
49
+ // UsbController
50
+ export { default as UsbDeviceController } from './impl/controllers/UsbDeviceController.js';
51
+ export * from './impl/controllers/UsbDeviceController.js';
52
+ export { default as FakeUsbController } from './testDoubles/UsbController/FakeUsbController.js';
53
+ export * from './testDoubles/UsbController/FakeUsbController.js';
41
54
  // WebSockets
42
55
  export { default as FakeWebSocket } from './testDoubles/WebSockets/FakeWebSocket.js';
43
56
  export * from './testDoubles/WebSockets/FakeWebSocket.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AAEnB,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAC1F,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kDAAkD,CAAA;AAC/F,cAAc,kDAAkD,CAAA;AAEhE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,iDAAiD,CAAA;AAC7F,cAAc,iDAAiD,CAAA;AAE/D,qBAAqB;AAErB,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAClF,cAAc,iCAAiC,CAAA;AAE/C,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,4DAA4D,CAAA;AAC9G,cAAc,4DAA4D,CAAA;AAE1E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,2DAA2D,CAAA;AAC5G,cAAc,2DAA2D,CAAA;AAEzE,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,gEAAgE,CAAA;AACtH,cAAc,gEAAgE,CAAA;AAE9E,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACpF,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,cAAc;AAEd,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8CAA8C,CAAA;AACzF,cAAc,8CAA8C,CAAA;AAE5D,eAAe;AAEf,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACtE,cAAc,2BAA2B,CAAA;AAEzC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AAC5F,cAAc,gDAAgD,CAAA;AAE9D,kBAAkB;AAElB,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC5E,cAAc,8BAA8B,CAAA;AAE5C,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,sDAAsD,CAAA;AACrG,cAAc,sDAAsD,CAAA;AAEpE,QAAQ;AAER,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,8CAA8C,CAAA;AAErG,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACpF,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AAChG,cAAc,iDAAiD,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AAEjB,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,yCAAyC,CAAA;AAC3F,cAAc,yCAAyC,CAAA;AAEvD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,oDAAoD,CAAA;AAClG,cAAc,oDAAoD,CAAA;AAElE,mBAAmB;AAEnB,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAC1F,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,iDAAiD,CAAA;AAC7F,cAAc,iDAAiD,CAAA;AAE/D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kDAAkD,CAAA;AAC/F,cAAc,kDAAkD,CAAA;AAEhE,cAAc;AAEd,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC5E,cAAc,8BAA8B,CAAA;AAE5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACvF,cAAc,6CAA6C,CAAA;AAE3D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8CAA8C,CAAA;AACzF,cAAc,8CAA8C,CAAA;AAE5D,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAClF,cAAc,iCAAiC,CAAA;AAE/C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACpF,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,gDAAgD,CAAA;AAC9F,cAAc,gDAAgD,CAAA;AAE9D,UAAU;AAEV,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAC3E,cAAc,qCAAqC,CAAA;AAEnD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAC7E,cAAc,sCAAsC,CAAA;AAEpD,WAAW;AAEX,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAC9E,cAAc,uCAAuC,CAAA;AAErD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAChF,cAAc,wCAAwC,CAAA;AAEtD,YAAY;AAEZ,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACtE,cAAc,2BAA2B,CAAA;AAEzC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0CAA0C,CAAA;AACnF,cAAc,0CAA0C,CAAA;AAExD,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,8CAA8C,CAAA;AAErG,gBAAgB;AAEhB,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAC1F,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kDAAkD,CAAA;AAC/F,cAAc,kDAAkD,CAAA;AAEhE,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACpF,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AAChG,cAAc,iDAAiD,CAAA"}
@@ -1,11 +1,12 @@
1
1
  import LslEventMarkerEmitter from '../impl/LslEventMarkerEmitter.js';
2
- const outlet = await LslEventMarkerEmitter.Create();
2
+ const emitter = await LslEventMarkerEmitter.Create();
3
3
  const markers = [
4
4
  { name: 'phase-1-begin', waitAfterMs: 100 },
5
5
  { name: 'phase-1-end', waitAfterMs: 100 },
6
6
  { name: 'never-reached-marker', waitAfterMs: 100 },
7
7
  ];
8
- void outlet.emitMany(markers);
8
+ void emitter.emitMany(markers);
9
9
  await new Promise((resolve) => setTimeout(resolve, 250));
10
- outlet.interrupt();
11
- //# sourceMappingURL=runLslEventMarkerEmitter.js.map
10
+ emitter.interrupt();
11
+ emitter.destroy();
12
+ //# sourceMappingURL=runLslEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runLslEmitter.js","sourceRoot":"","sources":["../../src/scripts/runLslEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,kCAAkC,CAAA;AAEpE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,CAAA;AAEpD,MAAM,OAAO,GAAG;IACZ,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE;IAC3C,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE;IACzC,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,GAAG,EAAE;CACrD,CAAA;AAED,KAAK,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAE9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;AAExD,OAAO,CAAC,SAAS,EAAE,CAAA;AACnB,OAAO,CAAC,OAAO,EAAE,CAAA"}
@@ -21,4 +21,4 @@ async function main() {
21
21
  main().catch((error) => {
22
22
  console.error('Error in main:', error);
23
23
  });
24
- //# sourceMappingURL=runLslStreamOutlet.js.map
24
+ //# sourceMappingURL=runLslOutlet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runLslOutlet.js","sourceRoot":"","sources":["../../src/scripts/runLslOutlet.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAA;AAExD,KAAK,UAAU,IAAI;IACf,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,aAAa;QACvB,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QACnC,aAAa,EAAE,SAAS;QACxB,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,CAAC;KACf,CAAC,CAAA;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;QAExD,MAAM,CAAC,UAAU,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;YACnB,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;YACnB,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;SACtB,CAAC,CAAA;IACN,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA"}
@@ -25,7 +25,7 @@ const charCallbacks = Object.entries(MUSE_CHARACTERISTIC_UUIDS).map(([name, uuid
25
25
  },
26
26
  };
27
27
  });
28
- const muse = await BleDeviceController.Create({
28
+ const muse = BleDeviceController.Create({
29
29
  deviceUuid: 'CA6A61B7-B7A8-AF24-3C9E-04A6A5012554',
30
30
  charCallbacks,
31
31
  rssiIntervalMs: 1000,
@@ -1 +1 @@
1
- {"version":3,"file":"runMuse.js","sourceRoot":"","sources":["../../src/scripts/runMuse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,4CAA4C,CAAA;AAE5E,MAAM,yBAAyB,GAA2B;IACtD,OAAO,EAAE,sCAAsC;IAC/C,SAAS,EAAE,sCAAsC;IACjD,SAAS,EAAE,sCAAsC;IACjD,aAAa,EAAE,sCAAsC;IACrD,WAAW,EAAE,sCAAsC;IACnD,YAAY,EAAE,sCAAsC;IACpD,OAAO,EAAE,sCAAsC;IAC/C,OAAO,EAAE,sCAAsC;IAC/C,OAAO,EAAE,sCAAsC;IAC/C,OAAO,EAAE,sCAAsC;IAC/C,QAAQ,EAAE,sCAAsC;IAChD,OAAO,EAAE,sCAAsC;CAClD,CAAA;AAED,MAAM,YAAY,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAA;AAEzD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAC/D,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;IACb,OAAO;QACH,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,YAAoB,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAa,CAAA;YAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,YAAY,MAAM,EAAE,EAAE,KAAK,CAAC,CAAA;QAC7D,CAAC;KACJ,CAAA;AACL,CAAC,CACJ,CAAA;AAED,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC;IAC1C,UAAU,EAAE,sCAAsC;IAClD,aAAa;IACb,cAAc,EAAE,IAAI;CACvB,CAAC,CAAA;AAEF,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;AAEpB,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACvC,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;AAE7D,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"runMuse.js","sourceRoot":"","sources":["../../src/scripts/runMuse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,4CAA4C,CAAA;AAE5E,MAAM,yBAAyB,GAA2B;IACtD,OAAO,EAAE,sCAAsC;IAC/C,SAAS,EAAE,sCAAsC;IACjD,SAAS,EAAE,sCAAsC;IACjD,aAAa,EAAE,sCAAsC;IACrD,WAAW,EAAE,sCAAsC;IACnD,YAAY,EAAE,sCAAsC;IACpD,OAAO,EAAE,sCAAsC;IAC/C,OAAO,EAAE,sCAAsC;IAC/C,OAAO,EAAE,sCAAsC;IAC/C,OAAO,EAAE,sCAAsC;IAC/C,QAAQ,EAAE,sCAAsC;IAChD,OAAO,EAAE,sCAAsC;CAClD,CAAA;AAED,MAAM,YAAY,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAA;AAEzD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAC/D,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;IACb,OAAO;QACH,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,YAAoB,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAa,CAAA;YAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,YAAY,MAAM,EAAE,EAAE,KAAK,CAAC,CAAA;QAC7D,CAAC;KACJ,CAAA;AACL,CAAC,CACJ,CAAA;AAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,sCAAsC;IAClD,aAAa;IACb,cAAc,EAAE,IAAI;CACvB,CAAC,CAAA;AAEF,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;AAEpB,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACvC,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;AAE7D,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA"}
@@ -0,0 +1,14 @@
1
+ import UsbDeviceController from '../impl/controllers/UsbDeviceController.js';
2
+ console.info('\nCreating UsbDeviceController...');
3
+ const controller = UsbDeviceController.Create({
4
+ serialNumber: 'DP04WG8J',
5
+ onData: (_data, length, timestampSec) => {
6
+ console.info(`[${timestampSec}] Buffer length: ${length}`);
7
+ },
8
+ });
9
+ console.info('Connecting to UsbDeviceController...');
10
+ await controller.connect();
11
+ console.info('Waiting for 10 seconds...');
12
+ await new Promise((resolve) => setTimeout(resolve, 10000));
13
+ console.info('Done!');
14
+ //# sourceMappingURL=runUsb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runUsb.js","sourceRoot":"","sources":["../../src/scripts/runUsb.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,4CAA4C,CAAA;AAE5E,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;AAEjD,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC;IAC1C,YAAY,EAAE,UAAU;IACxB,MAAM,EAAE,CAAC,KAAa,EAAE,MAAc,EAAE,YAAoB,EAAE,EAAE;QAC5D,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,oBAAoB,MAAM,EAAE,CAAC,CAAA;IAC9D,CAAC;CACJ,CAAC,CAAA;AAEF,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;AAEpD,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;AAE1B,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;AAEzC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;AAE1D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { BleController, BleControllerOptions } from '../../impl/controllers/BleDeviceController.js';
1
+ import { BleController, BleControllerOptions, CharacteristicCallbacks } from '../../impl/controllers/BleDeviceController.js';
2
2
  export default class FakeBleController implements BleController {
3
3
  static callsToConstructor: (BleControllerOptions | undefined)[];
4
4
  static numCallsToConnect: number;
@@ -6,6 +6,7 @@ export default class FakeBleController implements BleController {
6
6
  characteristicUuid: string;
7
7
  value: string;
8
8
  }[];
9
+ static callsToSubscribeCharacteristics: CharacteristicCallbacks[];
9
10
  static numCallsToDisconnect: number;
10
11
  static fakeCharacteristics: Record<string, unknown>;
11
12
  static fakeName: string;
@@ -14,6 +15,7 @@ export default class FakeBleController implements BleController {
14
15
  constructor(options?: BleControllerOptions);
15
16
  connect(): Promise<void>;
16
17
  writeCharacteristic(characteristicUuid: string, value: string): Promise<void>;
18
+ subscribeCharacteristics(charCallbacks: CharacteristicCallbacks): Promise<void>;
17
19
  disconnect(): Promise<void>;
18
20
  get uuid(): string;
19
21
  get name(): string;
@@ -3,6 +3,7 @@ export default class FakeBleController {
3
3
  static callsToConstructor = [];
4
4
  static numCallsToConnect = 0;
5
5
  static callsToWriteCharacteristic = [];
6
+ static callsToSubscribeCharacteristics = [];
6
7
  static numCallsToDisconnect = 0;
7
8
  static fakeCharacteristics = {};
8
9
  static fakeName = `fake-${generateId()}`;
@@ -23,6 +24,9 @@ export default class FakeBleController {
23
24
  value,
24
25
  });
25
26
  }
27
+ async subscribeCharacteristics(charCallbacks) {
28
+ FakeBleController.callsToSubscribeCharacteristics.push(charCallbacks);
29
+ }
26
30
  async disconnect() {
27
31
  FakeBleController.numCallsToDisconnect++;
28
32
  }
@@ -36,6 +40,7 @@ export default class FakeBleController {
36
40
  this.callsToConstructor = [];
37
41
  this.numCallsToConnect = 0;
38
42
  this.callsToWriteCharacteristic = [];
43
+ this.callsToSubscribeCharacteristics = [];
39
44
  this.numCallsToDisconnect = 0;
40
45
  }
41
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FakeBleController.js","sourceRoot":"","sources":["../../../src/testDoubles/BleController/FakeBleController.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAM/C,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAC3B,MAAM,CAAC,kBAAkB,GAAyC,EAAE,CAAA;IAEpE,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAE5B,MAAM,CAAC,0BAA0B,GAGlC,EAAE,CAAA;IAED,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAA;IAE/B,MAAM,CAAC,mBAAmB,GAA4B,EAAE,CAAA;IACxD,MAAM,CAAC,QAAQ,GAAG,QAAQ,UAAU,EAAE,EAAE,CAAA;IAEvC,KAAK,CAAQ;IACb,KAAK,CAAQ;IAErB,YAAmB,OAA8B;QAC7C,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAEpC,IAAI,CAAC,KAAK,GAAG,UAAU,IAAI,UAAU,EAAE,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAA;QAEvC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,iBAAiB,CAAC,iBAAiB,EAAE,CAAA;IACzC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC5B,kBAA0B,EAC1B,KAAa;QAEb,iBAAiB,CAAC,0BAA0B,CAAC,IAAI,CAAC;YAC9C,kBAAkB;YAClB,KAAK;SACR,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,iBAAiB,CAAC,oBAAoB,EAAE,CAAA;IAC5C,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAA;QACpC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAA;IACjC,CAAC"}
1
+ {"version":3,"file":"FakeBleController.js","sourceRoot":"","sources":["../../../src/testDoubles/BleController/FakeBleController.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAO/C,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAC3B,MAAM,CAAC,kBAAkB,GAAyC,EAAE,CAAA;IAEpE,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAE5B,MAAM,CAAC,0BAA0B,GAGlC,EAAE,CAAA;IAED,MAAM,CAAC,+BAA+B,GACzC,EAAE,CAAA;IAEC,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAA;IAE/B,MAAM,CAAC,mBAAmB,GAA4B,EAAE,CAAA;IACxD,MAAM,CAAC,QAAQ,GAAG,QAAQ,UAAU,EAAE,EAAE,CAAA;IAEvC,KAAK,CAAQ;IACb,KAAK,CAAQ;IAErB,YAAmB,OAA8B;QAC7C,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAEpC,IAAI,CAAC,KAAK,GAAG,UAAU,IAAI,UAAU,EAAE,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAA;QAEvC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,iBAAiB,CAAC,iBAAiB,EAAE,CAAA;IACzC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC5B,kBAA0B,EAC1B,KAAa;QAEb,iBAAiB,CAAC,0BAA0B,CAAC,IAAI,CAAC;YAC9C,kBAAkB;YAClB,KAAK;SACR,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,wBAAwB,CACjC,aAAsC;QAEtC,iBAAiB,CAAC,+BAA+B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACzE,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,iBAAiB,CAAC,oBAAoB,EAAE,CAAA;IAC5C,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAA;QACpC,IAAI,CAAC,+BAA+B,GAAG,EAAE,CAAA;QACzC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAA;IACjC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ClockRegressor, WindowedClockRegressorOptions } from '../../impl/clocks/WindowedClockRegressor.js';
2
+ export default class FakeClockRegressor implements ClockRegressor {
3
+ static callsToConstructor: {
4
+ nominalHz: number;
5
+ options?: WindowedClockRegressorOptions;
6
+ }[];
7
+ static callsToDeriveTimestamps: {
8
+ deviceTime: number;
9
+ earliestLslTime: number;
10
+ chunkSize: number;
11
+ }[];
12
+ static fakeResultValue: number;
13
+ readonly nominalHz: number;
14
+ constructor(nominalHz: number, options?: WindowedClockRegressorOptions);
15
+ deriveTimestamps(deviceTime: number, earliestLslTime: number, chunkSize: number): any[];
16
+ static resetTestDouble(): void;
17
+ }
@@ -0,0 +1,23 @@
1
+ export default class FakeClockRegressor {
2
+ static callsToConstructor = [];
3
+ static callsToDeriveTimestamps = [];
4
+ static fakeResultValue = 0;
5
+ nominalHz;
6
+ constructor(nominalHz, options) {
7
+ FakeClockRegressor.callsToConstructor.push({ nominalHz, options });
8
+ this.nominalHz = nominalHz;
9
+ }
10
+ deriveTimestamps(deviceTime, earliestLslTime, chunkSize) {
11
+ FakeClockRegressor.callsToDeriveTimestamps.push({
12
+ deviceTime,
13
+ earliestLslTime,
14
+ chunkSize,
15
+ });
16
+ return Array(chunkSize).fill(FakeClockRegressor.fakeResultValue);
17
+ }
18
+ static resetTestDouble() {
19
+ FakeClockRegressor.callsToConstructor = [];
20
+ FakeClockRegressor.callsToDeriveTimestamps = [];
21
+ }
22
+ }
23
+ //# sourceMappingURL=FakeClockRegressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeClockRegressor.js","sourceRoot":"","sources":["../../../src/testDoubles/ClockRegressor/FakeClockRegressor.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,OAAO,kBAAkB;IAC5B,MAAM,CAAC,kBAAkB,GAG1B,EAAE,CAAA;IACD,MAAM,CAAC,uBAAuB,GAI/B,EAAE,CAAA;IAED,MAAM,CAAC,eAAe,GAAG,CAAC,CAAA;IAEjB,SAAS,CAAQ;IAEjC,YACI,SAAiB,EACjB,OAAuC;QAEvC,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC9B,CAAC;IAEM,gBAAgB,CACnB,UAAkB,EAClB,eAAuB,EACvB,SAAiB;QAEjB,kBAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC;YAC5C,UAAU;YACV,eAAe;YACf,SAAS;SACZ,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAA;IACpE,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,kBAAkB,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAC1C,kBAAkB,CAAC,uBAAuB,GAAG,EAAE,CAAA;IACnD,CAAC"}