@depz/sensor-sdk 0.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.
Files changed (130) hide show
  1. package/README.md +69 -0
  2. package/dist/dataset.d.ts +93 -0
  3. package/dist/dataset.d.ts.map +1 -0
  4. package/dist/dataset.js +253 -0
  5. package/dist/dataset.js.map +1 -0
  6. package/dist/device/device.d.ts +185 -0
  7. package/dist/device/device.d.ts.map +1 -0
  8. package/dist/device/device.js +421 -0
  9. package/dist/device/device.js.map +1 -0
  10. package/dist/device/link.d.ts +62 -0
  11. package/dist/device/link.d.ts.map +1 -0
  12. package/dist/device/link.js +130 -0
  13. package/dist/device/link.js.map +1 -0
  14. package/dist/discovery.d.ts +109 -0
  15. package/dist/discovery.d.ts.map +1 -0
  16. package/dist/discovery.js +281 -0
  17. package/dist/discovery.js.map +1 -0
  18. package/dist/errors.d.ts +39 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +69 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +42 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +31 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/protocol/bno086.d.ts +36 -0
  27. package/dist/protocol/bno086.d.ts.map +1 -0
  28. package/dist/protocol/bno086.js +38 -0
  29. package/dist/protocol/bno086.js.map +1 -0
  30. package/dist/protocol/common.d.ts +103 -0
  31. package/dist/protocol/common.d.ts.map +1 -0
  32. package/dist/protocol/common.js +121 -0
  33. package/dist/protocol/common.js.map +1 -0
  34. package/dist/protocol/crc.d.ts +17 -0
  35. package/dist/protocol/crc.d.ts.map +1 -0
  36. package/dist/protocol/crc.js +55 -0
  37. package/dist/protocol/crc.js.map +1 -0
  38. package/dist/protocol/framing.d.ts +65 -0
  39. package/dist/protocol/framing.d.ts.map +1 -0
  40. package/dist/protocol/framing.js +152 -0
  41. package/dist/protocol/framing.js.map +1 -0
  42. package/dist/protocol/fwdepz.d.ts +21 -0
  43. package/dist/protocol/fwdepz.d.ts.map +1 -0
  44. package/dist/protocol/fwdepz.js +46 -0
  45. package/dist/protocol/fwdepz.js.map +1 -0
  46. package/dist/protocol/identity.d.ts +14 -0
  47. package/dist/protocol/identity.d.ts.map +1 -0
  48. package/dist/protocol/identity.js +28 -0
  49. package/dist/protocol/identity.js.map +1 -0
  50. package/dist/protocol/sr04.d.ts +38 -0
  51. package/dist/protocol/sr04.d.ts.map +1 -0
  52. package/dist/protocol/sr04.js +58 -0
  53. package/dist/protocol/sr04.js.map +1 -0
  54. package/dist/protocol/usb-ids.d.ts +60 -0
  55. package/dist/protocol/usb-ids.d.ts.map +1 -0
  56. package/dist/protocol/usb-ids.js +79 -0
  57. package/dist/protocol/usb-ids.js.map +1 -0
  58. package/dist/protocol/vl53l8.d.ts +59 -0
  59. package/dist/protocol/vl53l8.d.ts.map +1 -0
  60. package/dist/protocol/vl53l8.js +116 -0
  61. package/dist/protocol/vl53l8.js.map +1 -0
  62. package/dist/sensors/bno086/bno086.d.ts +197 -0
  63. package/dist/sensors/bno086/bno086.d.ts.map +1 -0
  64. package/dist/sensors/bno086/bno086.js +543 -0
  65. package/dist/sensors/bno086/bno086.js.map +1 -0
  66. package/dist/sensors/bno086/reports.d.ts +289 -0
  67. package/dist/sensors/bno086/reports.d.ts.map +1 -0
  68. package/dist/sensors/bno086/reports.js +397 -0
  69. package/dist/sensors/bno086/reports.js.map +1 -0
  70. package/dist/sensors/bno086/sh2.d.ts +307 -0
  71. package/dist/sensors/bno086/sh2.d.ts.map +1 -0
  72. package/dist/sensors/bno086/sh2.js +480 -0
  73. package/dist/sensors/bno086/sh2.js.map +1 -0
  74. package/dist/sensors/bno086/shtp.d.ts +98 -0
  75. package/dist/sensors/bno086/shtp.d.ts.map +1 -0
  76. package/dist/sensors/bno086/shtp.js +205 -0
  77. package/dist/sensors/bno086/shtp.js.map +1 -0
  78. package/dist/sensors/sr04.d.ts +65 -0
  79. package/dist/sensors/sr04.d.ts.map +1 -0
  80. package/dist/sensors/sr04.js +121 -0
  81. package/dist/sensors/sr04.js.map +1 -0
  82. package/dist/sensors/vl53l8/assets/ch.d.ts +16 -0
  83. package/dist/sensors/vl53l8/assets/ch.d.ts.map +1 -0
  84. package/dist/sensors/vl53l8/assets/ch.js +22 -0
  85. package/dist/sensors/vl53l8/assets/ch.js.map +1 -0
  86. package/dist/sensors/vl53l8/assets/cx.d.ts +16 -0
  87. package/dist/sensors/vl53l8/assets/cx.d.ts.map +1 -0
  88. package/dist/sensors/vl53l8/assets/cx.js +22 -0
  89. package/dist/sensors/vl53l8/assets/cx.js.map +1 -0
  90. package/dist/sensors/vl53l8/assets/decode.d.ts +7 -0
  91. package/dist/sensors/vl53l8/assets/decode.d.ts.map +1 -0
  92. package/dist/sensors/vl53l8/assets/decode.js +35 -0
  93. package/dist/sensors/vl53l8/assets/decode.js.map +1 -0
  94. package/dist/sensors/vl53l8/assets/index.d.ts +19 -0
  95. package/dist/sensors/vl53l8/assets/index.d.ts.map +1 -0
  96. package/dist/sensors/vl53l8/assets/index.js +11 -0
  97. package/dist/sensors/vl53l8/assets/index.js.map +1 -0
  98. package/dist/sensors/vl53l8/cnh.d.ts +113 -0
  99. package/dist/sensors/vl53l8/cnh.d.ts.map +1 -0
  100. package/dist/sensors/vl53l8/cnh.js +299 -0
  101. package/dist/sensors/vl53l8/cnh.js.map +1 -0
  102. package/dist/sensors/vl53l8/uld.d.ts +346 -0
  103. package/dist/sensors/vl53l8/uld.d.ts.map +1 -0
  104. package/dist/sensors/vl53l8/uld.js +1388 -0
  105. package/dist/sensors/vl53l8/uld.js.map +1 -0
  106. package/dist/sensors/vl53l8/vl53l8.d.ts +182 -0
  107. package/dist/sensors/vl53l8/vl53l8.d.ts.map +1 -0
  108. package/dist/sensors/vl53l8/vl53l8.js +411 -0
  109. package/dist/sensors/vl53l8/vl53l8.js.map +1 -0
  110. package/dist/transport/loopback.d.ts +18 -0
  111. package/dist/transport/loopback.d.ts.map +1 -0
  112. package/dist/transport/loopback.js +53 -0
  113. package/dist/transport/loopback.js.map +1 -0
  114. package/dist/transport/node.d.ts +51 -0
  115. package/dist/transport/node.d.ts.map +1 -0
  116. package/dist/transport/node.js +123 -0
  117. package/dist/transport/node.js.map +1 -0
  118. package/dist/transport/replay.d.ts +68 -0
  119. package/dist/transport/replay.d.ts.map +1 -0
  120. package/dist/transport/replay.js +196 -0
  121. package/dist/transport/replay.js.map +1 -0
  122. package/dist/transport/types.d.ts +23 -0
  123. package/dist/transport/types.d.ts.map +1 -0
  124. package/dist/transport/types.js +7 -0
  125. package/dist/transport/types.js.map +1 -0
  126. package/dist/transport/webserial.d.ts +69 -0
  127. package/dist/transport/webserial.d.ts.map +1 -0
  128. package/dist/transport/webserial.js +196 -0
  129. package/dist/transport/webserial.js.map +1 -0
  130. package/package.json +77 -0
