@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.
- package/README.md +69 -0
- package/dist/dataset.d.ts +93 -0
- package/dist/dataset.d.ts.map +1 -0
- package/dist/dataset.js +253 -0
- package/dist/dataset.js.map +1 -0
- package/dist/device/device.d.ts +185 -0
- package/dist/device/device.d.ts.map +1 -0
- package/dist/device/device.js +421 -0
- package/dist/device/device.js.map +1 -0
- package/dist/device/link.d.ts +62 -0
- package/dist/device/link.d.ts.map +1 -0
- package/dist/device/link.js +130 -0
- package/dist/device/link.js.map +1 -0
- package/dist/discovery.d.ts +109 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +281 -0
- package/dist/discovery.js.map +1 -0
- package/dist/errors.d.ts +39 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +69 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/bno086.d.ts +36 -0
- package/dist/protocol/bno086.d.ts.map +1 -0
- package/dist/protocol/bno086.js +38 -0
- package/dist/protocol/bno086.js.map +1 -0
- package/dist/protocol/common.d.ts +103 -0
- package/dist/protocol/common.d.ts.map +1 -0
- package/dist/protocol/common.js +121 -0
- package/dist/protocol/common.js.map +1 -0
- package/dist/protocol/crc.d.ts +17 -0
- package/dist/protocol/crc.d.ts.map +1 -0
- package/dist/protocol/crc.js +55 -0
- package/dist/protocol/crc.js.map +1 -0
- package/dist/protocol/framing.d.ts +65 -0
- package/dist/protocol/framing.d.ts.map +1 -0
- package/dist/protocol/framing.js +152 -0
- package/dist/protocol/framing.js.map +1 -0
- package/dist/protocol/fwdepz.d.ts +21 -0
- package/dist/protocol/fwdepz.d.ts.map +1 -0
- package/dist/protocol/fwdepz.js +46 -0
- package/dist/protocol/fwdepz.js.map +1 -0
- package/dist/protocol/identity.d.ts +14 -0
- package/dist/protocol/identity.d.ts.map +1 -0
- package/dist/protocol/identity.js +28 -0
- package/dist/protocol/identity.js.map +1 -0
- package/dist/protocol/sr04.d.ts +38 -0
- package/dist/protocol/sr04.d.ts.map +1 -0
- package/dist/protocol/sr04.js +58 -0
- package/dist/protocol/sr04.js.map +1 -0
- package/dist/protocol/usb-ids.d.ts +60 -0
- package/dist/protocol/usb-ids.d.ts.map +1 -0
- package/dist/protocol/usb-ids.js +79 -0
- package/dist/protocol/usb-ids.js.map +1 -0
- package/dist/protocol/vl53l8.d.ts +59 -0
- package/dist/protocol/vl53l8.d.ts.map +1 -0
- package/dist/protocol/vl53l8.js +116 -0
- package/dist/protocol/vl53l8.js.map +1 -0
- package/dist/sensors/bno086/bno086.d.ts +197 -0
- package/dist/sensors/bno086/bno086.d.ts.map +1 -0
- package/dist/sensors/bno086/bno086.js +543 -0
- package/dist/sensors/bno086/bno086.js.map +1 -0
- package/dist/sensors/bno086/reports.d.ts +289 -0
- package/dist/sensors/bno086/reports.d.ts.map +1 -0
- package/dist/sensors/bno086/reports.js +397 -0
- package/dist/sensors/bno086/reports.js.map +1 -0
- package/dist/sensors/bno086/sh2.d.ts +307 -0
- package/dist/sensors/bno086/sh2.d.ts.map +1 -0
- package/dist/sensors/bno086/sh2.js +480 -0
- package/dist/sensors/bno086/sh2.js.map +1 -0
- package/dist/sensors/bno086/shtp.d.ts +98 -0
- package/dist/sensors/bno086/shtp.d.ts.map +1 -0
- package/dist/sensors/bno086/shtp.js +205 -0
- package/dist/sensors/bno086/shtp.js.map +1 -0
- package/dist/sensors/sr04.d.ts +65 -0
- package/dist/sensors/sr04.d.ts.map +1 -0
- package/dist/sensors/sr04.js +121 -0
- package/dist/sensors/sr04.js.map +1 -0
- package/dist/sensors/vl53l8/assets/ch.d.ts +16 -0
- package/dist/sensors/vl53l8/assets/ch.d.ts.map +1 -0
- package/dist/sensors/vl53l8/assets/ch.js +22 -0
- package/dist/sensors/vl53l8/assets/ch.js.map +1 -0
- package/dist/sensors/vl53l8/assets/cx.d.ts +16 -0
- package/dist/sensors/vl53l8/assets/cx.d.ts.map +1 -0
- package/dist/sensors/vl53l8/assets/cx.js +22 -0
- package/dist/sensors/vl53l8/assets/cx.js.map +1 -0
- package/dist/sensors/vl53l8/assets/decode.d.ts +7 -0
- package/dist/sensors/vl53l8/assets/decode.d.ts.map +1 -0
- package/dist/sensors/vl53l8/assets/decode.js +35 -0
- package/dist/sensors/vl53l8/assets/decode.js.map +1 -0
- package/dist/sensors/vl53l8/assets/index.d.ts +19 -0
- package/dist/sensors/vl53l8/assets/index.d.ts.map +1 -0
- package/dist/sensors/vl53l8/assets/index.js +11 -0
- package/dist/sensors/vl53l8/assets/index.js.map +1 -0
- package/dist/sensors/vl53l8/cnh.d.ts +113 -0
- package/dist/sensors/vl53l8/cnh.d.ts.map +1 -0
- package/dist/sensors/vl53l8/cnh.js +299 -0
- package/dist/sensors/vl53l8/cnh.js.map +1 -0
- package/dist/sensors/vl53l8/uld.d.ts +346 -0
- package/dist/sensors/vl53l8/uld.d.ts.map +1 -0
- package/dist/sensors/vl53l8/uld.js +1388 -0
- package/dist/sensors/vl53l8/uld.js.map +1 -0
- package/dist/sensors/vl53l8/vl53l8.d.ts +182 -0
- package/dist/sensors/vl53l8/vl53l8.d.ts.map +1 -0
- package/dist/sensors/vl53l8/vl53l8.js +411 -0
- package/dist/sensors/vl53l8/vl53l8.js.map +1 -0
- package/dist/transport/loopback.d.ts +18 -0
- package/dist/transport/loopback.d.ts.map +1 -0
- package/dist/transport/loopback.js +53 -0
- package/dist/transport/loopback.js.map +1 -0
- package/dist/transport/node.d.ts +51 -0
- package/dist/transport/node.d.ts.map +1 -0
- package/dist/transport/node.js +123 -0
- package/dist/transport/node.js.map +1 -0
- package/dist/transport/replay.d.ts +68 -0
- package/dist/transport/replay.d.ts.map +1 -0
- package/dist/transport/replay.js +196 -0
- package/dist/transport/replay.js.map +1 -0
- package/dist/transport/types.d.ts +23 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +7 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/transport/webserial.d.ts +69 -0
- package/dist/transport/webserial.d.ts.map +1 -0
- package/dist/transport/webserial.js +196 -0
- package/dist/transport/webserial.js.map +1 -0
- 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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"}
|