@depz/sensor-sdk 0.4.2 → 0.6.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 (71) hide show
  1. package/README.md +10 -7
  2. package/dist/dataset.d.ts.map +1 -1
  3. package/dist/dataset.js +15 -7
  4. package/dist/dataset.js.map +1 -1
  5. package/dist/discovery.d.ts.map +1 -1
  6. package/dist/discovery.js +3 -0
  7. package/dist/discovery.js.map +1 -1
  8. package/dist/index.d.ts +7 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +7 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/protocol/common.d.ts +6 -4
  13. package/dist/protocol/common.d.ts.map +1 -1
  14. package/dist/protocol/common.js +6 -4
  15. package/dist/protocol/common.js.map +1 -1
  16. package/dist/protocol/identity.d.ts +1 -1
  17. package/dist/protocol/identity.d.ts.map +1 -1
  18. package/dist/protocol/identity.js +1 -0
  19. package/dist/protocol/identity.js.map +1 -1
  20. package/dist/protocol/tmf8829.d.ts +113 -0
  21. package/dist/protocol/tmf8829.d.ts.map +1 -0
  22. package/dist/protocol/tmf8829.js +195 -0
  23. package/dist/protocol/tmf8829.js.map +1 -0
  24. package/dist/protocol/usb-ids.d.ts.map +1 -1
  25. package/dist/protocol/usb-ids.js +1 -0
  26. package/dist/protocol/usb-ids.js.map +1 -1
  27. package/dist/sensors/bno055/bno055.d.ts +8 -0
  28. package/dist/sensors/bno055/bno055.d.ts.map +1 -1
  29. package/dist/sensors/bno055/bno055.js +33 -2
  30. package/dist/sensors/bno055/bno055.js.map +1 -1
  31. package/dist/sensors/bno086/bno086.d.ts +27 -1
  32. package/dist/sensors/bno086/bno086.d.ts.map +1 -1
  33. package/dist/sensors/bno086/bno086.js +32 -2
  34. package/dist/sensors/bno086/bno086.js.map +1 -1
  35. package/dist/sensors/bno086/sh2.d.ts +14 -0
  36. package/dist/sensors/bno086/sh2.d.ts.map +1 -1
  37. package/dist/sensors/bno086/sh2.js +15 -0
  38. package/dist/sensors/bno086/sh2.js.map +1 -1
  39. package/dist/sensors/bno086/shtp.d.ts +12 -0
  40. package/dist/sensors/bno086/shtp.d.ts.map +1 -1
  41. package/dist/sensors/bno086/shtp.js +13 -0
  42. package/dist/sensors/bno086/shtp.js.map +1 -1
  43. package/dist/sensors/tmf8829/builder.d.ts +61 -0
  44. package/dist/sensors/tmf8829/builder.d.ts.map +1 -0
  45. package/dist/sensors/tmf8829/builder.js +175 -0
  46. package/dist/sensors/tmf8829/builder.js.map +1 -0
  47. package/dist/sensors/tmf8829/clock.d.ts +76 -0
  48. package/dist/sensors/tmf8829/clock.d.ts.map +1 -0
  49. package/dist/sensors/tmf8829/clock.js +166 -0
  50. package/dist/sensors/tmf8829/clock.js.map +1 -0
  51. package/dist/sensors/tmf8829/config.d.ts +22 -0
  52. package/dist/sensors/tmf8829/config.d.ts.map +1 -0
  53. package/dist/sensors/tmf8829/config.js +82 -0
  54. package/dist/sensors/tmf8829/config.js.map +1 -0
  55. package/dist/sensors/tmf8829/firmware-asset.d.ts +3 -0
  56. package/dist/sensors/tmf8829/firmware-asset.d.ts.map +1 -0
  57. package/dist/sensors/tmf8829/firmware-asset.js +7 -0
  58. package/dist/sensors/tmf8829/firmware-asset.js.map +1 -0
  59. package/dist/sensors/tmf8829/firmware-license.d.ts +3 -0
  60. package/dist/sensors/tmf8829/firmware-license.d.ts.map +1 -0
  61. package/dist/sensors/tmf8829/firmware-license.js +5 -0
  62. package/dist/sensors/tmf8829/firmware-license.js.map +1 -0
  63. package/dist/sensors/tmf8829/frames.d.ts +79 -0
  64. package/dist/sensors/tmf8829/frames.d.ts.map +1 -0
  65. package/dist/sensors/tmf8829/frames.js +190 -0
  66. package/dist/sensors/tmf8829/frames.js.map +1 -0
  67. package/dist/sensors/tmf8829/tmf8829.d.ts +144 -0
  68. package/dist/sensors/tmf8829/tmf8829.d.ts.map +1 -0
  69. package/dist/sensors/tmf8829/tmf8829.js +473 -0
  70. package/dist/sensors/tmf8829/tmf8829.js.map +1 -0
  71. package/package.json +1 -1
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Sensor clock model and frame capture time (contracts/14_SENSOR_TMF8829.md §5).
3
+ * Mirrors the Python reference `depz_sensor_sdk.tmf8829.clock`; the vectors in
4
+ * `contracts/vectors/tmf8829_frame_time.json` pin it bit for bit.
5
+ *
6
+ * Plain numbers, not bigint: every intermediate stays below 2^53 (µs values
7
+ * ~2^31, `span << 16` ~2^37, tick × ratio ~2^51), so `Math.floor(a / b)` is
8
+ * exact. `>>` in JS is 32-bit, so the Q16 shifts are divisions by 65536.
9
+ */
10
+ export declare const TMF8829_NOMINAL_Q16: number;
11
+ /** Clock ratio not measured yet (nominal 8 µs/tick used). */
12
+ export declare const TMF8829_FT_NOMINAL = 1;
13
+ /** Clock model restarted at this frame (SYSTICK jump). */
14
+ export declare const TMF8829_FT_CLOCK_RESET = 2;
15
+ /** INT edge > 2 ms later after t1 than usual in this stream. */
16
+ export declare const TMF8829_FT_EDGE_LATE = 4;
17
+ /** Sub-integrations not back to back (histogram FIFO wait). */
18
+ export declare const TMF8829_FT_STALLED = 8;
19
+ /** Histograms + 32x32/48x32: T1 may be too long, centre late. */
20
+ export declare const TMF8829_FT_T1_UNSURE = 16;
21
+ export declare const TMF8829_FT_NAMES: ReadonlyArray<[number, string]>;
22
+ export declare function tmf8829FlagNames(flags: number): string[];
23
+ /**
24
+ * Sensor SYSTICK (125 kHz) → MCU µs, fed one clock pair per frame. The ratio
25
+ * is taken over a sliding 1..2 s window, first after 200 ms; it is also the
26
+ * distance correction.
27
+ */
28
+ export declare class Tmf8829SensorClock {
29
+ ratioQ16: number;
30
+ nominal: boolean;
31
+ private valid;
32
+ private last;
33
+ private anchor;
34
+ private mid;
35
+ reset(): void;
36
+ /** MCU/sensor clock ratio (≈ 1.015): distances are scaled by it. */
37
+ get ratio(): number;
38
+ private static stepOk;
39
+ /** Add a pair → TMF8829_FT_CLOCK_RESET if it does not fit the model, else 0. */
40
+ add(us: number, tick: number): number;
41
+ /** SYSTICK `tick` → MCU µs through the pair (pairUs, pairTick). */
42
+ toUs(pairUs: number, pairTick: number, tick: number): number;
43
+ }
44
+ /** Capture time of one results frame, MCU µs. */
45
+ export interface Tmf8829FrameTime {
46
+ /** Centre of the capture window. */
47
+ timestampUs: number;
48
+ /** TMF8829_FT_* */
49
+ flags: number;
50
+ /** Sub-integration length used. */
51
+ t1LenUs: number;
52
+ t0Us: number;
53
+ t1Us: number;
54
+ /** INT edge credited to the frame, 0 = none. */
55
+ edgeUs: number;
56
+ /** MCU time of the header read (the clock pair). */
57
+ pairUs: number;
58
+ /** Clock ratio after this frame. */
59
+ ratioQ16: number;
60
+ }
61
+ /**
62
+ * When a results frame was captured: the centre of [t0, t1 + T1], T1 the
63
+ * stream's shortest (t1 − t0)/(N − 1).
64
+ */
65
+ export declare class Tmf8829CaptureTimer {
66
+ readonly clock: Tmf8829SensorClock;
67
+ private lagMin;
68
+ private histSeen;
69
+ private subMin;
70
+ constructor(clock: Tmf8829SensorClock);
71
+ reset(): void;
72
+ /** A histogram frame was seen in the stream. */
73
+ histograms(): void;
74
+ results(fpMode: number, systick: number, t0Tick: number, t1Tick: number, pairUs: number, edgeUs: number, flagsIn: number): Tmf8829FrameTime;
75
+ }
76
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../../src/sensors/tmf8829/clock.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,mBAAmB,QAAY,CAAC;AAK7C,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,IAAO,CAAC;AACvC,0DAA0D;AAC1D,eAAO,MAAM,sBAAsB,IAAO,CAAC;AAC3C,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,IAAO,CAAC;AACzC,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,IAAO,CAAC;AACvC,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,KAAO,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAM5D,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD;AAcD;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,QAAQ,SAAuB;IAC/B,OAAO,UAAQ;IACf,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,GAAG,CAAiC;IAE5C,KAAK,IAAI,IAAI;IASb,oEAAoE;IACpE,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,OAAO,CAAC,MAAM,CAAC,MAAM;IAMrB,gFAAgF;IAChF,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IA6BrC,mEAAmE;IACnE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;CAG7D;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAKlB,QAAQ,CAAC,KAAK,EAAE,kBAAkB;IAJ9C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAK;gBAEE,KAAK,EAAE,kBAAkB;IAE9C,KAAK,IAAI,IAAI;IAMb,gDAAgD;IAChD,UAAU,IAAI,IAAI;IAIlB,OAAO,CACL,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,gBAAgB;CAkCpB"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Sensor clock model and frame capture time (contracts/14_SENSOR_TMF8829.md §5).
3
+ * Mirrors the Python reference `depz_sensor_sdk.tmf8829.clock`; the vectors in
4
+ * `contracts/vectors/tmf8829_frame_time.json` pin it bit for bit.
5
+ *
6
+ * Plain numbers, not bigint: every intermediate stays below 2^53 (µs values
7
+ * ~2^31, `span << 16` ~2^37, tick × ratio ~2^51), so `Math.floor(a / b)` is
8
+ * exact. `>>` in JS is 32-bit, so the Q16 shifts are divisions by 65536.
9
+ */
10
+ export const TMF8829_NOMINAL_Q16 = 8 * 65536;
11
+ const CLOCK_WINDOW_MIN_US = 200_000;
12
+ const CLOCK_WINDOW_SLIDE_US = 1_000_000;
13
+ const EDGE_LATE_US = 2000;
14
+ /** Clock ratio not measured yet (nominal 8 µs/tick used). */
15
+ export const TMF8829_FT_NOMINAL = 0x01;
16
+ /** Clock model restarted at this frame (SYSTICK jump). */
17
+ export const TMF8829_FT_CLOCK_RESET = 0x02;
18
+ /** INT edge > 2 ms later after t1 than usual in this stream. */
19
+ export const TMF8829_FT_EDGE_LATE = 0x04;
20
+ /** Sub-integrations not back to back (histogram FIFO wait). */
21
+ export const TMF8829_FT_STALLED = 0x08;
22
+ /** Histograms + 32x32/48x32: T1 may be too long, centre late. */
23
+ export const TMF8829_FT_T1_UNSURE = 0x10;
24
+ export const TMF8829_FT_NAMES = [
25
+ [TMF8829_FT_NOMINAL, "nominal"],
26
+ [TMF8829_FT_CLOCK_RESET, "clock_reset"],
27
+ [TMF8829_FT_EDGE_LATE, "edge_late"],
28
+ [TMF8829_FT_STALLED, "stalled"],
29
+ [TMF8829_FT_T1_UNSURE, "t1_unsure"],
30
+ ];
31
+ export function tmf8829FlagNames(flags) {
32
+ return TMF8829_FT_NAMES.filter(([bit]) => flags & bit).map(([, name]) => name);
33
+ }
34
+ /** Sub-integrations per results frame by fp_mode. */
35
+ const FP_SUBINTS = { 0: 2, 1: 2, 2: 2, 3: 4, 4: 4, 5: 6 };
36
+ const TWO32 = 2 ** 32;
37
+ const u32 = (x) => ((x % TWO32) + TWO32) % TWO32;
38
+ const s32 = (x) => {
39
+ const u = u32(x);
40
+ return u >= 2 ** 31 ? u - TWO32 : u;
41
+ };
42
+ /** Arithmetic `>> 16` for values beyond 32 bits. */
43
+ const shr16 = (x) => Math.floor(x / 65536);
44
+ /**
45
+ * Sensor SYSTICK (125 kHz) → MCU µs, fed one clock pair per frame. The ratio
46
+ * is taken over a sliding 1..2 s window, first after 200 ms; it is also the
47
+ * distance correction.
48
+ */
49
+ export class Tmf8829SensorClock {
50
+ ratioQ16 = TMF8829_NOMINAL_Q16;
51
+ nominal = true;
52
+ valid = false;
53
+ last = [0, 0];
54
+ anchor = [0, 0];
55
+ mid = null;
56
+ reset() {
57
+ this.valid = false;
58
+ this.last = [0, 0];
59
+ this.anchor = [0, 0];
60
+ this.mid = null;
61
+ this.ratioQ16 = TMF8829_NOMINAL_Q16;
62
+ this.nominal = true;
63
+ }
64
+ /** MCU/sensor clock ratio (≈ 1.015): distances are scaled by it. */
65
+ get ratio() {
66
+ return this.ratioQ16 / TMF8829_NOMINAL_Q16;
67
+ }
68
+ static stepOk(dUs, dTick) {
69
+ const expect = dTick * 8;
70
+ const tol = Math.floor(dUs / 10) + 50;
71
+ return expect + tol >= dUs && expect <= dUs + tol;
72
+ }
73
+ /** Add a pair → TMF8829_FT_CLOCK_RESET if it does not fit the model, else 0. */
74
+ add(us, tick) {
75
+ let flags = 0;
76
+ if (this.valid && !Tmf8829SensorClock.stepOk(us - this.last[0], u32(tick - this.last[1]))) {
77
+ this.valid = false;
78
+ flags = TMF8829_FT_CLOCK_RESET;
79
+ }
80
+ this.last = [us, tick];
81
+ if (!this.valid) {
82
+ this.valid = true;
83
+ this.anchor = this.last;
84
+ this.mid = null;
85
+ this.ratioQ16 = TMF8829_NOMINAL_Q16;
86
+ this.nominal = true;
87
+ return flags;
88
+ }
89
+ const span = us - this.anchor[0];
90
+ if (span >= CLOCK_WINDOW_MIN_US) {
91
+ this.ratioQ16 = u32(Math.floor((span * 65536) / u32(tick - this.anchor[1])));
92
+ this.nominal = false;
93
+ }
94
+ if (this.mid === null && span >= CLOCK_WINDOW_SLIDE_US) {
95
+ this.mid = this.last;
96
+ }
97
+ else if (this.mid !== null && span >= 2 * CLOCK_WINDOW_SLIDE_US) {
98
+ this.anchor = this.mid;
99
+ this.mid = null;
100
+ }
101
+ return flags;
102
+ }
103
+ /** SYSTICK `tick` → MCU µs through the pair (pairUs, pairTick). */
104
+ toUs(pairUs, pairTick, tick) {
105
+ return pairUs + shr16(s32(tick - pairTick) * this.ratioQ16);
106
+ }
107
+ }
108
+ /**
109
+ * When a results frame was captured: the centre of [t0, t1 + T1], T1 the
110
+ * stream's shortest (t1 − t0)/(N − 1).
111
+ */
112
+ export class Tmf8829CaptureTimer {
113
+ clock;
114
+ lagMin = null;
115
+ histSeen = false;
116
+ subMin = 0;
117
+ constructor(clock) {
118
+ this.clock = clock;
119
+ }
120
+ reset() {
121
+ this.lagMin = null;
122
+ this.histSeen = false;
123
+ this.subMin = 0;
124
+ }
125
+ /** A histogram frame was seen in the stream. */
126
+ histograms() {
127
+ this.histSeen = true;
128
+ }
129
+ results(fpMode, systick, t0Tick, t1Tick, pairUs, edgeUs, flagsIn) {
130
+ const c = this.clock;
131
+ let flags = flagsIn;
132
+ if (c.nominal)
133
+ flags |= TMF8829_FT_NOMINAL;
134
+ const t0 = c.toUs(pairUs, systick, t0Tick);
135
+ const t1 = c.toUs(pairUs, systick, t1Tick);
136
+ if (edgeUs && !this.histSeen) {
137
+ const lag = edgeUs - t1;
138
+ if (lag <= 0 || (this.lagMin !== null && lag > this.lagMin + EDGE_LATE_US)) {
139
+ flags |= TMF8829_FT_EDGE_LATE;
140
+ }
141
+ else if (this.lagMin === null || lag < this.lagMin) {
142
+ this.lagMin = lag;
143
+ }
144
+ }
145
+ const n1 = (FP_SUBINTS[fpMode] ?? 2) - 1;
146
+ const sub = Math.floor(u32(t1Tick - t0Tick) / n1);
147
+ if (!this.subMin || sub < this.subMin)
148
+ this.subMin = sub;
149
+ if (sub > this.subMin + 1)
150
+ flags |= TMF8829_FT_STALLED;
151
+ if (this.histSeen && n1 > 1)
152
+ flags |= TMF8829_FT_T1_UNSURE;
153
+ const t1Len = u32(shr16(this.subMin * c.ratioQ16));
154
+ return {
155
+ timestampUs: Math.floor((t0 + t1 + t1Len) / 2),
156
+ flags,
157
+ t1LenUs: t1Len,
158
+ t0Us: t0,
159
+ t1Us: t1,
160
+ edgeUs,
161
+ pairUs,
162
+ ratioQ16: c.ratioQ16,
163
+ };
164
+ }
165
+ }
166
+ //# sourceMappingURL=clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../../src/sensors/tmf8829/clock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * TMF8829 presets and config-page fields (contracts/14_SENSOR_TMF8829.md §4).
3
+ * Mirrors the Python reference `depz_sensor_sdk.tmf8829.config`.
4
+ */
5
+ /** Config page 0x22..0xDF. */
6
+ export declare const TMF8829_REG_CFG = 34;
7
+ export declare const TMF8829_CFG_SIZE: number;
8
+ export type Tmf8829Preset = "8x8" | "8x8-lr" | "8x8-ha" | "16x16" | "16x16-ha" | "32x32" | "32x32-ha" | "48x32" | "48x32-ha" | "8x8-xr";
9
+ /** Preset → load command (each loads its config page). */
10
+ export declare const TMF8829_PRESETS: Readonly<Record<Tmf8829Preset, number>>;
11
+ /** The preset's own kilo_iterations (a preset rescales a stale value, it does not reset it). */
12
+ export declare const TMF8829_PRESET_KILO_ITERATIONS: Readonly<Record<Tmf8829Preset, number>>;
13
+ /** The sensor's own period after init(). */
14
+ export declare const TMF8829_DEFAULT_PERIOD_MS = 33;
15
+ export type Tmf8829CfgField = "period_ms" | "kilo_iterations" | "fp_mode" | "nr_peaks" | "signal_strength" | "noise_strength" | "xtalk" | "dump_histograms" | "ref_spad_frame" | "power_modes" | "ha_kilo_iterations" | "dual_mode" | "fov_correction" | "distance_in_mm";
16
+ /** Field → [register, bit shift, width in bits]; width 16 = little-endian register pair. */
17
+ export declare const TMF8829_CFG_FIELDS: Readonly<Record<Tmf8829CfgField, readonly [number, number, number]>>;
18
+ export declare function tmf8829CfgGet(page: Uint8Array, name: Tmf8829CfgField): number;
19
+ export declare function tmf8829CfgSet(page: Uint8Array, name: Tmf8829CfgField, value: number): void;
20
+ /** Every named field of a config page. */
21
+ export declare function tmf8829ConfigFields(page: Uint8Array): Record<Tmf8829CfgField, number>;
22
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/sensors/tmf8829/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,8BAA8B;AAC9B,eAAO,MAAM,eAAe,KAAO,CAAC;AACpC,eAAO,MAAM,gBAAgB,QAA6B,CAAC;AAE3D,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,UAAU,GACV,OAAO,GACP,UAAU,GACV,OAAO,GACP,UAAU,GACV,QAAQ,CAAC;AAEb,0DAA0D;AAC1D,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAWnE,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAWlF,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,iBAAiB,GACjB,SAAS,GACT,UAAU,GACV,iBAAiB,GACjB,gBAAgB,GAChB,OAAO,GACP,iBAAiB,GACjB,gBAAgB,GAChB,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,gBAAgB,GAChB,gBAAgB,CAAC;AAErB,4FAA4F;AAC5F,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAenG,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM,CAK7E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAa1F;AAED,0CAA0C;AAC1C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAIrF"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * TMF8829 presets and config-page fields (contracts/14_SENSOR_TMF8829.md §4).
3
+ * Mirrors the Python reference `depz_sensor_sdk.tmf8829.config`.
4
+ */
5
+ /** Config page 0x22..0xDF. */
6
+ export const TMF8829_REG_CFG = 0x22;
7
+ export const TMF8829_CFG_SIZE = 0xdf - TMF8829_REG_CFG + 1;
8
+ /** Preset → load command (each loads its config page). */
9
+ export const TMF8829_PRESETS = {
10
+ "8x8": 0x40,
11
+ "8x8-lr": 0x41, // long range
12
+ "8x8-ha": 0x42, // high accuracy
13
+ "16x16": 0x43,
14
+ "16x16-ha": 0x44,
15
+ "32x32": 0x45,
16
+ "32x32-ha": 0x46,
17
+ "48x32": 0x47,
18
+ "48x32-ha": 0x48,
19
+ "8x8-xr": 0x49, // extended range, distances in mm
20
+ };
21
+ /** The preset's own kilo_iterations (a preset rescales a stale value, it does not reset it). */
22
+ export const TMF8829_PRESET_KILO_ITERATIONS = {
23
+ "8x8": 586,
24
+ "8x8-lr": 586,
25
+ "8x8-ha": 586,
26
+ "8x8-xr": 586,
27
+ "16x16": 586,
28
+ "16x16-ha": 586,
29
+ "32x32": 2344,
30
+ "32x32-ha": 2344,
31
+ "48x32": 3516,
32
+ "48x32-ha": 3516,
33
+ };
34
+ /** The sensor's own period after init(). */
35
+ export const TMF8829_DEFAULT_PERIOD_MS = 33;
36
+ /** Field → [register, bit shift, width in bits]; width 16 = little-endian register pair. */
37
+ export const TMF8829_CFG_FIELDS = {
38
+ period_ms: [0x22, 0, 16],
39
+ kilo_iterations: [0x24, 0, 16],
40
+ fp_mode: [0x26, 0, 3],
41
+ nr_peaks: [0x2a, 0, 3],
42
+ signal_strength: [0x2a, 3, 1],
43
+ noise_strength: [0x2a, 4, 1],
44
+ xtalk: [0x2a, 5, 1],
45
+ dump_histograms: [0x2b, 0, 1],
46
+ ref_spad_frame: [0x2c, 0, 1],
47
+ power_modes: [0x2e, 0, 8],
48
+ ha_kilo_iterations: [0x4a, 0, 16],
49
+ dual_mode: [0x4c, 0, 2],
50
+ fov_correction: [0x78, 0, 4],
51
+ distance_in_mm: [0x8f, 0, 1],
52
+ };
53
+ export function tmf8829CfgGet(page, name) {
54
+ const [reg, shift, width] = TMF8829_CFG_FIELDS[name];
55
+ const i = reg - TMF8829_REG_CFG;
56
+ if (width === 16)
57
+ return page[i] | (page[i + 1] << 8);
58
+ return (page[i] >> shift) & ((1 << width) - 1);
59
+ }
60
+ export function tmf8829CfgSet(page, name, value) {
61
+ const [reg, shift, width] = TMF8829_CFG_FIELDS[name];
62
+ const i = reg - TMF8829_REG_CFG;
63
+ if (!Number.isInteger(value) || value < 0 || value >= 2 ** width) {
64
+ throw new RangeError(`${name}: ${value} out of range for ${width} bit`);
65
+ }
66
+ if (width === 16) {
67
+ page[i] = value & 0xff;
68
+ page[i + 1] = value >> 8;
69
+ }
70
+ else {
71
+ const mask = ((1 << width) - 1) << shift;
72
+ page[i] = (page[i] & ~mask) | (value << shift);
73
+ }
74
+ }
75
+ /** Every named field of a config page. */
76
+ export function tmf8829ConfigFields(page) {
77
+ const out = {};
78
+ for (const name of Object.keys(TMF8829_CFG_FIELDS))
79
+ out[name] = tmf8829CfgGet(page, name);
80
+ return out;
81
+ }
82
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/sensors/tmf8829/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,eAAe,GAAG,CAAC,CAAC;AAc3D,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAA4C;IACtE,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI,EAAE,aAAa;IAC7B,QAAQ,EAAE,IAAI,EAAE,gBAAgB;IAChC,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI,EAAE,kCAAkC;CACnD,CAAC;AAEF,gGAAgG;AAChG,MAAM,CAAC,MAAM,8BAA8B,GAA4C;IACrF,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAkB5C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,kBAAkB,GAAyE;IACtG,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IACxB,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACtB,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACnB,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IACjC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACvB,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5B,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,IAAqB;IACnE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,GAAG,GAAG,eAAe,CAAC;IAChC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,IAAqB,EAAE,KAAa;IAClF,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,GAAG,GAAG,eAAe,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACjE,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,KAAK,KAAK,qBAAqB,KAAK,MAAM,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,MAAM,GAAG,GAAG,EAAqC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAsB;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/G,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** tmf8829_application.bin (14444 bytes, sha256 973c89b72403a002a76a21647e7ccfaba1a8c3850117faea6f4875b9338a20f8) */
2
+ export declare const tmf8829FirmwareB64 = "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";
3
+ //# sourceMappingURL=firmware-asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firmware-asset.d.ts","sourceRoot":"","sources":["../../../src/sensors/tmf8829/firmware-asset.ts"],"names":[],"mappings":"AAKA,qHAAqH;AACrH,eAAO,MAAM,kBAAkB,i0lBACiylB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // GENERATED by scripts/gen-tmf8829-assets.mjs from
2
+ // packages/depz-sensor-sdk-python/depz_sensor_sdk/tmf8829/data/tmf8829_application.bin — do not edit.
3
+ // ams-OSRAM TMF8829 application 2.200.0, MIT — license text in firmware-license.ts.
4
+ /* eslint-disable */
5
+ /** tmf8829_application.bin (14444 bytes, sha256 973c89b72403a002a76a21647e7ccfaba1a8c3850117faea6f4875b9338a20f8) */
6
+ export const tmf8829FirmwareB64 = "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";
7
+ //# sourceMappingURL=firmware-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firmware-asset.js","sourceRoot":"","sources":["../../../src/sensors/tmf8829/firmware-asset.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,sGAAsG;AACtG,oFAAoF;AACpF,oBAAoB;AAEpB,qHAAqH;AACrH,MAAM,CAAC,MAAM,kBAAkB,GAC7B,8zlBAA8zlB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The MIT license (ams-OSRAM) of the TMF8829 sensor firmware the SDK embeds. */
2
+ export declare const TMF8829_FIRMWARE_LICENSE = "Copyright (C) 2025 AMS-OSRAM\n\n The MIT License (MIT)\n Copyright \u00A9 2025 <copyright holders>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the \u201CSoftware\u201D), to deal in the Software without\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or \nsubstantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \u201CAS IS\u201D, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING \nBUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND \nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, \nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING \nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.";
3
+ //# sourceMappingURL=firmware-license.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firmware-license.d.ts","sourceRoot":"","sources":["../../../src/sensors/tmf8829/firmware-license.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,qrCAA4pC,CAAC"}
@@ -0,0 +1,5 @@
1
+ // GENERATED by scripts/gen-tmf8829-assets.mjs — do not edit.
2
+ /* eslint-disable */
3
+ /** The MIT license (ams-OSRAM) of the TMF8829 sensor firmware the SDK embeds. */
4
+ export const TMF8829_FIRMWARE_LICENSE = "Copyright (C) 2025 AMS-OSRAM\n\n The MIT License (MIT)\n Copyright © 2025 <copyright holders>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the “Software”), to deal in the Software without\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or \nsubstantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING \nBUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND \nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, \nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING \nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.";
5
+ //# sourceMappingURL=firmware-license.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firmware-license.js","sourceRoot":"","sources":["../../../src/sensors/tmf8829/firmware-license.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,oBAAoB;AAEpB,iFAAiF;AACjF,MAAM,CAAC,MAAM,wBAAwB,GAAG,ypCAAypC,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * TMF8829 frame layout and pixel decoding (contracts/14_SENSOR_TMF8829.md §3).
3
+ * Mirrors the Python reference `depz_sensor_sdk.tmf8829.frames`.
4
+ */
5
+ export declare const TMF8829_PRE_HEADER_SIZE = 5;
6
+ export declare const TMF8829_HEADER_SIZE = 16;
7
+ export declare const TMF8829_FOOTER_SIZE = 12;
8
+ /** The 21 bytes the bridge reads at 0xFA. */
9
+ export declare const TMF8829_FRAME_HEAD: number;
10
+ export declare const TMF8829_FRAME_EOF = 57591;
11
+ export declare const TMF8829_FID_MASK = 240;
12
+ export declare const TMF8829_FID_RESULTS = 16;
13
+ export declare const TMF8829_FID_HISTOGRAMS = 32;
14
+ export declare const TMF8829_FID_REF_SPAD = 48;
15
+ export declare const TMF8829_LAYOUT_PEAKS = 7;
16
+ export declare const TMF8829_LAYOUT_SIGNAL = 8;
17
+ export declare const TMF8829_LAYOUT_NOISE = 16;
18
+ export declare const TMF8829_LAYOUT_XTALK = 32;
19
+ /** 32x32/48x32: set on the second (odd-row) half-frame. */
20
+ export declare const TMF8829_LAYOUT_SUBFRAME = 64;
21
+ /** fp_mode → [rows, cols] of the full focal plane. */
22
+ export declare const TMF8829_FP_GRID: Readonly<Record<number, readonly [number, number]>>;
23
+ export declare const TMF8829_FP_NAMES: Readonly<Record<number, string>>;
24
+ /** Pre-header, header and footer of one frame (any kind). */
25
+ export interface Tmf8829FrameInfo {
26
+ fifoStatus: number;
27
+ systick: number;
28
+ id: number;
29
+ /** TMF8829_FID_RESULTS / _HISTOGRAMS / _REF_SPAD */
30
+ kind: number;
31
+ fpMode: number;
32
+ layout: number;
33
+ payload: number;
34
+ fNumber: number;
35
+ temperature: [number, number, number];
36
+ bdv: number;
37
+ refPos: [number, number];
38
+ t0Integration: number;
39
+ t1Integration: number;
40
+ frameStatus: number;
41
+ reserved: number;
42
+ eof: number;
43
+ size: number;
44
+ isSecondHalf: boolean;
45
+ distanceInMm: boolean;
46
+ }
47
+ /** Full frame size (pre-header included) from its first 21 bytes. */
48
+ export declare function tmf8829FrameSize(head: Uint8Array): number;
49
+ export declare function parseTmf8829Frame(raw: Uint8Array): Tmf8829FrameInfo;
50
+ /** What is wrong with a frame, human-readable; empty when fine. */
51
+ export declare function tmf8829FrameProblems(f: Tmf8829FrameInfo): string[];
52
+ /**
53
+ * Decoded results of one frame or of a merged measurement. Per-peak arrays
54
+ * are flat `[peak][row][col]` (row-major); noise / xtalk `[row][col]`. Raw
55
+ * sensor integers: distance in 0.25 mm (or mm with the footer flag), not yet
56
+ * clock-corrected. Absent fields are null.
57
+ */
58
+ export interface Tmf8829PixelResults {
59
+ peaks: number;
60
+ rows: number;
61
+ cols: number;
62
+ distance: Uint16Array | null;
63
+ snr: Uint8Array | null;
64
+ signal: Uint16Array | null;
65
+ noise: Uint16Array | null;
66
+ xtalk: Uint16Array | null;
67
+ }
68
+ /** [rows, cols] one results frame carries: half the rows for 32x32/48x32. */
69
+ export declare function tmf8829FrameRows(fpMode: number): [number, number];
70
+ /** Pixel results of one results frame. */
71
+ export declare function parseTmf8829Results(raw: Uint8Array, info?: Tmf8829FrameInfo): Tmf8829PixelResults;
72
+ /** 32x32/48x32: the first half-frame holds the even rows, the second the odd ones. */
73
+ export declare function mergeTmf8829Halves(first: Tmf8829PixelResults, second: Tmf8829PixelResults): Tmf8829PixelResults;
74
+ /** A raw histogram frame (25 377 B); decoding the bins is left to the caller. */
75
+ export interface Tmf8829HistogramFrame {
76
+ info: Tmf8829FrameInfo;
77
+ raw: Uint8Array;
78
+ }
79
+ //# sourceMappingURL=frames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../../src/sensors/tmf8829/frames.ts"],"names":[],"mappings":"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"}