@depz/sensor-sdk 0.2.1 → 0.3.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 +13 -5
- package/dist/dataset.d.ts.map +1 -1
- package/dist/dataset.js +66 -2
- package/dist/dataset.js.map +1 -1
- package/dist/device/device.d.ts +6 -0
- package/dist/device/device.d.ts.map +1 -1
- package/dist/device/device.js +29 -6
- package/dist/device/device.js.map +1 -1
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +25 -2
- package/dist/discovery.js.map +1 -1
- package/dist/index.d.ts +21 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/protocol/bno055.d.ts +101 -0
- package/dist/protocol/bno055.d.ts.map +1 -0
- package/dist/protocol/bno055.js +105 -0
- package/dist/protocol/bno055.js.map +1 -0
- package/dist/protocol/identity.d.ts +1 -1
- package/dist/protocol/identity.d.ts.map +1 -1
- package/dist/protocol/identity.js +6 -0
- package/dist/protocol/identity.js.map +1 -1
- package/dist/protocol/vl53l7.d.ts +77 -0
- package/dist/protocol/vl53l7.d.ts.map +1 -0
- package/dist/protocol/vl53l7.js +99 -0
- package/dist/protocol/vl53l7.js.map +1 -0
- package/dist/protocol/vl53lx.d.ts +72 -0
- package/dist/protocol/vl53lx.d.ts.map +1 -0
- package/dist/protocol/vl53lx.js +87 -0
- package/dist/protocol/vl53lx.js.map +1 -0
- package/dist/sensors/bno055/bno055.d.ts +207 -0
- package/dist/sensors/bno055/bno055.d.ts.map +1 -0
- package/dist/sensors/bno055/bno055.js +547 -0
- package/dist/sensors/bno055/bno055.js.map +1 -0
- package/dist/sensors/bno055/regs.d.ts +271 -0
- package/dist/sensors/bno055/regs.d.ts.map +1 -0
- package/dist/sensors/bno055/regs.js +366 -0
- package/dist/sensors/bno055/regs.js.map +1 -0
- package/dist/sensors/bno086/bno086.d.ts +15 -0
- package/dist/sensors/bno086/bno086.d.ts.map +1 -1
- package/dist/sensors/bno086/bno086.js +43 -1
- package/dist/sensors/bno086/bno086.js.map +1 -1
- package/dist/sensors/bno086/sh2.d.ts.map +1 -1
- package/dist/sensors/bno086/sh2.js +5 -2
- package/dist/sensors/bno086/sh2.js.map +1 -1
- package/dist/sensors/reg-bridge.d.ts +35 -0
- package/dist/sensors/reg-bridge.d.ts.map +1 -0
- package/dist/sensors/reg-bridge.js +44 -0
- package/dist/sensors/reg-bridge.js.map +1 -0
- package/dist/sensors/vl53l4/vl53l4.d.ts.map +1 -1
- package/dist/sensors/vl53l4/vl53l4.js +18 -30
- package/dist/sensors/vl53l4/vl53l4.js.map +1 -1
- package/dist/sensors/vl53l7/vl53l7.d.ts +97 -0
- package/dist/sensors/vl53l7/vl53l7.d.ts.map +1 -0
- package/dist/sensors/vl53l7/vl53l7.js +138 -0
- package/dist/sensors/vl53l7/vl53l7.js.map +1 -0
- package/dist/sensors/vl53l8/assets/index.d.ts +5 -1
- package/dist/sensors/vl53l8/assets/index.d.ts.map +1 -1
- package/dist/sensors/vl53l8/assets/index.js +7 -1
- package/dist/sensors/vl53l8/assets/index.js.map +1 -1
- package/dist/sensors/vl53l8/assets/l7ch.d.ts +12 -0
- package/dist/sensors/vl53l8/assets/l7ch.d.ts.map +1 -0
- package/dist/sensors/vl53l8/assets/l7ch.js +18 -0
- package/dist/sensors/vl53l8/assets/l7ch.js.map +1 -0
- package/dist/sensors/vl53l8/assets/l7cx.d.ts +14 -0
- package/dist/sensors/vl53l8/assets/l7cx.d.ts.map +1 -0
- package/dist/sensors/vl53l8/assets/l7cx.js +20 -0
- package/dist/sensors/vl53l8/assets/l7cx.js.map +1 -0
- package/dist/sensors/vl53l8/cnh.d.ts +4 -3
- package/dist/sensors/vl53l8/cnh.d.ts.map +1 -1
- package/dist/sensors/vl53l8/cnh.js +4 -3
- package/dist/sensors/vl53l8/cnh.js.map +1 -1
- package/dist/sensors/vl53l8/uld.d.ts +50 -9
- package/dist/sensors/vl53l8/uld.d.ts.map +1 -1
- package/dist/sensors/vl53l8/uld.js +241 -35
- package/dist/sensors/vl53l8/uld.js.map +1 -1
- package/dist/sensors/vl53l8/vl53l8.d.ts +8 -3
- package/dist/sensors/vl53l8/vl53l8.d.ts.map +1 -1
- package/dist/sensors/vl53l8/vl53l8.js +41 -39
- package/dist/sensors/vl53l8/vl53l8.js.map +1 -1
- package/dist/sensors/vl53lx/decode.d.ts +70 -0
- package/dist/sensors/vl53lx/decode.d.ts.map +1 -0
- package/dist/sensors/vl53lx/decode.js +108 -0
- package/dist/sensors/vl53lx/decode.js.map +1 -0
- package/dist/sensors/vl53lx/uld/arith.d.ts +23 -0
- package/dist/sensors/vl53lx/uld/arith.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/arith.js +42 -0
- package/dist/sensors/vl53lx/uld/arith.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/core.d.ts +345 -0
- package/dist/sensors/vl53lx/uld/bare/core.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/core.js +1085 -0
- package/dist/sensors/vl53lx/uld/bare/core.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/driver.d.ts +91 -0
- package/dist/sensors/vl53lx/uld/bare/driver.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/driver.js +206 -0
- package/dist/sensors/vl53lx/uld/bare/driver.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/hist.d.ts +180 -0
- package/dist/sensors/vl53lx/uld/bare/hist.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/hist.js +949 -0
- package/dist/sensors/vl53lx/uld/bare/hist.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/image.d.ts +53 -0
- package/dist/sensors/vl53lx/uld/bare/image.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/image.js +108 -0
- package/dist/sensors/vl53lx/uld/bare/image.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/imath.d.ts +39 -0
- package/dist/sensors/vl53lx/uld/bare/imath.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/imath.js +99 -0
- package/dist/sensors/vl53lx/uld/bare/imath.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/index.d.ts +22 -0
- package/dist/sensors/vl53lx/uld/bare/index.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/index.js +22 -0
- package/dist/sensors/vl53lx/uld/bare/index.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/nvm.d.ts +85 -0
- package/dist/sensors/vl53lx/uld/bare/nvm.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/nvm.js +148 -0
- package/dist/sensors/vl53lx/uld/bare/nvm.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/regs.d.ts +54 -0
- package/dist/sensors/vl53lx/uld/bare/regs.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/regs.js +496 -0
- package/dist/sensors/vl53lx/uld/bare/regs.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/tuning.d.ts +15 -0
- package/dist/sensors/vl53lx/uld/bare/tuning.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/tuning.js +303 -0
- package/dist/sensors/vl53lx/uld/bare/tuning.js.map +1 -0
- package/dist/sensors/vl53lx/uld/base.d.ts +129 -0
- package/dist/sensors/vl53lx/uld/base.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/base.js +166 -0
- package/dist/sensors/vl53lx/uld/base.js.map +1 -0
- package/dist/sensors/vl53lx/uld/l0x.d.ts +306 -0
- package/dist/sensors/vl53lx/uld/l0x.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/l0x.js +1492 -0
- package/dist/sensors/vl53lx/uld/l0x.js.map +1 -0
- package/dist/sensors/vl53lx/uld/l1.d.ts +69 -0
- package/dist/sensors/vl53lx/uld/l1.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/l1.js +262 -0
- package/dist/sensors/vl53lx/uld/l1.js.map +1 -0
- package/dist/sensors/vl53lx/uld/l3.d.ts +25 -0
- package/dist/sensors/vl53lx/uld/l3.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/l3.js +51 -0
- package/dist/sensors/vl53lx/uld/l3.js.map +1 -0
- package/dist/sensors/vl53lx/uld/l4.d.ts +22 -0
- package/dist/sensors/vl53lx/uld/l4.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/l4.js +99 -0
- package/dist/sensors/vl53lx/uld/l4.js.map +1 -0
- package/dist/sensors/vl53lx/uld/link.d.ts +42 -0
- package/dist/sensors/vl53lx/uld/link.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/link.js +28 -0
- package/dist/sensors/vl53lx/uld/link.js.map +1 -0
- package/dist/sensors/vl53lx/uld/registry.d.ts +68 -0
- package/dist/sensors/vl53lx/uld/registry.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/registry.js +139 -0
- package/dist/sensors/vl53lx/uld/registry.js.map +1 -0
- package/dist/sensors/vl53lx/uld/vl53l1-die.d.ts +172 -0
- package/dist/sensors/vl53lx/uld/vl53l1-die.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/vl53l1-die.js +431 -0
- package/dist/sensors/vl53lx/uld/vl53l1-die.js.map +1 -0
- package/dist/sensors/vl53lx/vl53lx.d.ts +323 -0
- package/dist/sensors/vl53lx/vl53lx.d.ts.map +1 -0
- package/dist/sensors/vl53lx/vl53lx.js +688 -0
- package/dist/sensors/vl53lx/vl53lx.js.map +1 -0
- package/dist/transport/webserial.d.ts +4 -0
- package/dist/transport/webserial.d.ts.map +1 -1
- package/dist/transport/webserial.js +58 -12
- package/dist/transport/webserial.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BNO055 register-bridge wire codecs (contracts/13_SENSOR_BNO055.md).
|
|
3
|
+
* Mirrors the Python reference `depz_sensor_sdk.protocol.bno055`.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum Bno055Cmd {
|
|
6
|
+
ReadReg = 50,
|
|
7
|
+
WriteReg = 51,
|
|
8
|
+
Reset = 52,
|
|
9
|
+
StartStream = 53,
|
|
10
|
+
StopStream = 54,
|
|
11
|
+
GetInfo = 55
|
|
12
|
+
}
|
|
13
|
+
export declare enum Bno055Rpt {
|
|
14
|
+
RegData = 145,
|
|
15
|
+
Info = 146,
|
|
16
|
+
Stream = 147
|
|
17
|
+
}
|
|
18
|
+
/** Max bytes per READ_REG / WRITE_REG / streamed block; `addr + len` ≤ 0x100. */
|
|
19
|
+
export declare const BNO055_XFER_MAX = 128;
|
|
20
|
+
/** BNO_START_STREAM trigger: read every period_ms (the only data trigger on SW 03.11). */
|
|
21
|
+
export declare const BNO055_TRIGGER_TIMER = 0;
|
|
22
|
+
/** BNO_START_STREAM trigger: read on the INT edge; period_ms is a missed-edge watchdog. */
|
|
23
|
+
export declare const BNO055_TRIGGER_INT = 1;
|
|
24
|
+
/** BNO_RESET answers after the sensor's ~0.5 s boot handshake. */
|
|
25
|
+
export declare const BNO055_RESET_TIMEOUT_MS = 3000;
|
|
26
|
+
export declare function packBno055ReadReg(addr: number, length: number): Uint8Array;
|
|
27
|
+
export declare function packBno055WriteReg(addr: number, data: Uint8Array): Uint8Array;
|
|
28
|
+
export declare function packBno055StartStream(trigger: number, addr: number, length: number, periodMs: number): Uint8Array;
|
|
29
|
+
/** RPT_BNO_REG_DATA payload. */
|
|
30
|
+
export interface Bno055RegData {
|
|
31
|
+
/** Echoed READ_REG opcode. */
|
|
32
|
+
cmd: number;
|
|
33
|
+
/** MCU uptime at I2C-read completion. */
|
|
34
|
+
timestampUs: bigint;
|
|
35
|
+
data: Uint8Array;
|
|
36
|
+
}
|
|
37
|
+
export declare function unpackBno055RegData(payload: Uint8Array): Bno055RegData;
|
|
38
|
+
/** last_i2c_error values in RPT_BNO_INFO. */
|
|
39
|
+
export declare const BNO055_I2C_ERROR_NAMES: Readonly<Record<number, string>>;
|
|
40
|
+
/** Identity registers 0x00..0x03 of a healthy BNO055. */
|
|
41
|
+
export declare const BNO055_EXPECTED_IDS: {
|
|
42
|
+
readonly chipId: 160;
|
|
43
|
+
readonly accId: 251;
|
|
44
|
+
readonly magId: 50;
|
|
45
|
+
readonly gyrId: 15;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* RPT_BNO_INFO — sensor identity (registers 0x00..0x06) plus bridge
|
|
49
|
+
* diagnostics. Counters are free-running and wrap silently. A rising
|
|
50
|
+
* `sensorResets` means the bridge pulsed nRESET to recover the bus: the
|
|
51
|
+
* sensor is back in CONFIG mode and the host must restore its configuration.
|
|
52
|
+
*/
|
|
53
|
+
export interface Bno055Info {
|
|
54
|
+
/** 7-bit sensor address in use (0x28). */
|
|
55
|
+
i2cAddr: number;
|
|
56
|
+
chipId: number;
|
|
57
|
+
accId: number;
|
|
58
|
+
magId: number;
|
|
59
|
+
gyrId: number;
|
|
60
|
+
/** Sensor firmware, BCD: 0x0311 = 03.11. */
|
|
61
|
+
swRev: number;
|
|
62
|
+
blRev: number;
|
|
63
|
+
/** 1 = chip-ID handshake passed. */
|
|
64
|
+
initialized: number;
|
|
65
|
+
intLevel: number;
|
|
66
|
+
/** EXTI rising edges (counted only while an INT stream is armed). */
|
|
67
|
+
intEdges: number;
|
|
68
|
+
/** Streamed block read timing since the last START_STREAM. */
|
|
69
|
+
readMinUs: number;
|
|
70
|
+
readMaxUs: number;
|
|
71
|
+
readAvgUs: number;
|
|
72
|
+
/** Packets refused by a full USB TX ring. */
|
|
73
|
+
txDropped: number;
|
|
74
|
+
i2cErrors: number;
|
|
75
|
+
/** Stream slots dropped: bus still busy. */
|
|
76
|
+
slotsSkipped: number;
|
|
77
|
+
busRecoveries: number;
|
|
78
|
+
lastI2cError: number;
|
|
79
|
+
/** Rung-3 nRESET recoveries (sensor back in CONFIG). */
|
|
80
|
+
sensorResets: number;
|
|
81
|
+
loopMaxUs: number;
|
|
82
|
+
}
|
|
83
|
+
export declare const BNO055_INFO_SIZE = 38;
|
|
84
|
+
export declare function unpackBno055Info(payload: Uint8Array): Bno055Info;
|
|
85
|
+
/** True when the four identity registers carry the BNO055 values. */
|
|
86
|
+
export declare function bno055IdsOk(info: Bno055Info): boolean;
|
|
87
|
+
/** Sensor firmware revision as Bosch writes it: 0x0311 → "03.11". */
|
|
88
|
+
export declare function bno055SwRevText(swRev: number): string;
|
|
89
|
+
/**
|
|
90
|
+
* RPT_BNO_REG_STREAM — one streamed register block. `addr`/`length` echo the
|
|
91
|
+
* stream configuration so each report is self-describing.
|
|
92
|
+
*/
|
|
93
|
+
export interface Bno055StreamData {
|
|
94
|
+
/** MCU uptime at the trigger (timer expiry or INT edge). */
|
|
95
|
+
timestampUs: bigint;
|
|
96
|
+
addr: number;
|
|
97
|
+
length: number;
|
|
98
|
+
data: Uint8Array;
|
|
99
|
+
}
|
|
100
|
+
export declare function unpackBno055Stream(payload: Uint8Array): Bno055StreamData;
|
|
101
|
+
//# sourceMappingURL=bno055.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bno055.d.ts","sourceRoot":"","sources":["../../src/protocol/bno055.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BNO055 register-bridge wire codecs (contracts/13_SENSOR_BNO055.md).
|
|
3
|
+
* Mirrors the Python reference `depz_sensor_sdk.protocol.bno055`.
|
|
4
|
+
*/
|
|
5
|
+
export var Bno055Cmd;
|
|
6
|
+
(function (Bno055Cmd) {
|
|
7
|
+
Bno055Cmd[Bno055Cmd["ReadReg"] = 50] = "ReadReg";
|
|
8
|
+
Bno055Cmd[Bno055Cmd["WriteReg"] = 51] = "WriteReg";
|
|
9
|
+
Bno055Cmd[Bno055Cmd["Reset"] = 52] = "Reset";
|
|
10
|
+
Bno055Cmd[Bno055Cmd["StartStream"] = 53] = "StartStream";
|
|
11
|
+
Bno055Cmd[Bno055Cmd["StopStream"] = 54] = "StopStream";
|
|
12
|
+
Bno055Cmd[Bno055Cmd["GetInfo"] = 55] = "GetInfo";
|
|
13
|
+
})(Bno055Cmd || (Bno055Cmd = {}));
|
|
14
|
+
export var Bno055Rpt;
|
|
15
|
+
(function (Bno055Rpt) {
|
|
16
|
+
Bno055Rpt[Bno055Rpt["RegData"] = 145] = "RegData";
|
|
17
|
+
Bno055Rpt[Bno055Rpt["Info"] = 146] = "Info";
|
|
18
|
+
Bno055Rpt[Bno055Rpt["Stream"] = 147] = "Stream";
|
|
19
|
+
})(Bno055Rpt || (Bno055Rpt = {}));
|
|
20
|
+
/** Max bytes per READ_REG / WRITE_REG / streamed block; `addr + len` ≤ 0x100. */
|
|
21
|
+
export const BNO055_XFER_MAX = 128;
|
|
22
|
+
/** BNO_START_STREAM trigger: read every period_ms (the only data trigger on SW 03.11). */
|
|
23
|
+
export const BNO055_TRIGGER_TIMER = 0;
|
|
24
|
+
/** BNO_START_STREAM trigger: read on the INT edge; period_ms is a missed-edge watchdog. */
|
|
25
|
+
export const BNO055_TRIGGER_INT = 1;
|
|
26
|
+
/** BNO_RESET answers after the sensor's ~0.5 s boot handshake. */
|
|
27
|
+
export const BNO055_RESET_TIMEOUT_MS = 3000;
|
|
28
|
+
export function packBno055ReadReg(addr, length) {
|
|
29
|
+
return Uint8Array.of(addr & 0xff, length & 0xff);
|
|
30
|
+
}
|
|
31
|
+
export function packBno055WriteReg(addr, data) {
|
|
32
|
+
const out = new Uint8Array(1 + data.length);
|
|
33
|
+
out[0] = addr & 0xff;
|
|
34
|
+
out.set(data, 1);
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
export function packBno055StartStream(trigger, addr, length, periodMs) {
|
|
38
|
+
const out = new Uint8Array(5);
|
|
39
|
+
const dv = new DataView(out.buffer);
|
|
40
|
+
dv.setUint8(0, trigger);
|
|
41
|
+
dv.setUint8(1, addr);
|
|
42
|
+
dv.setUint8(2, length);
|
|
43
|
+
dv.setUint16(3, periodMs, true);
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
export function unpackBno055RegData(payload) {
|
|
47
|
+
const dv = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
48
|
+
return { cmd: dv.getUint8(0), timestampUs: dv.getBigUint64(1, true), data: payload.slice(9) };
|
|
49
|
+
}
|
|
50
|
+
/** last_i2c_error values in RPT_BNO_INFO. */
|
|
51
|
+
export const BNO055_I2C_ERROR_NAMES = {
|
|
52
|
+
0: "none",
|
|
53
|
+
1: "NACK",
|
|
54
|
+
2: "TIMEOUT",
|
|
55
|
+
3: "BUS_ERROR",
|
|
56
|
+
};
|
|
57
|
+
/** Identity registers 0x00..0x03 of a healthy BNO055. */
|
|
58
|
+
export const BNO055_EXPECTED_IDS = { chipId: 0xa0, accId: 0xfb, magId: 0x32, gyrId: 0x0f };
|
|
59
|
+
export const BNO055_INFO_SIZE = 38;
|
|
60
|
+
export function unpackBno055Info(payload) {
|
|
61
|
+
const dv = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
62
|
+
return {
|
|
63
|
+
i2cAddr: dv.getUint8(0),
|
|
64
|
+
chipId: dv.getUint8(1),
|
|
65
|
+
accId: dv.getUint8(2),
|
|
66
|
+
magId: dv.getUint8(3),
|
|
67
|
+
gyrId: dv.getUint8(4),
|
|
68
|
+
swRev: dv.getUint16(5, true),
|
|
69
|
+
blRev: dv.getUint8(7),
|
|
70
|
+
initialized: dv.getUint8(8),
|
|
71
|
+
intLevel: dv.getUint8(9),
|
|
72
|
+
intEdges: dv.getUint32(10, true),
|
|
73
|
+
readMinUs: dv.getUint16(14, true),
|
|
74
|
+
readMaxUs: dv.getUint16(16, true),
|
|
75
|
+
readAvgUs: dv.getUint16(18, true),
|
|
76
|
+
txDropped: dv.getUint32(20, true),
|
|
77
|
+
i2cErrors: dv.getUint32(24, true),
|
|
78
|
+
slotsSkipped: dv.getUint32(28, true),
|
|
79
|
+
busRecoveries: dv.getUint16(32, true),
|
|
80
|
+
lastI2cError: dv.getUint8(34),
|
|
81
|
+
sensorResets: dv.getUint8(35),
|
|
82
|
+
loopMaxUs: dv.getUint16(36, true),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** True when the four identity registers carry the BNO055 values. */
|
|
86
|
+
export function bno055IdsOk(info) {
|
|
87
|
+
const e = BNO055_EXPECTED_IDS;
|
|
88
|
+
return (info.chipId === e.chipId && info.accId === e.accId && info.magId === e.magId && info.gyrId === e.gyrId);
|
|
89
|
+
}
|
|
90
|
+
/** Sensor firmware revision as Bosch writes it: 0x0311 → "03.11". */
|
|
91
|
+
export function bno055SwRevText(swRev) {
|
|
92
|
+
const hex = (b) => b.toString(16).toUpperCase().padStart(2, "0");
|
|
93
|
+
return `${hex(swRev >> 8)}.${hex(swRev & 0xff)}`;
|
|
94
|
+
}
|
|
95
|
+
export function unpackBno055Stream(payload) {
|
|
96
|
+
const dv = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
97
|
+
const length = dv.getUint8(9);
|
|
98
|
+
return {
|
|
99
|
+
timestampUs: dv.getBigUint64(0, true),
|
|
100
|
+
addr: dv.getUint8(8),
|
|
101
|
+
length,
|
|
102
|
+
data: payload.slice(10, 10 + length),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=bno055.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bno055.js","sourceRoot":"","sources":["../../src/protocol/bno055.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Firmware-name parsing (contracts/02_COMMON_COMMANDS.md §4). */
|
|
2
|
-
export type SensorType = "sr04" | "vl53l4" | "vl53l8" | "bno086" | "unknown";
|
|
2
|
+
export type SensorType = "sr04" | "vl53l4" | "vl53l8" | "vl53l7" | "vl53lx" | "bno086" | "bno055" | "unknown";
|
|
3
3
|
export interface Identity {
|
|
4
4
|
mode: "app" | "bootloader" | "unknown";
|
|
5
5
|
sensorType: SensorType | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/protocol/identity.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,MAAM,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/protocol/identity.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAexD"}
|
|
@@ -4,7 +4,13 @@ const PRODUCT_TOKENS = [
|
|
|
4
4
|
["SR04", "sr04"],
|
|
5
5
|
["VL53L4", "vl53l4"],
|
|
6
6
|
["VL53L8", "vl53l8"],
|
|
7
|
+
["VL53L7", "vl53l7"], // VL53L5CX / VL53L7CX / VL53L7CH board (contract 11)
|
|
8
|
+
// The 1D-family bridge (contract 12): boards answer APP_VL53L0_4_v*, the
|
|
9
|
+
// protocol spec calls it APP_VL53LX_v*.
|
|
10
|
+
["VL53L0_4", "vl53lx"],
|
|
11
|
+
["VL53LX", "vl53lx"],
|
|
7
12
|
["BNO086", "bno086"],
|
|
13
|
+
["BNO055", "bno055"], // register bridge, fusion on chip (contract 13)
|
|
8
14
|
];
|
|
9
15
|
/**
|
|
10
16
|
* Classify a GET_NAME_ACTIVE_SOFTWARE string. The string must already be
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/protocol/identity.ts"],"names":[],"mappings":"AAAA,kEAAkE;
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/protocol/identity.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAmBlE,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,MAAM,cAAc,GAAgC;IAClD,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,qDAAqD;IAC3E,yEAAyE;IACzE,wCAAwC;IACxC,CAAC,UAAU,EAAE,QAAQ,CAAC;IACtB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,gDAAgD;CACvE,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC/E,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC1E,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VL53L5CX/L7CX/L7CH I2C register-bridge wire codecs
|
|
3
|
+
* (contracts/11_SENSOR_VL53L7.md). Mirrors the Python reference
|
|
4
|
+
* `depz_sensor_sdk.protocol.vl53l7`.
|
|
5
|
+
*
|
|
6
|
+
* Commands 0x32/0x33/0x35/0x36 and reports 0x91/0x93 are bit-for-bit the
|
|
7
|
+
* VL53L8 bridge (contract 04) and are reused from `./vl53l8.js`; this module
|
|
8
|
+
* holds only what the I2C board adds, plus its tighter transfer limits.
|
|
9
|
+
*/
|
|
10
|
+
export declare enum Vl53l7Cmd {
|
|
11
|
+
PinCtrl = 52,
|
|
12
|
+
GetInfo = 55,
|
|
13
|
+
SetI2cSpeed = 56
|
|
14
|
+
}
|
|
15
|
+
export declare enum Vl53l7Rpt {
|
|
16
|
+
Vl53Info = 146
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* VL53_PIN_CTRL actions. None is a true sensor reset (the board has no power
|
|
20
|
+
* GPIO): after LpnOff or SoftCycle the host must re-run init().
|
|
21
|
+
*/
|
|
22
|
+
export declare enum PinAction {
|
|
23
|
+
/** Stop streaming, drive LPn low: sensor I2C interface off. */
|
|
24
|
+
LpnOff = 0,
|
|
25
|
+
/** Drive LPn high: interface on (power-up default). */
|
|
26
|
+
LpnOn = 1,
|
|
27
|
+
/** Pulse I2C_RST. */
|
|
28
|
+
I2cRst = 2,
|
|
29
|
+
/** Stop streaming, LPn low 1 ms, high, I2C_RST pulse; clears I2C counters. */
|
|
30
|
+
SoftCycle = 3
|
|
31
|
+
}
|
|
32
|
+
/** RPT_VL53_INFO.lastI2cError. */
|
|
33
|
+
export declare enum Vl53l7I2cError {
|
|
34
|
+
Ok = 0,
|
|
35
|
+
Nack = 1,
|
|
36
|
+
Timeout = 2,
|
|
37
|
+
BusError = 3
|
|
38
|
+
}
|
|
39
|
+
/** VL53LMZ_READ_MAX: READ_REG len 1..1536. */
|
|
40
|
+
export declare const VL53L7_READ_MAX_LEN = 1536;
|
|
41
|
+
/** VL53LMZ_XFER_MAX: WRITE_REG N 1..2048. */
|
|
42
|
+
export declare const VL53L7_WRITE_MAX_LEN = 2048;
|
|
43
|
+
/** Bytes of frame data per RPT_VL53_FRAME chunk. */
|
|
44
|
+
export declare const VL53L7_STREAM_CHUNK_MAX = 1536;
|
|
45
|
+
export declare const VL53L7_INFO_SIZE = 20;
|
|
46
|
+
/** Nominal SCL steps the firmware carries a timing for; others snap to nearest. */
|
|
47
|
+
export declare const VL53L7_I2C_SPEED_STEPS_KHZ: readonly number[];
|
|
48
|
+
export declare function packPinCtrl(action: number): Uint8Array;
|
|
49
|
+
export declare function packVl53l7SetI2cSpeed(khz: number): Uint8Array;
|
|
50
|
+
/**
|
|
51
|
+
* RPT_VL53_INFO: bridge state only (the sensor is never probed). Counters run
|
|
52
|
+
* from power-up / DEVICE_RESET; SoftCycle clears the I2C ones. The report
|
|
53
|
+
* carries no echoed command byte.
|
|
54
|
+
*/
|
|
55
|
+
export interface Vl53l7Info {
|
|
56
|
+
intEdges: number;
|
|
57
|
+
framesDropped: number;
|
|
58
|
+
i2cErrors: number;
|
|
59
|
+
lastI2cError: number;
|
|
60
|
+
lpnLevel: number;
|
|
61
|
+
intLevel: number;
|
|
62
|
+
i2cKhz: number;
|
|
63
|
+
frameSize: number;
|
|
64
|
+
streaming: boolean;
|
|
65
|
+
}
|
|
66
|
+
export declare function unpackVl53l7Info(payload: Uint8Array): Vl53l7Info;
|
|
67
|
+
/** A sensor class an APP_VL53L7 board opens as. */
|
|
68
|
+
export type Vl53l7Model = "vl53l5cx" | "vl53l7cx" | "vl53l7ch";
|
|
69
|
+
/**
|
|
70
|
+
* Pick the L5/L7 class (contract 11 §1). All three boards run APP_VL53L7 and
|
|
71
|
+
* the silicon only tells L5 from L7 after init() (module_type), never CX from
|
|
72
|
+
* CH — so the production USB PID model decides, then the device name the
|
|
73
|
+
* bootloader was stamped with (`… VL53L7CH USB v2.1 …`), then the CX base
|
|
74
|
+
* (safe: its blob runs on every L5/L7 part).
|
|
75
|
+
*/
|
|
76
|
+
export declare function resolveVl53l7Model(usbModel: string | null | undefined, deviceName: string | null | undefined): Vl53l7Model;
|
|
77
|
+
//# sourceMappingURL=vl53l7.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vl53l7.d.ts","sourceRoot":"","sources":["../../src/protocol/vl53l7.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oBAAY,SAAS;IACnB,OAAO,KAAO;IACd,OAAO,KAAO;IACd,WAAW,KAAO;CACnB;AAED,oBAAY,SAAS;IACnB,QAAQ,MAAO;CAChB;AAED;;;GAGG;AACH,oBAAY,SAAS;IACnB,+DAA+D;IAC/D,MAAM,IAAI;IACV,uDAAuD;IACvD,KAAK,IAAI;IACT,qBAAqB;IACrB,MAAM,IAAI;IACV,8EAA8E;IAC9E,SAAS,IAAI;CACd;AAED,kCAAkC;AAClC,oBAAY,cAAc;IACxB,EAAE,IAAI;IACN,IAAI,IAAI;IACR,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,6CAA6C;AAC7C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,oDAAoD;AACpD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,mFAAmF;AACnF,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAEvD,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAEtD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAI7D;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAkBhE;AAED,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAI/D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,WAAW,CAUb"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VL53L5CX/L7CX/L7CH I2C register-bridge wire codecs
|
|
3
|
+
* (contracts/11_SENSOR_VL53L7.md). Mirrors the Python reference
|
|
4
|
+
* `depz_sensor_sdk.protocol.vl53l7`.
|
|
5
|
+
*
|
|
6
|
+
* Commands 0x32/0x33/0x35/0x36 and reports 0x91/0x93 are bit-for-bit the
|
|
7
|
+
* VL53L8 bridge (contract 04) and are reused from `./vl53l8.js`; this module
|
|
8
|
+
* holds only what the I2C board adds, plus its tighter transfer limits.
|
|
9
|
+
*/
|
|
10
|
+
export var Vl53l7Cmd;
|
|
11
|
+
(function (Vl53l7Cmd) {
|
|
12
|
+
Vl53l7Cmd[Vl53l7Cmd["PinCtrl"] = 52] = "PinCtrl";
|
|
13
|
+
Vl53l7Cmd[Vl53l7Cmd["GetInfo"] = 55] = "GetInfo";
|
|
14
|
+
Vl53l7Cmd[Vl53l7Cmd["SetI2cSpeed"] = 56] = "SetI2cSpeed";
|
|
15
|
+
})(Vl53l7Cmd || (Vl53l7Cmd = {}));
|
|
16
|
+
export var Vl53l7Rpt;
|
|
17
|
+
(function (Vl53l7Rpt) {
|
|
18
|
+
Vl53l7Rpt[Vl53l7Rpt["Vl53Info"] = 146] = "Vl53Info";
|
|
19
|
+
})(Vl53l7Rpt || (Vl53l7Rpt = {}));
|
|
20
|
+
/**
|
|
21
|
+
* VL53_PIN_CTRL actions. None is a true sensor reset (the board has no power
|
|
22
|
+
* GPIO): after LpnOff or SoftCycle the host must re-run init().
|
|
23
|
+
*/
|
|
24
|
+
export var PinAction;
|
|
25
|
+
(function (PinAction) {
|
|
26
|
+
/** Stop streaming, drive LPn low: sensor I2C interface off. */
|
|
27
|
+
PinAction[PinAction["LpnOff"] = 0] = "LpnOff";
|
|
28
|
+
/** Drive LPn high: interface on (power-up default). */
|
|
29
|
+
PinAction[PinAction["LpnOn"] = 1] = "LpnOn";
|
|
30
|
+
/** Pulse I2C_RST. */
|
|
31
|
+
PinAction[PinAction["I2cRst"] = 2] = "I2cRst";
|
|
32
|
+
/** Stop streaming, LPn low 1 ms, high, I2C_RST pulse; clears I2C counters. */
|
|
33
|
+
PinAction[PinAction["SoftCycle"] = 3] = "SoftCycle";
|
|
34
|
+
})(PinAction || (PinAction = {}));
|
|
35
|
+
/** RPT_VL53_INFO.lastI2cError. */
|
|
36
|
+
export var Vl53l7I2cError;
|
|
37
|
+
(function (Vl53l7I2cError) {
|
|
38
|
+
Vl53l7I2cError[Vl53l7I2cError["Ok"] = 0] = "Ok";
|
|
39
|
+
Vl53l7I2cError[Vl53l7I2cError["Nack"] = 1] = "Nack";
|
|
40
|
+
Vl53l7I2cError[Vl53l7I2cError["Timeout"] = 2] = "Timeout";
|
|
41
|
+
Vl53l7I2cError[Vl53l7I2cError["BusError"] = 3] = "BusError";
|
|
42
|
+
})(Vl53l7I2cError || (Vl53l7I2cError = {}));
|
|
43
|
+
/** VL53LMZ_READ_MAX: READ_REG len 1..1536. */
|
|
44
|
+
export const VL53L7_READ_MAX_LEN = 1536;
|
|
45
|
+
/** VL53LMZ_XFER_MAX: WRITE_REG N 1..2048. */
|
|
46
|
+
export const VL53L7_WRITE_MAX_LEN = 2048;
|
|
47
|
+
/** Bytes of frame data per RPT_VL53_FRAME chunk. */
|
|
48
|
+
export const VL53L7_STREAM_CHUNK_MAX = 1536;
|
|
49
|
+
export const VL53L7_INFO_SIZE = 20;
|
|
50
|
+
/** Nominal SCL steps the firmware carries a timing for; others snap to nearest. */
|
|
51
|
+
export const VL53L7_I2C_SPEED_STEPS_KHZ = [
|
|
52
|
+
100, 200, 400, 500, 600, 700, 800, 900, 1000,
|
|
53
|
+
];
|
|
54
|
+
export function packPinCtrl(action) {
|
|
55
|
+
return Uint8Array.of(action & 0xff);
|
|
56
|
+
}
|
|
57
|
+
export function packVl53l7SetI2cSpeed(khz) {
|
|
58
|
+
const out = new Uint8Array(2);
|
|
59
|
+
new DataView(out.buffer).setUint16(0, khz, true);
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
export function unpackVl53l7Info(payload) {
|
|
63
|
+
if (payload.length < VL53L7_INFO_SIZE) {
|
|
64
|
+
throw new Error(`RPT_VL53_INFO: expected ${VL53L7_INFO_SIZE} bytes, got ${payload.length}`);
|
|
65
|
+
}
|
|
66
|
+
const dv = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
67
|
+
return {
|
|
68
|
+
intEdges: dv.getUint32(0, true),
|
|
69
|
+
framesDropped: dv.getUint32(4, true),
|
|
70
|
+
i2cErrors: dv.getUint32(8, true),
|
|
71
|
+
lastI2cError: dv.getUint8(12),
|
|
72
|
+
lpnLevel: dv.getUint8(13),
|
|
73
|
+
intLevel: dv.getUint8(14),
|
|
74
|
+
i2cKhz: dv.getUint16(15, true),
|
|
75
|
+
frameSize: dv.getUint16(17, true),
|
|
76
|
+
streaming: dv.getUint8(19) !== 0,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const PART_RE = /VL53L([57])(CX|CH)/;
|
|
80
|
+
/**
|
|
81
|
+
* Pick the L5/L7 class (contract 11 §1). All three boards run APP_VL53L7 and
|
|
82
|
+
* the silicon only tells L5 from L7 after init() (module_type), never CX from
|
|
83
|
+
* CH — so the production USB PID model decides, then the device name the
|
|
84
|
+
* bootloader was stamped with (`… VL53L7CH USB v2.1 …`), then the CX base
|
|
85
|
+
* (safe: its blob runs on every L5/L7 part).
|
|
86
|
+
*/
|
|
87
|
+
export function resolveVl53l7Model(usbModel, deviceName) {
|
|
88
|
+
if (usbModel === "vl53l5cx" || usbModel === "vl53l7cx" || usbModel === "vl53l7ch") {
|
|
89
|
+
return usbModel;
|
|
90
|
+
}
|
|
91
|
+
const m = PART_RE.exec(deviceName ?? "");
|
|
92
|
+
if (m) {
|
|
93
|
+
const part = `vl53l${m[1]}${m[2].toLowerCase()}`;
|
|
94
|
+
if (part === "vl53l5cx" || part === "vl53l7cx" || part === "vl53l7ch")
|
|
95
|
+
return part;
|
|
96
|
+
}
|
|
97
|
+
return "vl53l7cx";
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=vl53l7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vl53l7.js","sourceRoot":"","sources":["../../src/protocol/vl53l7.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VL53L 1D-family register-bridge wire codecs, protocol v2.01
|
|
3
|
+
* (contracts/12_SENSOR_VL53LX.md). Mirrors the Python reference
|
|
4
|
+
* `depz_sensor_sdk.protocol.vl53lx`.
|
|
5
|
+
*
|
|
6
|
+
* One firmware (`APP_VL53L0_4`) serves VL53L0X, VL53L1CX, VL53L1CB, VL53L3CX,
|
|
7
|
+
* VL53L4CD and VL53L4CX. It is the VL53L4CD bridge of contract 10 with the
|
|
8
|
+
* three sensor-specific facts moved to the host: the register-address width
|
|
9
|
+
* (VL53_SET_ADDR_WIDTH, new), the interrupt-release writes (carried by
|
|
10
|
+
* VL53_START_STREAM) and the boot handshake (no longer inside VL53_XSHUT).
|
|
11
|
+
* READ_REG, WRITE_REG, XSHUT, STOP_STREAM, SET_I2C_SPEED and the REG_DATA /
|
|
12
|
+
* STREAM reports are the contract-10 codecs of `protocol/vl53l4.ts`, identical
|
|
13
|
+
* on the wire — import them from there. v2.01 (firmware v0.24) adds
|
|
14
|
+
* VL53_CLEAR_I2C_ERRORS; a v2.00 bridge refuses it with ERR_INVALID_CMD.
|
|
15
|
+
*
|
|
16
|
+
* Every export here carries a `Vl53lx`/`VL53LX_` name so the root index can
|
|
17
|
+
* re-export this module with `export *` next to the other VL53 protocols.
|
|
18
|
+
*/
|
|
19
|
+
export declare enum Vl53lxCmd {
|
|
20
|
+
ReadReg = 50,
|
|
21
|
+
WriteReg = 51,
|
|
22
|
+
Xshut = 52,
|
|
23
|
+
StartStream = 53,
|
|
24
|
+
StopStream = 54,
|
|
25
|
+
GetInfo = 55,
|
|
26
|
+
SetI2cSpeed = 56,
|
|
27
|
+
SetAddrWidth = 57,
|
|
28
|
+
ClearI2cErrors = 58
|
|
29
|
+
}
|
|
30
|
+
export declare enum Vl53lxRpt {
|
|
31
|
+
RegData = 145,
|
|
32
|
+
Info = 146,
|
|
33
|
+
Stream = 147
|
|
34
|
+
}
|
|
35
|
+
/** Interrupt-release steps a stream may carry (VL53_CLEAR_STEPS_WIRE_MAX). */
|
|
36
|
+
export declare const VL53LX_CLEAR_STEPS_MAX = 4;
|
|
37
|
+
/** RPT_VL53_INFO payload size (v2.00). */
|
|
38
|
+
export declare const VL53LX_INFO_SIZE = 23;
|
|
39
|
+
/** One interrupt-release step: write `value` to register `addr`. */
|
|
40
|
+
export type Vl53lxClearStep = readonly [addr: number, value: number];
|
|
41
|
+
/**
|
|
42
|
+
* vl53_start_stream_t: block, flags, then `clear` — the (addr, value) writes
|
|
43
|
+
* the bridge plays after every block read (0..4 steps). 6+3n bytes.
|
|
44
|
+
*/
|
|
45
|
+
export declare function packVl53lxStartStream(addr: number, length: number, clear?: ReadonlyArray<Vl53lxClearStep>, flags?: number): Uint8Array;
|
|
46
|
+
/** VL53_SET_ADDR_WIDTH payload: register-address width, 1 or 2 bytes. */
|
|
47
|
+
export declare function packVl53lxSetAddrWidth(width: number): Uint8Array;
|
|
48
|
+
/**
|
|
49
|
+
* RPT_VL53_INFO (v2.00, 23 bytes) — bridge state only; the bridge reads no
|
|
50
|
+
* sensor register. Counters are free-running (wrap silently): watch
|
|
51
|
+
* increments. `slotsSkipped` = a slot that never got the bus, `i2cErrors` =
|
|
52
|
+
* a bus that answered badly (since power-up, the last XSHUT reset or
|
|
53
|
+
* VL53_CLEAR_I2C_ERRORS — the SDK sends that at the end of every sensor init,
|
|
54
|
+
* so the NACKs of a resetting die are not counted), `framesDropped` = a good
|
|
55
|
+
* sample the USB TX ring had no room for (since the stream was armed).
|
|
56
|
+
*/
|
|
57
|
+
export interface Vl53lxInfo {
|
|
58
|
+
intEdges: number;
|
|
59
|
+
slotsSkipped: number;
|
|
60
|
+
i2cErrors: number;
|
|
61
|
+
/** 0 none, 1 NACK, 2 TIMEOUT, 3 BUS_ERROR. */
|
|
62
|
+
lastI2cError: number;
|
|
63
|
+
xshutLevel: number;
|
|
64
|
+
intLevel: number;
|
|
65
|
+
i2cKhz: number;
|
|
66
|
+
addrWidth: number;
|
|
67
|
+
nClear: number;
|
|
68
|
+
framesDropped: number;
|
|
69
|
+
}
|
|
70
|
+
/** `<IIIBBBHBBI`; rejects a payload shorter than 23 bytes. */
|
|
71
|
+
export declare function unpackVl53lxInfo(payload: Uint8Array): Vl53lxInfo;
|
|
72
|
+
//# sourceMappingURL=vl53lx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vl53lx.d.ts","sourceRoot":"","sources":["../../src/protocol/vl53lx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,oBAAY,SAAS;IACnB,OAAO,KAAO;IACd,QAAQ,KAAO;IACf,KAAK,KAAO;IACZ,WAAW,KAAO;IAClB,UAAU,KAAO;IACjB,OAAO,KAAO;IACd,WAAW,KAAO;IAClB,YAAY,KAAO;IACnB,cAAc,KAAO;CACtB;AAED,oBAAY,SAAS;IACnB,OAAO,MAAO;IACd,IAAI,MAAO;IACX,MAAM,MAAO;CACd;AAED,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAErE;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,aAAa,CAAC,eAAe,CAAM,EAC1C,KAAK,SAAI,GACR,UAAU,CAeZ;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKhE;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAmBhE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VL53L 1D-family register-bridge wire codecs, protocol v2.01
|
|
3
|
+
* (contracts/12_SENSOR_VL53LX.md). Mirrors the Python reference
|
|
4
|
+
* `depz_sensor_sdk.protocol.vl53lx`.
|
|
5
|
+
*
|
|
6
|
+
* One firmware (`APP_VL53L0_4`) serves VL53L0X, VL53L1CX, VL53L1CB, VL53L3CX,
|
|
7
|
+
* VL53L4CD and VL53L4CX. It is the VL53L4CD bridge of contract 10 with the
|
|
8
|
+
* three sensor-specific facts moved to the host: the register-address width
|
|
9
|
+
* (VL53_SET_ADDR_WIDTH, new), the interrupt-release writes (carried by
|
|
10
|
+
* VL53_START_STREAM) and the boot handshake (no longer inside VL53_XSHUT).
|
|
11
|
+
* READ_REG, WRITE_REG, XSHUT, STOP_STREAM, SET_I2C_SPEED and the REG_DATA /
|
|
12
|
+
* STREAM reports are the contract-10 codecs of `protocol/vl53l4.ts`, identical
|
|
13
|
+
* on the wire — import them from there. v2.01 (firmware v0.24) adds
|
|
14
|
+
* VL53_CLEAR_I2C_ERRORS; a v2.00 bridge refuses it with ERR_INVALID_CMD.
|
|
15
|
+
*
|
|
16
|
+
* Every export here carries a `Vl53lx`/`VL53LX_` name so the root index can
|
|
17
|
+
* re-export this module with `export *` next to the other VL53 protocols.
|
|
18
|
+
*/
|
|
19
|
+
export var Vl53lxCmd;
|
|
20
|
+
(function (Vl53lxCmd) {
|
|
21
|
+
Vl53lxCmd[Vl53lxCmd["ReadReg"] = 50] = "ReadReg";
|
|
22
|
+
Vl53lxCmd[Vl53lxCmd["WriteReg"] = 51] = "WriteReg";
|
|
23
|
+
Vl53lxCmd[Vl53lxCmd["Xshut"] = 52] = "Xshut";
|
|
24
|
+
Vl53lxCmd[Vl53lxCmd["StartStream"] = 53] = "StartStream";
|
|
25
|
+
Vl53lxCmd[Vl53lxCmd["StopStream"] = 54] = "StopStream";
|
|
26
|
+
Vl53lxCmd[Vl53lxCmd["GetInfo"] = 55] = "GetInfo";
|
|
27
|
+
Vl53lxCmd[Vl53lxCmd["SetI2cSpeed"] = 56] = "SetI2cSpeed";
|
|
28
|
+
Vl53lxCmd[Vl53lxCmd["SetAddrWidth"] = 57] = "SetAddrWidth";
|
|
29
|
+
Vl53lxCmd[Vl53lxCmd["ClearI2cErrors"] = 58] = "ClearI2cErrors";
|
|
30
|
+
})(Vl53lxCmd || (Vl53lxCmd = {}));
|
|
31
|
+
export var Vl53lxRpt;
|
|
32
|
+
(function (Vl53lxRpt) {
|
|
33
|
+
Vl53lxRpt[Vl53lxRpt["RegData"] = 145] = "RegData";
|
|
34
|
+
Vl53lxRpt[Vl53lxRpt["Info"] = 146] = "Info";
|
|
35
|
+
Vl53lxRpt[Vl53lxRpt["Stream"] = 147] = "Stream";
|
|
36
|
+
})(Vl53lxRpt || (Vl53lxRpt = {}));
|
|
37
|
+
/** Interrupt-release steps a stream may carry (VL53_CLEAR_STEPS_WIRE_MAX). */
|
|
38
|
+
export const VL53LX_CLEAR_STEPS_MAX = 4;
|
|
39
|
+
/** RPT_VL53_INFO payload size (v2.00). */
|
|
40
|
+
export const VL53LX_INFO_SIZE = 23;
|
|
41
|
+
/**
|
|
42
|
+
* vl53_start_stream_t: block, flags, then `clear` — the (addr, value) writes
|
|
43
|
+
* the bridge plays after every block read (0..4 steps). 6+3n bytes.
|
|
44
|
+
*/
|
|
45
|
+
export function packVl53lxStartStream(addr, length, clear = [], flags = 0) {
|
|
46
|
+
if (clear.length > VL53LX_CLEAR_STEPS_MAX) {
|
|
47
|
+
throw new RangeError(`at most ${VL53LX_CLEAR_STEPS_MAX} interrupt-release steps`);
|
|
48
|
+
}
|
|
49
|
+
const out = new Uint8Array(6 + 3 * clear.length);
|
|
50
|
+
const dv = new DataView(out.buffer);
|
|
51
|
+
dv.setUint16(0, addr, true);
|
|
52
|
+
dv.setUint16(2, length, true);
|
|
53
|
+
dv.setUint8(4, flags);
|
|
54
|
+
dv.setUint8(5, clear.length);
|
|
55
|
+
clear.forEach(([stepAddr, value], i) => {
|
|
56
|
+
dv.setUint16(6 + 3 * i, stepAddr, true);
|
|
57
|
+
dv.setUint8(8 + 3 * i, value);
|
|
58
|
+
});
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
/** VL53_SET_ADDR_WIDTH payload: register-address width, 1 or 2 bytes. */
|
|
62
|
+
export function packVl53lxSetAddrWidth(width) {
|
|
63
|
+
if (width !== 1 && width !== 2) {
|
|
64
|
+
throw new RangeError("register address width is 1 or 2 bytes");
|
|
65
|
+
}
|
|
66
|
+
return Uint8Array.of(width);
|
|
67
|
+
}
|
|
68
|
+
/** `<IIIBBBHBBI`; rejects a payload shorter than 23 bytes. */
|
|
69
|
+
export function unpackVl53lxInfo(payload) {
|
|
70
|
+
if (payload.length < VL53LX_INFO_SIZE) {
|
|
71
|
+
throw new RangeError(`RPT_VL53_INFO: expected ${VL53LX_INFO_SIZE} bytes, got ${payload.length}`);
|
|
72
|
+
}
|
|
73
|
+
const dv = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
74
|
+
return {
|
|
75
|
+
intEdges: dv.getUint32(0, true),
|
|
76
|
+
slotsSkipped: dv.getUint32(4, true),
|
|
77
|
+
i2cErrors: dv.getUint32(8, true),
|
|
78
|
+
lastI2cError: dv.getUint8(12),
|
|
79
|
+
xshutLevel: dv.getUint8(13),
|
|
80
|
+
intLevel: dv.getUint8(14),
|
|
81
|
+
i2cKhz: dv.getUint16(15, true),
|
|
82
|
+
addrWidth: dv.getUint8(17),
|
|
83
|
+
nClear: dv.getUint8(18),
|
|
84
|
+
framesDropped: dv.getUint32(19, true),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=vl53lx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vl53lx.js","sourceRoot":"","sources":["../../src/protocol/vl53lx.ts"],"names":[],"mappings":"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"}
|