@@ -0,0 +1,397 @@
1
+ /**
2
+ * SH-2 input-report catalog and parsers (contracts/05_SENSOR_BNO086.md §5).
3
+ *
4
+ * Raw wire integers are authoritative and always preserved; scaled numbers
5
+ * are derived using the fixed Q points below (value = raw / 2**Q). Report
6
+ * IDs and Q points cross-checked against the BNO08X datasheet (CEVA
7
+ * 1000-3927) and the proven vendor host tool `bno086_tool.py`.
8
+ *
9
+ * Timestamps: channel-3 cargos start with a Base Timestamp Reference (0xFB,
10
+ * i32 base delta in 100 µs ticks, SUBTRACTED from the bridge capture time);
11
+ * each report adds its own 14-bit delay (status bits 7:2 are the upper 6
12
+ * bits, byte 3 the lower 8; 100 µs resolution):
13
+ *
14
+ * timestampUs = captureUs - baseDelta*100 + delay*100
15
+ *
16
+ * Mirrors the Python reference `depz_sensor_sdk.bno086.reports`.
17
+ */
18
+ /** SH-2 input report IDs (datasheet §1.3.5, sh2 reference driver). */
19
+ export var SensorId;
20
+ (function (SensorId) {
21
+ SensorId[SensorId["Accelerometer"] = 1] = "Accelerometer";
22
+ SensorId[SensorId["Gyroscope"] = 2] = "Gyroscope";
23
+ SensorId[SensorId["Magnetometer"] = 3] = "Magnetometer";
24
+ SensorId[SensorId["LinearAcceleration"] = 4] = "LinearAcceleration";
25
+ SensorId[SensorId["RotationVector"] = 5] = "RotationVector";
26
+ SensorId[SensorId["Gravity"] = 6] = "Gravity";
27
+ SensorId[SensorId["UncalibratedGyroscope"] = 7] = "UncalibratedGyroscope";
28
+ SensorId[SensorId["GameRotationVector"] = 8] = "GameRotationVector";
29
+ SensorId[SensorId["GeomagneticRotationVector"] = 9] = "GeomagneticRotationVector";
30
+ SensorId[SensorId["Pressure"] = 10] = "Pressure";
31
+ SensorId[SensorId["AmbientLight"] = 11] = "AmbientLight";
32
+ SensorId[SensorId["Humidity"] = 12] = "Humidity";
33
+ SensorId[SensorId["Proximity"] = 13] = "Proximity";
34
+ SensorId[SensorId["Temperature"] = 14] = "Temperature";
35
+ SensorId[SensorId["UncalibratedMagnetometer"] = 15] = "UncalibratedMagnetometer";
36
+ SensorId[SensorId["TapDetector"] = 16] = "TapDetector";
37
+ SensorId[SensorId["StepCounter"] = 17] = "StepCounter";
38
+ SensorId[SensorId["SignificantMotion"] = 18] = "SignificantMotion";
39
+ SensorId[SensorId["StabilityClassifier"] = 19] = "StabilityClassifier";
40
+ SensorId[SensorId["RawAccelerometer"] = 20] = "RawAccelerometer";
41
+ SensorId[SensorId["RawGyroscope"] = 21] = "RawGyroscope";
42
+ SensorId[SensorId["RawMagnetometer"] = 22] = "RawMagnetometer";
43
+ SensorId[SensorId["StepDetector"] = 24] = "StepDetector";
44
+ SensorId[SensorId["ShakeDetector"] = 25] = "ShakeDetector";
45
+ SensorId[SensorId["FlipDetector"] = 26] = "FlipDetector";
46
+ SensorId[SensorId["PickupDetector"] = 27] = "PickupDetector";
47
+ SensorId[SensorId["StabilityDetector"] = 28] = "StabilityDetector";
48
+ SensorId[SensorId["PersonalActivityClassifier"] = 30] = "PersonalActivityClassifier";
49
+ SensorId[SensorId["SleepDetector"] = 31] = "SleepDetector";
50
+ SensorId[SensorId["TiltDetector"] = 32] = "TiltDetector";
51
+ SensorId[SensorId["PocketDetector"] = 33] = "PocketDetector";
52
+ SensorId[SensorId["CircleDetector"] = 34] = "CircleDetector";
53
+ SensorId[SensorId["HeartRateMonitor"] = 35] = "HeartRateMonitor";
54
+ SensorId[SensorId["ArvrStabilizedRv"] = 40] = "ArvrStabilizedRv";
55
+ SensorId[SensorId["ArvrStabilizedGameRv"] = 41] = "ArvrStabilizedGameRv";
56
+ SensorId[SensorId["GyroIntegratedRv"] = 42] = "GyroIntegratedRv";
57
+ })(SensorId || (SensorId = {}));
58
+ // In-cargo control IDs on the input channels
59
+ export const BASE_TIMESTAMP_REF = 0xfb; // + i32 base delta (100 µs ticks)
60
+ export const TIMESTAMP_REBASE = 0xfa; // + i32 rebase delta (100 µs ticks), batching
61
+ /** Q point of the primary fields (value = raw / 2**Q); see module docs. */
62
+ export const Q_POINTS = {
63
+ [SensorId.Accelerometer]: 8,
64
+ [SensorId.LinearAcceleration]: 8,
65
+ [SensorId.Gravity]: 8,
66
+ [SensorId.Gyroscope]: 9,
67
+ [SensorId.UncalibratedGyroscope]: 9,
68
+ [SensorId.Magnetometer]: 4,
69
+ [SensorId.UncalibratedMagnetometer]: 4,
70
+ [SensorId.RotationVector]: 14,
71
+ [SensorId.GameRotationVector]: 14,
72
+ [SensorId.GeomagneticRotationVector]: 14,
73
+ [SensorId.ArvrStabilizedRv]: 14,
74
+ [SensorId.ArvrStabilizedGameRv]: 14,
75
+ [SensorId.GyroIntegratedRv]: 14,
76
+ [SensorId.Pressure]: 20,
77
+ [SensorId.AmbientLight]: 8,
78
+ [SensorId.Humidity]: 8,
79
+ [SensorId.Proximity]: 4,
80
+ [SensorId.Temperature]: 7,
81
+ [SensorId.RawAccelerometer]: 0,
82
+ [SensorId.RawGyroscope]: 0,
83
+ [SensorId.RawMagnetometer]: 0,
84
+ };
85
+ export const RV_ACCURACY_Q = 12; // rotation-vector accuracy estimate, radians
86
+ export const GYRO_RV_ANGVEL_Q = 10; // gyro-integrated RV angular velocity, rad/s
87
+ /**
88
+ * Total report length on the wire, 4-byte SH-2 header included
89
+ * (sh2 reference driver report-length table).
90
+ */
91
+ export const REPORT_LENGTHS = {
92
+ [SensorId.Accelerometer]: 10,
93
+ [SensorId.Gyroscope]: 10,
94
+ [SensorId.Magnetometer]: 10,
95
+ [SensorId.LinearAcceleration]: 10,
96
+ [SensorId.RotationVector]: 14,
97
+ [SensorId.Gravity]: 10,
98
+ [SensorId.UncalibratedGyroscope]: 16,
99
+ [SensorId.GameRotationVector]: 12,
100
+ [SensorId.GeomagneticRotationVector]: 14,
101
+ [SensorId.Pressure]: 8,
102
+ [SensorId.AmbientLight]: 8,
103
+ [SensorId.Humidity]: 6,
104
+ [SensorId.Proximity]: 6,
105
+ [SensorId.Temperature]: 6,
106
+ [SensorId.UncalibratedMagnetometer]: 16,
107
+ [SensorId.TapDetector]: 5,
108
+ [SensorId.StepCounter]: 12,
109
+ [SensorId.SignificantMotion]: 6,
110
+ [SensorId.StabilityClassifier]: 6,
111
+ [SensorId.RawAccelerometer]: 16,
112
+ [SensorId.RawGyroscope]: 16,
113
+ [SensorId.RawMagnetometer]: 16,
114
+ [SensorId.StepDetector]: 8,
115
+ [SensorId.ShakeDetector]: 6,
116
+ [SensorId.FlipDetector]: 6,
117
+ [SensorId.PickupDetector]: 8,
118
+ [SensorId.StabilityDetector]: 6,
119
+ [SensorId.PersonalActivityClassifier]: 16,
120
+ [SensorId.SleepDetector]: 6,
121
+ [SensorId.TiltDetector]: 6,
122
+ [SensorId.PocketDetector]: 6,
123
+ [SensorId.CircleDetector]: 6,
124
+ [SensorId.HeartRateMonitor]: 6,
125
+ [SensorId.ArvrStabilizedRv]: 14,
126
+ [SensorId.ArvrStabilizedGameRv]: 12,
127
+ [SensorId.GyroIntegratedRv]: 14,
128
+ };
129
+ export const STABILITY_NAMES = {
130
+ 0: "unknown",
131
+ 1: "on_table",
132
+ 2: "stationary",
133
+ 3: "stable",
134
+ 4: "motion",
135
+ };
136
+ export const ACTIVITY_NAMES = {
137
+ 0: "unknown",
138
+ 1: "in_vehicle",
139
+ 2: "on_bicycle",
140
+ 3: "on_foot",
141
+ 4: "still",
142
+ 5: "tilting",
143
+ 6: "walking",
144
+ 7: "running",
145
+ 8: "on_stairs",
146
+ };
147
+ function q(raw, qPoint) {
148
+ return raw / (1 << qPoint);
149
+ }
150
+ // ── parsers ───────────────────────────────────────────────────────────────────
151
+ function view(p) {
152
+ return new DataView(p.buffer, p.byteOffset, p.byteLength);
153
+ }
154
+ /**
155
+ * Parse a channel-3/4 cargo into typed reports.
156
+ *
157
+ * `captureTimestampUs` is the bridge RPT_DATA capture time (MCU uptime).
158
+ * Handles 0xFB base timestamp references and 0xFA rebases; every report's
159
+ * timestamp is `base + delay` where base = capture − baseDelta·100 µs.
160
+ */
161
+ export function parseInputCargo(payload, captureTimestampUs) {
162
+ const out = [];
163
+ const v = view(payload);
164
+ let baseUs = captureTimestampUs;
165
+ let pos = 0;
166
+ const n = payload.length;
167
+ while (pos < n) {
168
+ const rid = payload[pos];
169
+ if (rid === BASE_TIMESTAMP_REF && pos + 5 <= n) {
170
+ const delta = v.getInt32(pos + 1, true);
171
+ baseUs = captureTimestampUs - BigInt(delta) * 100n;
172
+ pos += 5;
173
+ continue;
174
+ }
175
+ if (rid === TIMESTAMP_REBASE && pos + 5 <= n) {
176
+ const delta = v.getInt32(pos + 1, true);
177
+ baseUs += BigInt(delta) * 100n;
178
+ pos += 5;
179
+ continue;
180
+ }
181
+ const length = REPORT_LENGTHS[rid];
182
+ if (length === undefined || pos + length > n) {
183
+ out.push({
184
+ type: "UnknownReport",
185
+ sensorId: rid,
186
+ timestampUs: baseUs,
187
+ data: payload.slice(pos),
188
+ });
189
+ break;
190
+ }
191
+ const rep = payload.subarray(pos, pos + length);
192
+ const seq = rep[1];
193
+ const status = rep[2];
194
+ const delayLsb = rep[3];
195
+ const accuracy = status & 0x03;
196
+ const delayUs = (((status >> 2) << 8) | delayLsb) * 100;
197
+ const ts = baseUs + BigInt(delayUs);
198
+ out.push(decodeReport(rid, rep, ts, seq, accuracy, delayUs));
199
+ pos += length;
200
+ }
201
+ return out;
202
+ }
203
+ function decodeReport(rid, rep, ts, seq, accuracy, delayUs) {
204
+ const v = view(rep);
205
+ const head = { sensorId: rid, timestampUs: ts, seq, accuracy, delayUs };
206
+ const qp = Q_POINTS[rid] ?? 0;
207
+ switch (rid) {
208
+ case SensorId.Accelerometer:
209
+ case SensorId.LinearAcceleration:
210
+ case SensorId.Gravity: {
211
+ const [xRaw, yRaw, zRaw] = [v.getInt16(4, true), v.getInt16(6, true), v.getInt16(8, true)];
212
+ return { type: "Acceleration", ...head, xRaw, yRaw, zRaw, x: q(xRaw, qp), y: q(yRaw, qp), z: q(zRaw, qp) };
213
+ }
214
+ case SensorId.Gyroscope: {
215
+ const [xRaw, yRaw, zRaw] = [v.getInt16(4, true), v.getInt16(6, true), v.getInt16(8, true)];
216
+ return { type: "Gyroscope", ...head, xRaw, yRaw, zRaw, x: q(xRaw, qp), y: q(yRaw, qp), z: q(zRaw, qp) };
217
+ }
218
+ case SensorId.Magnetometer: {
219
+ const [xRaw, yRaw, zRaw] = [v.getInt16(4, true), v.getInt16(6, true), v.getInt16(8, true)];
220
+ return { type: "Magnetometer", ...head, xRaw, yRaw, zRaw, x: q(xRaw, qp), y: q(yRaw, qp), z: q(zRaw, qp) };
221
+ }
222
+ case SensorId.UncalibratedGyroscope:
223
+ case SensorId.UncalibratedMagnetometer: {
224
+ const xRaw = v.getInt16(4, true);
225
+ const yRaw = v.getInt16(6, true);
226
+ const zRaw = v.getInt16(8, true);
227
+ const biasXRaw = v.getInt16(10, true);
228
+ const biasYRaw = v.getInt16(12, true);
229
+ const biasZRaw = v.getInt16(14, true);
230
+ const common = {
231
+ ...head,
232
+ xRaw,
233
+ yRaw,
234
+ zRaw,
235
+ biasXRaw,
236
+ biasYRaw,
237
+ biasZRaw,
238
+ x: q(xRaw, qp),
239
+ y: q(yRaw, qp),
240
+ z: q(zRaw, qp),
241
+ bias: [q(biasXRaw, qp), q(biasYRaw, qp), q(biasZRaw, qp)],
242
+ };
243
+ return rid === SensorId.UncalibratedGyroscope
244
+ ? { type: "UncalibratedGyroscope", ...common }
245
+ : { type: "UncalibratedMagnetometer", ...common };
246
+ }
247
+ case SensorId.RotationVector:
248
+ case SensorId.GeomagneticRotationVector:
249
+ case SensorId.ArvrStabilizedRv:
250
+ case SensorId.GameRotationVector:
251
+ case SensorId.ArvrStabilizedGameRv: {
252
+ const iRaw = v.getInt16(4, true);
253
+ const jRaw = v.getInt16(6, true);
254
+ const kRaw = v.getInt16(8, true);
255
+ const realRaw = v.getInt16(10, true);
256
+ const hasAccuracy = rid !== SensorId.GameRotationVector && rid !== SensorId.ArvrStabilizedGameRv;
257
+ const accuracyRaw = hasAccuracy ? v.getInt16(12, true) : null;
258
+ return {
259
+ type: "RotationVector",
260
+ ...head,
261
+ iRaw,
262
+ jRaw,
263
+ kRaw,
264
+ realRaw,
265
+ accuracyRaw,
266
+ i: q(iRaw, 14),
267
+ j: q(jRaw, 14),
268
+ k: q(kRaw, 14),
269
+ real: q(realRaw, 14),
270
+ accuracyRad: accuracyRaw === null ? null : q(accuracyRaw, RV_ACCURACY_Q),
271
+ };
272
+ }
273
+ case SensorId.Pressure:
274
+ case SensorId.AmbientLight: {
275
+ const valueRaw = v.getUint32(4, true);
276
+ return { type: "ScalarReport", ...head, valueRaw, value: q(valueRaw, qp) };
277
+ }
278
+ case SensorId.Humidity:
279
+ case SensorId.Proximity: {
280
+ const valueRaw = v.getUint16(4, true);
281
+ return { type: "ScalarReport", ...head, valueRaw, value: q(valueRaw, qp) };
282
+ }
283
+ case SensorId.Temperature: {
284
+ const valueRaw = v.getInt16(4, true);
285
+ return { type: "ScalarReport", ...head, valueRaw, value: q(valueRaw, qp) };
286
+ }
287
+ case SensorId.TapDetector: {
288
+ const flags = rep[4];
289
+ return { type: "TapDetector", ...head, flags, doubleTap: (flags & 0x40) !== 0 };
290
+ }
291
+ case SensorId.StepCounter:
292
+ return {
293
+ type: "StepCounter",
294
+ ...head,
295
+ latencyUs: v.getUint32(4, true),
296
+ steps: v.getUint16(8, true),
297
+ };
298
+ case SensorId.StepDetector:
299
+ return { type: "StepDetector", ...head, latencyUs: v.getUint32(4, true) };
300
+ case SensorId.SignificantMotion:
301
+ return { type: "SignificantMotion", ...head, motion: v.getUint16(4, true) };
302
+ case SensorId.StabilityClassifier: {
303
+ const classification = rep[4];
304
+ return {
305
+ type: "StabilityClassifier",
306
+ ...head,
307
+ classification,
308
+ name: STABILITY_NAMES[classification] ?? String(classification),
309
+ };
310
+ }
311
+ case SensorId.ShakeDetector:
312
+ return { type: "ShakeDetector", ...head, flags: v.getUint16(4, true) };
313
+ case SensorId.PersonalActivityClassifier: {
314
+ const mostLikelyState = rep[5];
315
+ return {
316
+ type: "PersonalActivityClassifier",
317
+ ...head,
318
+ pageNumber: rep[4] & 0x7f,
319
+ endOfSequence: (rep[4] & 0x80) !== 0,
320
+ mostLikelyState,
321
+ confidences: Array.from(rep.subarray(6, 16)),
322
+ mostLikelyName: ACTIVITY_NAMES[mostLikelyState] ?? String(mostLikelyState),
323
+ };
324
+ }
325
+ case SensorId.RawAccelerometer:
326
+ case SensorId.RawMagnetometer:
327
+ return {
328
+ type: "RawSensor",
329
+ ...head,
330
+ xRaw: v.getInt16(4, true),
331
+ yRaw: v.getInt16(6, true),
332
+ zRaw: v.getInt16(8, true),
333
+ sensorTimestampUs: v.getUint32(12, true),
334
+ temperatureRaw: 0,
335
+ };
336
+ case SensorId.RawGyroscope:
337
+ return {
338
+ type: "RawSensor",
339
+ ...head,
340
+ xRaw: v.getInt16(4, true),
341
+ yRaw: v.getInt16(6, true),
342
+ zRaw: v.getInt16(8, true),
343
+ sensorTimestampUs: v.getUint32(12, true),
344
+ temperatureRaw: v.getInt16(10, true),
345
+ };
346
+ default:
347
+ // In-table detectors without a dedicated shape
348
+ return { type: "GenericEvent", ...head, valueRaw: v.getUint16(4, true) };
349
+ }
350
+ }
351
+ /**
352
+ * Parse a channel-5 cargo (gyro-integrated RV, dense format).
353
+ *
354
+ * Two shapes seen on hardware (vendor tool): 7×i16 bare, or prefixed with
355
+ * 0xFB + i32 base delta + u16 delay (both 100 µs ticks).
356
+ */
357
+ export function parseGyroRvCargo(payload, captureTimestampUs) {
358
+ let ts = captureTimestampUs;
359
+ let body = payload;
360
+ if (payload.length >= 1 && payload[0] === BASE_TIMESTAMP_REF) {
361
+ if (payload.length < 5 + 2 + 14)
362
+ return null;
363
+ const v = view(payload);
364
+ const delta = v.getInt32(1, true);
365
+ const delay = v.getUint16(5, true);
366
+ ts = captureTimestampUs - BigInt(delta) * 100n + BigInt(delay) * 100n;
367
+ body = payload.subarray(7);
368
+ }
369
+ if (body.length < 14)
370
+ return null;
371
+ const v = view(body);
372
+ const iRaw = v.getInt16(0, true);
373
+ const jRaw = v.getInt16(2, true);
374
+ const kRaw = v.getInt16(4, true);
375
+ const realRaw = v.getInt16(6, true);
376
+ const vxRaw = v.getInt16(8, true);
377
+ const vyRaw = v.getInt16(10, true);
378
+ const vzRaw = v.getInt16(12, true);
379
+ return {
380
+ type: "GyroIntegratedRV",
381
+ sensorId: SensorId.GyroIntegratedRv,
382
+ timestampUs: ts,
383
+ iRaw,
384
+ jRaw,
385
+ kRaw,
386
+ realRaw,
387
+ vxRaw,
388
+ vyRaw,
389
+ vzRaw,
390
+ i: q(iRaw, 14),
391
+ j: q(jRaw, 14),
392
+ k: q(kRaw, 14),
393
+ real: q(realRaw, 14),
394
+ angularVelocity: [q(vxRaw, GYRO_RV_ANGVEL_Q), q(vyRaw, GYRO_RV_ANGVEL_Q), q(vzRaw, GYRO_RV_ANGVEL_Q)],
395
+ };
396
+ }
397
+ //# sourceMappingURL=reports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.js","sourceRoot":"","sources":["../../../src/sensors/bno086/reports.ts"],"names":[],"mappings":"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"}