@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.
Files changed (166) hide show
  1. package/README.md +13 -5
  2. package/dist/dataset.d.ts.map +1 -1
  3. package/dist/dataset.js +66 -2
  4. package/dist/dataset.js.map +1 -1
  5. package/dist/device/device.d.ts +6 -0
  6. package/dist/device/device.d.ts.map +1 -1
  7. package/dist/device/device.js +29 -6
  8. package/dist/device/device.js.map +1 -1
  9. package/dist/discovery.d.ts.map +1 -1
  10. package/dist/discovery.js +25 -2
  11. package/dist/discovery.js.map +1 -1
  12. package/dist/index.d.ts +21 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +16 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/protocol/bno055.d.ts +101 -0
  17. package/dist/protocol/bno055.d.ts.map +1 -0
  18. package/dist/protocol/bno055.js +105 -0
  19. package/dist/protocol/bno055.js.map +1 -0
  20. package/dist/protocol/identity.d.ts +1 -1
  21. package/dist/protocol/identity.d.ts.map +1 -1
  22. package/dist/protocol/identity.js +6 -0
  23. package/dist/protocol/identity.js.map +1 -1
  24. package/dist/protocol/vl53l7.d.ts +77 -0
  25. package/dist/protocol/vl53l7.d.ts.map +1 -0
  26. package/dist/protocol/vl53l7.js +99 -0
  27. package/dist/protocol/vl53l7.js.map +1 -0
  28. package/dist/protocol/vl53lx.d.ts +72 -0
  29. package/dist/protocol/vl53lx.d.ts.map +1 -0
  30. package/dist/protocol/vl53lx.js +87 -0
  31. package/dist/protocol/vl53lx.js.map +1 -0
  32. package/dist/sensors/bno055/bno055.d.ts +207 -0
  33. package/dist/sensors/bno055/bno055.d.ts.map +1 -0
  34. package/dist/sensors/bno055/bno055.js +547 -0
  35. package/dist/sensors/bno055/bno055.js.map +1 -0
  36. package/dist/sensors/bno055/regs.d.ts +271 -0
  37. package/dist/sensors/bno055/regs.d.ts.map +1 -0
  38. package/dist/sensors/bno055/regs.js +366 -0
  39. package/dist/sensors/bno055/regs.js.map +1 -0
  40. package/dist/sensors/bno086/bno086.d.ts +15 -0
  41. package/dist/sensors/bno086/bno086.d.ts.map +1 -1
  42. package/dist/sensors/bno086/bno086.js +43 -1
  43. package/dist/sensors/bno086/bno086.js.map +1 -1
  44. package/dist/sensors/bno086/sh2.d.ts.map +1 -1
  45. package/dist/sensors/bno086/sh2.js +5 -2
  46. package/dist/sensors/bno086/sh2.js.map +1 -1
  47. package/dist/sensors/reg-bridge.d.ts +35 -0
  48. package/dist/sensors/reg-bridge.d.ts.map +1 -0
  49. package/dist/sensors/reg-bridge.js +44 -0
  50. package/dist/sensors/reg-bridge.js.map +1 -0
  51. package/dist/sensors/vl53l4/vl53l4.d.ts.map +1 -1
  52. package/dist/sensors/vl53l4/vl53l4.js +18 -30
  53. package/dist/sensors/vl53l4/vl53l4.js.map +1 -1
  54. package/dist/sensors/vl53l7/vl53l7.d.ts +97 -0
  55. package/dist/sensors/vl53l7/vl53l7.d.ts.map +1 -0
  56. package/dist/sensors/vl53l7/vl53l7.js +138 -0
  57. package/dist/sensors/vl53l7/vl53l7.js.map +1 -0
  58. package/dist/sensors/vl53l8/assets/index.d.ts +5 -1
  59. package/dist/sensors/vl53l8/assets/index.d.ts.map +1 -1
  60. package/dist/sensors/vl53l8/assets/index.js +7 -1
  61. package/dist/sensors/vl53l8/assets/index.js.map +1 -1
  62. package/dist/sensors/vl53l8/assets/l7ch.d.ts +12 -0
  63. package/dist/sensors/vl53l8/assets/l7ch.d.ts.map +1 -0
  64. package/dist/sensors/vl53l8/assets/l7ch.js +18 -0
  65. package/dist/sensors/vl53l8/assets/l7ch.js.map +1 -0
  66. package/dist/sensors/vl53l8/assets/l7cx.d.ts +14 -0
  67. package/dist/sensors/vl53l8/assets/l7cx.d.ts.map +1 -0
  68. package/dist/sensors/vl53l8/assets/l7cx.js +20 -0
  69. package/dist/sensors/vl53l8/assets/l7cx.js.map +1 -0
  70. package/dist/sensors/vl53l8/cnh.d.ts +4 -3
  71. package/dist/sensors/vl53l8/cnh.d.ts.map +1 -1
  72. package/dist/sensors/vl53l8/cnh.js +4 -3
  73. package/dist/sensors/vl53l8/cnh.js.map +1 -1
  74. package/dist/sensors/vl53l8/uld.d.ts +50 -9
  75. package/dist/sensors/vl53l8/uld.d.ts.map +1 -1
  76. package/dist/sensors/vl53l8/uld.js +241 -35
  77. package/dist/sensors/vl53l8/uld.js.map +1 -1
  78. package/dist/sensors/vl53l8/vl53l8.d.ts +8 -3
  79. package/dist/sensors/vl53l8/vl53l8.d.ts.map +1 -1
  80. package/dist/sensors/vl53l8/vl53l8.js +41 -39
  81. package/dist/sensors/vl53l8/vl53l8.js.map +1 -1
  82. package/dist/sensors/vl53lx/decode.d.ts +70 -0
  83. package/dist/sensors/vl53lx/decode.d.ts.map +1 -0
  84. package/dist/sensors/vl53lx/decode.js +108 -0
  85. package/dist/sensors/vl53lx/decode.js.map +1 -0
  86. package/dist/sensors/vl53lx/uld/arith.d.ts +23 -0
  87. package/dist/sensors/vl53lx/uld/arith.d.ts.map +1 -0
  88. package/dist/sensors/vl53lx/uld/arith.js +42 -0
  89. package/dist/sensors/vl53lx/uld/arith.js.map +1 -0
  90. package/dist/sensors/vl53lx/uld/bare/core.d.ts +345 -0
  91. package/dist/sensors/vl53lx/uld/bare/core.d.ts.map +1 -0
  92. package/dist/sensors/vl53lx/uld/bare/core.js +1085 -0
  93. package/dist/sensors/vl53lx/uld/bare/core.js.map +1 -0
  94. package/dist/sensors/vl53lx/uld/bare/driver.d.ts +91 -0
  95. package/dist/sensors/vl53lx/uld/bare/driver.d.ts.map +1 -0
  96. package/dist/sensors/vl53lx/uld/bare/driver.js +206 -0
  97. package/dist/sensors/vl53lx/uld/bare/driver.js.map +1 -0
  98. package/dist/sensors/vl53lx/uld/bare/hist.d.ts +180 -0
  99. package/dist/sensors/vl53lx/uld/bare/hist.d.ts.map +1 -0
  100. package/dist/sensors/vl53lx/uld/bare/hist.js +949 -0
  101. package/dist/sensors/vl53lx/uld/bare/hist.js.map +1 -0
  102. package/dist/sensors/vl53lx/uld/bare/image.d.ts +53 -0
  103. package/dist/sensors/vl53lx/uld/bare/image.d.ts.map +1 -0
  104. package/dist/sensors/vl53lx/uld/bare/image.js +108 -0
  105. package/dist/sensors/vl53lx/uld/bare/image.js.map +1 -0
  106. package/dist/sensors/vl53lx/uld/bare/imath.d.ts +39 -0
  107. package/dist/sensors/vl53lx/uld/bare/imath.d.ts.map +1 -0
  108. package/dist/sensors/vl53lx/uld/bare/imath.js +99 -0
  109. package/dist/sensors/vl53lx/uld/bare/imath.js.map +1 -0
  110. package/dist/sensors/vl53lx/uld/bare/index.d.ts +22 -0
  111. package/dist/sensors/vl53lx/uld/bare/index.d.ts.map +1 -0
  112. package/dist/sensors/vl53lx/uld/bare/index.js +22 -0
  113. package/dist/sensors/vl53lx/uld/bare/index.js.map +1 -0
  114. package/dist/sensors/vl53lx/uld/bare/nvm.d.ts +85 -0
  115. package/dist/sensors/vl53lx/uld/bare/nvm.d.ts.map +1 -0
  116. package/dist/sensors/vl53lx/uld/bare/nvm.js +148 -0
  117. package/dist/sensors/vl53lx/uld/bare/nvm.js.map +1 -0
  118. package/dist/sensors/vl53lx/uld/bare/regs.d.ts +54 -0
  119. package/dist/sensors/vl53lx/uld/bare/regs.d.ts.map +1 -0
  120. package/dist/sensors/vl53lx/uld/bare/regs.js +496 -0
  121. package/dist/sensors/vl53lx/uld/bare/regs.js.map +1 -0
  122. package/dist/sensors/vl53lx/uld/bare/tuning.d.ts +15 -0
  123. package/dist/sensors/vl53lx/uld/bare/tuning.d.ts.map +1 -0
  124. package/dist/sensors/vl53lx/uld/bare/tuning.js +303 -0
  125. package/dist/sensors/vl53lx/uld/bare/tuning.js.map +1 -0
  126. package/dist/sensors/vl53lx/uld/base.d.ts +129 -0
  127. package/dist/sensors/vl53lx/uld/base.d.ts.map +1 -0
  128. package/dist/sensors/vl53lx/uld/base.js +166 -0
  129. package/dist/sensors/vl53lx/uld/base.js.map +1 -0
  130. package/dist/sensors/vl53lx/uld/l0x.d.ts +306 -0
  131. package/dist/sensors/vl53lx/uld/l0x.d.ts.map +1 -0
  132. package/dist/sensors/vl53lx/uld/l0x.js +1492 -0
  133. package/dist/sensors/vl53lx/uld/l0x.js.map +1 -0
  134. package/dist/sensors/vl53lx/uld/l1.d.ts +69 -0
  135. package/dist/sensors/vl53lx/uld/l1.d.ts.map +1 -0
  136. package/dist/sensors/vl53lx/uld/l1.js +262 -0
  137. package/dist/sensors/vl53lx/uld/l1.js.map +1 -0
  138. package/dist/sensors/vl53lx/uld/l3.d.ts +25 -0
  139. package/dist/sensors/vl53lx/uld/l3.d.ts.map +1 -0
  140. package/dist/sensors/vl53lx/uld/l3.js +51 -0
  141. package/dist/sensors/vl53lx/uld/l3.js.map +1 -0
  142. package/dist/sensors/vl53lx/uld/l4.d.ts +22 -0
  143. package/dist/sensors/vl53lx/uld/l4.d.ts.map +1 -0
  144. package/dist/sensors/vl53lx/uld/l4.js +99 -0
  145. package/dist/sensors/vl53lx/uld/l4.js.map +1 -0
  146. package/dist/sensors/vl53lx/uld/link.d.ts +42 -0
  147. package/dist/sensors/vl53lx/uld/link.d.ts.map +1 -0
  148. package/dist/sensors/vl53lx/uld/link.js +28 -0
  149. package/dist/sensors/vl53lx/uld/link.js.map +1 -0
  150. package/dist/sensors/vl53lx/uld/registry.d.ts +68 -0
  151. package/dist/sensors/vl53lx/uld/registry.d.ts.map +1 -0
  152. package/dist/sensors/vl53lx/uld/registry.js +139 -0
  153. package/dist/sensors/vl53lx/uld/registry.js.map +1 -0
  154. package/dist/sensors/vl53lx/uld/vl53l1-die.d.ts +172 -0
  155. package/dist/sensors/vl53lx/uld/vl53l1-die.d.ts.map +1 -0
  156. package/dist/sensors/vl53lx/uld/vl53l1-die.js +431 -0
  157. package/dist/sensors/vl53lx/uld/vl53l1-die.js.map +1 -0
  158. package/dist/sensors/vl53lx/vl53lx.d.ts +323 -0
  159. package/dist/sensors/vl53lx/vl53lx.d.ts.map +1 -0
  160. package/dist/sensors/vl53lx/vl53lx.js +688 -0
  161. package/dist/sensors/vl53lx/vl53lx.js.map +1 -0
  162. package/dist/transport/webserial.d.ts +4 -0
  163. package/dist/transport/webserial.d.ts.map +1 -1
  164. package/dist/transport/webserial.js +58 -12
  165. package/dist/transport/webserial.js.map +1 -1
  166. package/package.json +9 -2
@@ -0,0 +1,99 @@
1
+ /**
2
+ * uld/l4 — VL53L4CD ULD 2.2.3, for VL53L4CD and VL53L4CX alike. Async port of
3
+ * the Python `depz_sensor_sdk.vl53lx.uld.l4` (VL53L4CD_api.c +
4
+ * VL53L4CD_calibration.c). Its configuration blob, the write that closes its
5
+ * init and its two calibrations; the die body lives in `vl53l1-die.ts`.
6
+ */
7
+ import { Vl53Error } from "./link.js";
8
+ import { floorDiv, pyRound } from "./arith.js";
9
+ import { CONFIG_ADDR, CONFIG_END, INNER_OFFSET_MM, OUTER_OFFSET_MM, RANGE_OFFSET_MM, VL53L1Die, XTALK_PLANE_OFFSET_KCPS, } from "./vl53l1-die.js";
10
+ export const L4_ULD_VERSION = [2, 2, 3, 0];
11
+ /** VL53L4CD_DEFAULT_CONFIGURATION[] — 91 bytes, registers 0x2D..0x87. */
12
+ export const L4_DEFAULT_CONFIGURATION = Uint8Array.from([
13
+ 0x00, 0x00, 0x00, 0x11, 0x02, 0x00, 0x02, 0x08, // 0x2D..0x34
14
+ 0x00, 0x08, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, // 0x35..0x3C
15
+ 0x00, 0xff, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, // 0x3D..0x44
16
+ 0x00, 0x20, 0x0b, 0x00, 0x00, 0x02, 0x14, 0x21, // 0x45..0x4C
17
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc8, // 0x4D..0x54
18
+ 0x00, 0x00, 0x38, 0xff, 0x01, 0x00, 0x08, 0x00, // 0x55..0x5C
19
+ 0x00, 0x01, 0xcc, 0x07, 0x01, 0xf1, 0x05, 0x00, // 0x5D..0x64
20
+ 0xa0, 0x00, 0x80, 0x08, 0x38, 0x00, 0x00, 0x00, // 0x65..0x6C
21
+ 0x00, 0x0f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x6D..0x74
22
+ 0x00, 0x00, 0x01, 0x07, 0x05, 0x06, 0x06, 0x00, // 0x75..0x7C
23
+ 0x00, 0x02, 0xc7, 0xff, 0x9b, 0x00, 0x00, 0x00, // 0x7D..0x84
24
+ 0x01, 0x00, 0x00, // 0x85..0x87
25
+ ]);
26
+ if (L4_DEFAULT_CONFIGURATION.length !== CONFIG_END - CONFIG_ADDR + 1) {
27
+ throw new Error("VL53L4CD configuration blob must be 91 bytes");
28
+ }
29
+ /** Port of VL53L4CD_api.c + VL53L4CD_calibration.c (ULD 2.2.3). */
30
+ export class VL53L4 extends VL53L1Die {
31
+ static SUPPORTS = new Set([
32
+ "timing",
33
+ "offset",
34
+ "xtalk",
35
+ "thresholds",
36
+ "signal_thresh",
37
+ "sigma_thresh",
38
+ "temp_update",
39
+ "calib_offset",
40
+ "calib_xtalk",
41
+ ]);
42
+ CONFIGURATION = L4_DEFAULT_CONFIGURATION;
43
+ /** 1.2 m — the VL53L4CD's rating, because this is its blob. */
44
+ reachMm() {
45
+ return 1200;
46
+ }
47
+ /** ALGO__RANGE_IGNORE_THRESHOLD_MCPS, the write closing VL53L4CD_SensorInit(). */
48
+ async initExtra() {
49
+ await this.p.wrWord(0x0024, 0x0500);
50
+ }
51
+ // ── calibration (VL53L4CD_calibration.c) ──
52
+ async calibrateOffset(targetDistMm, nbSamples = 20) {
53
+ if (!(nbSamples >= 5 && nbSamples <= 255) || !(targetDistMm >= 10 && targetDistMm <= 1000)) {
54
+ throw new Vl53Error("nb_samples must be 5..255, target 10..1000 mm");
55
+ }
56
+ await this.p.wrWord(RANGE_OFFSET_MM, 0);
57
+ await this.p.wrWord(INNER_OFFSET_MM, 0);
58
+ await this.p.wrWord(OUTER_OFFSET_MM, 0);
59
+ await this.collect(10, () => undefined); // device heat loop
60
+ const distances = [];
61
+ await this.collect(nbSamples, (_i, r) => distances.push(r.distanceMm));
62
+ const offsetMm = targetDistMm - floorDiv(sum(distances), nbSamples);
63
+ await this.p.wrWord(RANGE_OFFSET_MM, (offsetMm * 4) & 0xffff);
64
+ return offsetMm;
65
+ }
66
+ async calibrateXtalk(targetDistMm, nbSamples = 20) {
67
+ if (!(nbSamples >= 5 && nbSamples <= 255) || !(targetDistMm >= 10 && targetDistMm <= 5000)) {
68
+ throw new Vl53Error("nb_samples must be 5..255, target 10..5000 mm");
69
+ }
70
+ await this.p.wrWord(XTALK_PLANE_OFFSET_KCPS, 0); // disable compensation
71
+ await this.collect(10, () => undefined); // device heat loop
72
+ const samples = [];
73
+ await this.collect(nbSamples, (i, r) => {
74
+ // Discard invalid measurements and the first frame.
75
+ if (r.rangeStatus === 0 && i > 0)
76
+ samples.push(r);
77
+ });
78
+ if (samples.length === 0)
79
+ throw new Vl53Error("xtalk calibration failed: no valid samples");
80
+ const n = samples.length;
81
+ const avgDistance = sum(samples.map((s) => s.distanceMm)) / n;
82
+ const avgSpadNb = sum(samples.map((s) => s.numberOfSpad)) / n;
83
+ const avgSignal = sum(samples.map((s) => s.signalRateKcps)) / n;
84
+ const tmpXtalk = (1.0 - avgDistance / targetDistMm) * (avgSignal / avgSpadNb);
85
+ if (tmpXtalk > 127) {
86
+ // 127 kcps is the max xtalk value (65536/512)
87
+ throw new Vl53Error(`xtalk calibration failed: ${tmpXtalk.toFixed(1)} kcps > 127`);
88
+ }
89
+ await this.p.wrWord(XTALK_PLANE_OFFSET_KCPS, Math.trunc(tmpXtalk * 512.0) & 0xffff);
90
+ return pyRound(tmpXtalk);
91
+ }
92
+ }
93
+ function sum(xs) {
94
+ let s = 0;
95
+ for (const x of xs)
96
+ s += x;
97
+ return s;
98
+ }
99
+ //# sourceMappingURL=l4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l4.js","sourceRoot":"","sources":["../../../../src/sensors/vl53lx/uld/l4.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * What the ULD ports expect from the firmware repo's `vl53_link` — mirror of
3
+ * the Python `depz_sensor_sdk.vl53lx._link` (contract 12).
4
+ *
5
+ * The ports import the two error types, the boot bus speed and the XSHUT
6
+ * action codes; the device surface itself is `BridgeDevice`, which the
7
+ * `Vl53lx` device class implements over the register bridge.
8
+ */
9
+ import { DepzError } from "../../../errors.js";
10
+ /** The only bus speed an unconfigured sensor is specified for. */
11
+ export declare const I2C_KHZ_BOOT = 400;
12
+ export declare const VL53_XSHUT_OFF = 0;
13
+ export declare const VL53_XSHUT_ON = 1;
14
+ export declare const VL53_XSHUT_RESET = 2;
15
+ /**
16
+ * A ULD-level failure: the sensor did not do what the driver needed (timeout
17
+ * waiting for data-ready or boot, a calibration that failed...).
18
+ */
19
+ export declare class Vl53Error extends DepzError {
20
+ }
21
+ /**
22
+ * The bridge refused a register command or did not answer it — the firmware
23
+ * repo's single error for both. The ports catch it where the sensor
24
+ * legitimately NACKs for a while (e.g. right after a soft reset).
25
+ */
26
+ export declare class ProtocolError extends DepzError {
27
+ }
28
+ /**
29
+ * The `Vl53Device` surface the ports use. Register values are passed through
30
+ * untouched; the implementation splits transfers at the bridge's 253-byte
31
+ * limit and turns a non-OK status or a missing answer into `ProtocolError`.
32
+ */
33
+ export interface BridgeDevice {
34
+ readReg(addr: number, length: number): Promise<Uint8Array>;
35
+ writeReg(addr: number, data: Uint8Array): Promise<void>;
36
+ setI2cSpeed(khz: number): Promise<void>;
37
+ setAddrWidth(width: number): Promise<void>;
38
+ /** Zero the bridge's I2C error counter (protocol v2.01, firmware v0.24+). */
39
+ clearI2cErrors(): Promise<void>;
40
+ xshut(action: number): Promise<void>;
41
+ }
42
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/sensors/vl53lx/uld/link.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,kEAAkE;AAClE,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;GAGG;AACH,qBAAa,SAAU,SAAQ,SAAS;CAAG;AAE3C;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,SAAS;CAAG;AAE/C;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,6EAA6E;IAC7E,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * What the ULD ports expect from the firmware repo's `vl53_link` — mirror of
3
+ * the Python `depz_sensor_sdk.vl53lx._link` (contract 12).
4
+ *
5
+ * The ports import the two error types, the boot bus speed and the XSHUT
6
+ * action codes; the device surface itself is `BridgeDevice`, which the
7
+ * `Vl53lx` device class implements over the register bridge.
8
+ */
9
+ import { DepzError } from "../../../errors.js";
10
+ /** The only bus speed an unconfigured sensor is specified for. */
11
+ export const I2C_KHZ_BOOT = 400;
12
+ export const VL53_XSHUT_OFF = 0;
13
+ export const VL53_XSHUT_ON = 1;
14
+ export const VL53_XSHUT_RESET = 2;
15
+ /**
16
+ * A ULD-level failure: the sensor did not do what the driver needed (timeout
17
+ * waiting for data-ready or boot, a calibration that failed...).
18
+ */
19
+ export class Vl53Error extends DepzError {
20
+ }
21
+ /**
22
+ * The bridge refused a register command or did not answer it — the firmware
23
+ * repo's single error for both. The ports catch it where the sensor
24
+ * legitimately NACKs for a while (e.g. right after a soft reset).
25
+ */
26
+ export class ProtocolError extends DepzError {
27
+ }
28
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/sensors/vl53lx/uld/link.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,kEAAkE;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,SAAS;CAAG;AAE3C;;;;GAIG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;CAAG"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * uld/registry — the product table: one row per part number, holding what is
3
+ * true of the part itself and which driver serves which way of driving it.
4
+ * Mirror of the Python `depz_sensor_sdk.vl53lx.uld.registry`.
5
+ *
6
+ * Two independent axes:
7
+ * - **product** — whose parameter set to load (normally what the board's
8
+ * device name carries; naming a neighbour borrows its driver);
9
+ * - **driver kind** — one of `DRIVER_KINDS`.
10
+ *
11
+ * `driverFor(product, kind)` resolves the pair; a pair that does not exist is
12
+ * a refusal, never a fallback. The model id is a cross-check (`modelIdOk`),
13
+ * never a selector: L1CX/L1CB and L4CD/L4CX share theirs.
14
+ */
15
+ import type { BridgePlatform, SensorDriver } from "./base.js";
16
+ /** A concrete driver class: constructible, with the static facts of SensorDriver. */
17
+ export interface DriverClass {
18
+ new (platform: BridgePlatform, product: string): SensorDriver;
19
+ readonly name: string;
20
+ readonly ADDR_WIDTH: number;
21
+ readonly CLEAR_STEPS: ReadonlyArray<readonly [number, number]>;
22
+ readonly MAX_KHZ: number;
23
+ readonly SUPPORTS: ReadonlySet<string>;
24
+ readonly MODES: readonly string[];
25
+ readonly BUDGET_MS: readonly [number, number];
26
+ readonly HISTOGRAM: boolean;
27
+ }
28
+ /**
29
+ * The three kinds of driver ST ships for this family, in UI order:
30
+ * `uld` (Ultra Lite — the die computes the distance), `ulp` (Ultra Low Power,
31
+ * VL53L3CX only), `histogram` (the Bare Driver — 24 raw bins, the host finds
32
+ * up to four targets).
33
+ */
34
+ export declare const DRIVER_KINDS: readonly ["uld", "ulp", "histogram"];
35
+ export type DriverKind = (typeof DRIVER_KINDS)[number];
36
+ /** Every product of the 1D family, in UI order. */
37
+ export declare const PRODUCTS: readonly ["VL53L0X", "VL53L1CX", "VL53L1CB", "VL53L3CX", "VL53L4CD", "VL53L4CX"];
38
+ /** One row of the table: the facts that belong to the part number. */
39
+ export interface Product {
40
+ modelId: number;
41
+ /** Datasheet rating of the module, mm. */
42
+ reachMm: number;
43
+ drivers: Partial<Record<string, DriverClass>>;
44
+ caveats: Partial<Record<string, string>>;
45
+ }
46
+ /** Which pairs exist — every one measured on hardware. */
47
+ export declare const TABLE: Readonly<Record<string, Product>>;
48
+ /**
49
+ * `ToF Sensor VL53L4CD USB v2.1` → 'VL53L4CD'. null if the name carries no
50
+ * product number the table knows.
51
+ */
52
+ export declare function productFromBoardName(name: string | null | undefined): string | null;
53
+ /** An error the Python port raises as NotImplementedError. */
54
+ export declare class NotImplementedError extends Error {
55
+ constructor(message?: string);
56
+ }
57
+ /** → the table row. Throws for a product nobody serves. */
58
+ export declare function product(name: string): Product;
59
+ /** → the driver kinds this product has, in DRIVER_KINDS order. */
60
+ export declare function driverKinds(name: string): string[];
61
+ /** → [driver class, caveat or null] for one product/driver pair. */
62
+ export declare function driverFor(name: string, kind: string): [DriverClass, string | null];
63
+ /** The product's rated maximum ranging distance, mm (datasheet), or null. */
64
+ export declare function reachMm(name: string | null | undefined): number | null;
65
+ /** Cross-check the id the sensor answered: true only says "not something else". */
66
+ export declare function modelIdOk(name: string | null | undefined, value: number): boolean;
67
+ export declare function supportedProducts(): string[];
68
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/sensors/vl53lx/uld/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAO9D,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,KAAK,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,sCAAuC,CAAC;AACjE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,mDAAmD;AACnD,eAAO,MAAM,QAAQ,kFAOX,CAAC;AAEX,sEAAsE;AACtE,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1C;AAMD,0DAA0D;AAC1D,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2CnD,CAAC;AAIF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAMnF;AAED,8DAA8D;AAC9D,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ7C;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGlD;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,CASlF;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGjF;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * uld/registry — the product table: one row per part number, holding what is
3
+ * true of the part itself and which driver serves which way of driving it.
4
+ * Mirror of the Python `depz_sensor_sdk.vl53lx.uld.registry`.
5
+ *
6
+ * Two independent axes:
7
+ * - **product** — whose parameter set to load (normally what the board's
8
+ * device name carries; naming a neighbour borrows its driver);
9
+ * - **driver kind** — one of `DRIVER_KINDS`.
10
+ *
11
+ * `driverFor(product, kind)` resolves the pair; a pair that does not exist is
12
+ * a refusal, never a fallback. The model id is a cross-check (`modelIdOk`),
13
+ * never a selector: L1CX/L1CB and L4CD/L4CX share theirs.
14
+ */
15
+ import { VL53L0X } from "./l0x.js";
16
+ import { VL53L1 } from "./l1.js";
17
+ import { VL53L3 } from "./l3.js";
18
+ import { VL53L4 } from "./l4.js";
19
+ import { VL53LX } from "./bare/driver.js";
20
+ /**
21
+ * The three kinds of driver ST ships for this family, in UI order:
22
+ * `uld` (Ultra Lite — the die computes the distance), `ulp` (Ultra Low Power,
23
+ * VL53L3CX only), `histogram` (the Bare Driver — 24 raw bins, the host finds
24
+ * up to four targets).
25
+ */
26
+ export const DRIVER_KINDS = ["uld", "ulp", "histogram"];
27
+ /** Every product of the 1D family, in UI order. */
28
+ export const PRODUCTS = [
29
+ "VL53L0X",
30
+ "VL53L1CX",
31
+ "VL53L1CB",
32
+ "VL53L3CX",
33
+ "VL53L4CD",
34
+ "VL53L4CX",
35
+ ];
36
+ const HIST_CAVEAT = "the histogram driver has no calibrations and no detection thresholds - " +
37
+ "the light drivers are the ones with those";
38
+ /** Which pairs exist — every one measured on hardware. */
39
+ export const TABLE = {
40
+ VL53L0X: {
41
+ modelId: 0x00ee,
42
+ reachMm: 2000,
43
+ drivers: { uld: VL53L0X },
44
+ caveats: { uld: "no detection thresholds; there is no ROI on this die at all" },
45
+ },
46
+ VL53L1CX: {
47
+ modelId: 0xeacc,
48
+ reachMm: 4000,
49
+ drivers: { uld: VL53L1, histogram: VL53LX },
50
+ caveats: { histogram: HIST_CAVEAT },
51
+ },
52
+ // Same die and ULD as the CX; the CB is the cover-glass module.
53
+ VL53L1CB: {
54
+ modelId: 0xeacc,
55
+ reachMm: 8000,
56
+ drivers: { uld: VL53L1, histogram: VL53LX },
57
+ caveats: { histogram: HIST_CAVEAT },
58
+ },
59
+ VL53L3CX: {
60
+ modelId: 0xeaaa,
61
+ reachMm: 3000,
62
+ drivers: { ulp: VL53L3, histogram: VL53LX },
63
+ caveats: {
64
+ ulp: "single-target ranging only - the histogram driver gives several targets instead",
65
+ histogram: HIST_CAVEAT,
66
+ },
67
+ },
68
+ VL53L4CD: {
69
+ modelId: 0xebaa,
70
+ reachMm: 1200,
71
+ drivers: { uld: VL53L4, histogram: VL53LX },
72
+ caveats: { histogram: HIST_CAVEAT },
73
+ },
74
+ // The Bare Driver is what ST ships for this part; to run it light, name a
75
+ // sibling: product 'VL53L4CD' (1.2 m, calibrations) or 'VL53L1CX'.
76
+ VL53L4CX: {
77
+ modelId: 0xebaa,
78
+ reachMm: 6000,
79
+ drivers: { histogram: VL53LX },
80
+ caveats: { histogram: HIST_CAVEAT },
81
+ },
82
+ };
83
+ const NAME_RE = /VL53L(\d[A-Z0-9]*)/;
84
+ /**
85
+ * `ToF Sensor VL53L4CD USB v2.1` → 'VL53L4CD'. null if the name carries no
86
+ * product number the table knows.
87
+ */
88
+ export function productFromBoardName(name) {
89
+ if (!name)
90
+ return null;
91
+ const m = NAME_RE.exec(name.toUpperCase());
92
+ if (!m)
93
+ return null;
94
+ const product = "VL53L" + m[1];
95
+ return product in TABLE ? product : null;
96
+ }
97
+ /** An error the Python port raises as NotImplementedError. */
98
+ export class NotImplementedError extends Error {
99
+ constructor(message) {
100
+ super(message);
101
+ this.name = "NotImplementedError";
102
+ }
103
+ }
104
+ /** → the table row. Throws for a product nobody serves. */
105
+ export function product(name) {
106
+ const row = TABLE[name];
107
+ if (row === undefined) {
108
+ throw new NotImplementedError(`no such product: ${name} - served: ${supportedProducts().join(", ")}`);
109
+ }
110
+ return row;
111
+ }
112
+ /** → the driver kinds this product has, in DRIVER_KINDS order. */
113
+ export function driverKinds(name) {
114
+ const have = product(name).drivers;
115
+ return DRIVER_KINDS.filter((k) => have[k] !== undefined);
116
+ }
117
+ /** → [driver class, caveat or null] for one product/driver pair. */
118
+ export function driverFor(name, kind) {
119
+ const row = product(name);
120
+ const cls = row.drivers[kind];
121
+ if (cls === undefined) {
122
+ throw new NotImplementedError(`${name} has no '${kind}' driver - it has ${driverKinds(name).join(", ")}`);
123
+ }
124
+ return [cls, row.caveats[kind] ?? null];
125
+ }
126
+ /** The product's rated maximum ranging distance, mm (datasheet), or null. */
127
+ export function reachMm(name) {
128
+ const row = name ? TABLE[name] : undefined;
129
+ return row ? row.reachMm : null;
130
+ }
131
+ /** Cross-check the id the sensor answered: true only says "not something else". */
132
+ export function modelIdOk(name, value) {
133
+ const row = name ? TABLE[name] : undefined;
134
+ return row !== undefined && row.modelId === value;
135
+ }
136
+ export function supportedProducts() {
137
+ return PRODUCTS.filter((p) => p in TABLE);
138
+ }
139
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/sensors/vl53lx/uld/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAe1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAU,CAAC;AAGjE,mDAAmD;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;CACF,CAAC;AAWX,MAAM,WAAW,GACf,yEAAyE;IACzE,2CAA2C,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,KAAK,GAAsC;IACtD,OAAO,EAAE;QACP,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;QACzB,OAAO,EAAE,EAAE,GAAG,EAAE,6DAA6D,EAAE;KAChF;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;QAC3C,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;KACpC;IACD,gEAAgE;IAChE,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;QAC3C,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;KACpC;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;QAC3C,OAAO,EAAE;YACP,GAAG,EAAE,iFAAiF;YACtF,SAAS,EAAE,WAAW;SACvB;KACF;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;QAC3C,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;KACpC;IACD,0EAA0E;IAC1E,mEAAmE;IACnE,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;QAC9B,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;KACpC;CACF,CAAC;AAEF,MAAM,OAAO,GAAG,oBAAoB,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA+B;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IAChC,OAAO,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,8DAA8D;AAC9D,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,mBAAmB,CAC3B,oBAAoB,IAAI,cAAc,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvE,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IACnC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,mBAAmB,CAC3B,GAAG,IAAI,YAAY,IAAI,qBAAqB,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3E,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,IAA+B;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,IAA+B,EAAE,KAAa;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * uld/vl53l1-die — the VL53L1 die: register map, result block, and the
3
+ * VL53L4CD ULD body. Async port of the Python
4
+ * `depz_sensor_sdk.vl53lx.uld.vl53l1_die`.
5
+ *
6
+ * The 17-byte result block at 0x0089, the range-status table, the
7
+ * register-address width, the interrupt-release write and the bus ceiling are
8
+ * what every part built on this die has in common. `VL53L1Die` is the body of
9
+ * the VL53L4CD ULD, shared by `l4.ts` (VL53L4CD/CX) and `l3.ts` (VL53L3CX
10
+ * ULP); `l1.ts` (VL53L1X ULD) overrides the ranging configuration.
11
+ *
12
+ * Register sequences and integer widths are the C driver's — do not
13
+ * "simplify" them.
14
+ */
15
+ import { SensorDriver, type Measurement } from "./base.js";
16
+ export declare const SOFT_RESET = 0;
17
+ export declare const I2C_SLAVE__DEVICE_ADDRESS = 1;
18
+ export declare const OSC_FREQUENCY = 6;
19
+ export declare const VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND = 8;
20
+ export declare const XTALK_PLANE_OFFSET_KCPS = 22;
21
+ export declare const XTALK_X_PLANE_GRADIENT_KCPS = 24;
22
+ export declare const XTALK_Y_PLANE_GRADIENT_KCPS = 26;
23
+ export declare const RANGE_OFFSET_MM = 30;
24
+ export declare const INNER_OFFSET_MM = 32;
25
+ export declare const OUTER_OFFSET_MM = 34;
26
+ export declare const GPIO_HV_MUX__CTRL = 48;
27
+ export declare const GPIO__TIO_HV_STATUS = 49;
28
+ export declare const SYSTEM__INTERRUPT_CONFIG_GPIO = 70;
29
+ export declare const PHASECAL_CONFIG__TIMEOUT_MACROP = 75;
30
+ export declare const RANGE_CONFIG__TIMEOUT_MACROP_A_HI = 94;
31
+ export declare const RANGE_CONFIG__VCSEL_PERIOD_A = 96;
32
+ export declare const RANGE_CONFIG__TIMEOUT_MACROP_B_HI = 97;
33
+ export declare const RANGE_CONFIG__VCSEL_PERIOD_B = 99;
34
+ export declare const RANGE_CONFIG__SIGMA_THRESH = 100;
35
+ export declare const MIN_COUNT_RATE_RTN_LIMIT_MCPS = 102;
36
+ export declare const RANGE_CONFIG__VALID_PHASE_HIGH = 105;
37
+ export declare const INTERMEASUREMENT_MS = 108;
38
+ export declare const THRESH_HIGH = 114;
39
+ export declare const THRESH_LOW = 116;
40
+ export declare const SD_CONFIG__WOI_SD0 = 120;
41
+ export declare const SD_CONFIG__INITIAL_PHASE_SD0 = 122;
42
+ export declare const ROI_CONFIG__USER_ROI_CENTRE_SPAD = 127;
43
+ export declare const ROI_CONFIG__USER_ROI_XY_SIZE = 128;
44
+ export declare const SYSTEM__INTERRUPT_CLEAR = 134;
45
+ export declare const SYSTEM__MODE_START = 135;
46
+ export declare const RESULT__RANGE_STATUS = 137;
47
+ export declare const RESULT__SPAD_NB = 140;
48
+ export declare const RESULT__SIGNAL_RATE = 142;
49
+ export declare const RESULT__AMBIENT_RATE = 144;
50
+ export declare const RESULT__SIGMA = 146;
51
+ export declare const RESULT__DISTANCE = 150;
52
+ export declare const RESULT__OSC_CALIBRATE_VAL = 222;
53
+ export declare const FIRMWARE__SYSTEM_STATUS = 229;
54
+ export declare const IDENTIFICATION__MODEL_ID = 271;
55
+ export declare const ROI_CONFIG__MODE_ROI_CENTRE_SPAD = 318;
56
+ /** Detection-threshold window modes (SYSTEM__INTERRUPT_CONFIG_GPIO). */
57
+ export declare const WINDOW_BELOW = 0;
58
+ export declare const WINDOW_ABOVE = 1;
59
+ export declare const WINDOW_OUT = 2;
60
+ export declare const WINDOW_IN = 3;
61
+ /** The configuration blob spans 0x2D..0x87 on every part of the die. */
62
+ export declare const CONFIG_ADDR = 45;
63
+ export declare const CONFIG_END = 135;
64
+ /** Byte 0 of the blob: Fast Mode Plus on the sensor pad, set unconditionally. */
65
+ export declare const CONFIG_FMP_BYTE = 18;
66
+ /** The block the MCU streams: RESULT__RANGE_STATUS .. 0x0099. */
67
+ export declare const RESULT_BLOCK_ADDR = 137;
68
+ export declare const RESULT_BLOCK_LEN = 17;
69
+ /** How this die releases its interrupt: a single write. */
70
+ export declare const DIE_CLEAR_STEPS: ReadonlyArray<readonly [number, number]>;
71
+ /** GetResult() raw status → ULD status (status_rtn[24] in VL53L4CD_api.c). */
72
+ export declare const STATUS_RTN: readonly number[];
73
+ /** UM2931, "Range status description". */
74
+ export declare const DIE_RANGE_STATUS_NAMES: Readonly<Record<number, string>>;
75
+ export declare function dieStatusText(status: number): string;
76
+ /** VL53L4CD_ResultsData_t (plus the sensor's own frame counter). */
77
+ export interface DieResultsData {
78
+ rangeStatus: number;
79
+ distanceMm: number;
80
+ ambientRateKcps: number;
81
+ ambientPerSpadKcps: number;
82
+ signalRateKcps: number;
83
+ signalPerSpadKcps: number;
84
+ numberOfSpad: number;
85
+ sigmaMm: number;
86
+ streamCount: number;
87
+ }
88
+ /**
89
+ * Decode the 17-byte block as a ULD of this die reads it. `signalAt` is the
90
+ * offset of the signal rate (5 = 0x008E for the VL53L4CD ULD, 15 = 0x0098 for
91
+ * the VL53L1X ULD) and `perSpadK` the per-SPAD scale (256 / 25).
92
+ */
93
+ export declare function parseDieBlock(raw: Uint8Array, signalAt: number, perSpadK: number): DieResultsData;
94
+ /** ResultsData → the family-wide Measurement every caller speaks. */
95
+ export declare function dieAsMeasurement(r: DieResultsData): Measurement;
96
+ /**
97
+ * The body every driver of this die shares: identity, boot, the ranging
98
+ * loop, the interrupt, the threshold, offset, crosstalk and ROI registers.
99
+ * A concrete product supplies `CONFIGURATION`, `SUPPORTS` and its own hooks.
100
+ */
101
+ export declare abstract class VL53L1Die extends SensorDriver {
102
+ static readonly ADDR_WIDTH: number;
103
+ static readonly CLEAR_STEPS: ReadonlyArray<readonly [number, number]>;
104
+ /** With Fast Mode Plus on the sensor pad. */
105
+ static readonly MAX_KHZ: number;
106
+ /** The 91-byte blob written at CONFIG_ADDR, product-specific. */
107
+ protected abstract readonly CONFIGURATION: Uint8Array;
108
+ /** What StopRanging writes: the L4CD ULD 0x80, the L3CX ULP / L1X ULD 0x00. */
109
+ protected readonly STOP_MODE: number;
110
+ /** Signal-rate offset in the block: 5 (0x008E, L4CD ULD) or 15 (0x0098, L1X ULD). */
111
+ protected readonly SIGNAL_AT: number;
112
+ /** Per-SPAD scale: 256 (L4CD ULD) or 25 (L1X ULD, 200.0/8). */
113
+ protected readonly PER_SPAD_K: number;
114
+ streamBlock(): [number, number];
115
+ parseResultBlock(raw: Uint8Array): DieResultsData;
116
+ decode(raw: Uint8Array): Measurement;
117
+ /** One block read instead of the C driver's six register reads. */
118
+ getResult(): Promise<DieResultsData>;
119
+ readMeasurement(): Promise<Measurement>;
120
+ modelId(): Promise<number>;
121
+ /** The bridge always addresses 0x29, so this makes the sensor unreachable. */
122
+ setI2cAddress(newAddress: number): Promise<void>;
123
+ bootState(): Promise<number>;
124
+ waitBoot(timeoutS?: number): Promise<void>;
125
+ /**
126
+ * Pull the die through its soft reset (VL53L1_software_reset()); a part that
127
+ * stopped ACKing is reset through XSHUT instead.
128
+ */
129
+ resetDevice(timeoutS?: number): Promise<void>;
130
+ /** Initialise the sensor and leave the bus at this die's ceiling. */
131
+ sensorInit(): Promise<void>;
132
+ /** How a part gets to a booted die (the VL53L1X ULD resets first). */
133
+ protected initBoot(): Promise<void>;
134
+ /** Writes right after the blob, before VHV (only the L1X ULD has one). */
135
+ protected initAfterConfig(): Promise<void>;
136
+ /** Writes at the end of init, before the timing is set. */
137
+ protected initExtra(): Promise<void>;
138
+ clearInterrupt(): Promise<void>;
139
+ startRanging(): Promise<void>;
140
+ stopRanging(): Promise<void>;
141
+ getInterruptPolarity(): Promise<number>;
142
+ setInterruptPolarity(polarity: number): Promise<void>;
143
+ checkForDataReady(): Promise<boolean>;
144
+ setRangeTiming(timingBudgetMs: number, interMeasurementMs: number): Promise<void>;
145
+ /** → [timingBudgetMs, interMeasurementMs]. */
146
+ getRangeTiming(): Promise<[number, number]>;
147
+ setDetectionThresholds(distanceLowMm: number, distanceHighMm: number, window: number): Promise<void>;
148
+ /** → [distanceLowMm, distanceHighMm, window]. */
149
+ getDetectionThresholds(): Promise<[number, number, number]>;
150
+ setSignalThreshold(signalKcps: number): Promise<void>;
151
+ getSignalThreshold(): Promise<number>;
152
+ setSigmaThreshold(sigmaMm: number): Promise<void>;
153
+ getSigmaThreshold(): Promise<number>;
154
+ setOffset(offsetMm: number): Promise<void>;
155
+ getOffset(): Promise<number>;
156
+ setXtalk(xtalkKcps: number): Promise<void>;
157
+ getXtalk(): Promise<number>;
158
+ /** An X by Y window of SPADs, 4..16 each way. */
159
+ setRoi(x: number, y: number): Promise<void>;
160
+ /** → [x, y]. */
161
+ getRoi(): Promise<[number, number]>;
162
+ setRoiCenter(centerSpad: number): Promise<void>;
163
+ getRoiCenter(): Promise<number>;
164
+ /** Recommended after a >8 °C ambient change. */
165
+ startTemperatureUpdate(): Promise<void>;
166
+ /**
167
+ * The ranging loop every calibration shares: data-ready, GetResult,
168
+ * ClearInterrupt, `nbSamples` times.
169
+ */
170
+ protected collect(nbSamples: number, onSample: (i: number, r: DieResultsData) => void, timeoutS?: number): Promise<void>;
171
+ }
172
+ //# sourceMappingURL=vl53l1-die.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vl53l1-die.d.ts","sourceRoot":"","sources":["../../../../src/sensors/vl53lx/uld/vl53l1-die.ts"],"names":[],"mappings":"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"}