@depz/sensor-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +69 -0
  2. package/dist/dataset.d.ts +93 -0
  3. package/dist/dataset.d.ts.map +1 -0
  4. package/dist/dataset.js +253 -0
  5. package/dist/dataset.js.map +1 -0
  6. package/dist/device/device.d.ts +185 -0
  7. package/dist/device/device.d.ts.map +1 -0
  8. package/dist/device/device.js +421 -0
  9. package/dist/device/device.js.map +1 -0
  10. package/dist/device/link.d.ts +62 -0
  11. package/dist/device/link.d.ts.map +1 -0
  12. package/dist/device/link.js +130 -0
  13. package/dist/device/link.js.map +1 -0
  14. package/dist/discovery.d.ts +109 -0
  15. package/dist/discovery.d.ts.map +1 -0
  16. package/dist/discovery.js +281 -0
  17. package/dist/discovery.js.map +1 -0
  18. package/dist/errors.d.ts +39 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +69 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +42 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +31 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/protocol/bno086.d.ts +36 -0
  27. package/dist/protocol/bno086.d.ts.map +1 -0
  28. package/dist/protocol/bno086.js +38 -0
  29. package/dist/protocol/bno086.js.map +1 -0
  30. package/dist/protocol/common.d.ts +103 -0
  31. package/dist/protocol/common.d.ts.map +1 -0
  32. package/dist/protocol/common.js +121 -0
  33. package/dist/protocol/common.js.map +1 -0
  34. package/dist/protocol/crc.d.ts +17 -0
  35. package/dist/protocol/crc.d.ts.map +1 -0
  36. package/dist/protocol/crc.js +55 -0
  37. package/dist/protocol/crc.js.map +1 -0
  38. package/dist/protocol/framing.d.ts +65 -0
  39. package/dist/protocol/framing.d.ts.map +1 -0
  40. package/dist/protocol/framing.js +152 -0
  41. package/dist/protocol/framing.js.map +1 -0
  42. package/dist/protocol/fwdepz.d.ts +21 -0
  43. package/dist/protocol/fwdepz.d.ts.map +1 -0
  44. package/dist/protocol/fwdepz.js +46 -0
  45. package/dist/protocol/fwdepz.js.map +1 -0
  46. package/dist/protocol/identity.d.ts +14 -0
  47. package/dist/protocol/identity.d.ts.map +1 -0
  48. package/dist/protocol/identity.js +28 -0
  49. package/dist/protocol/identity.js.map +1 -0
  50. package/dist/protocol/sr04.d.ts +38 -0
  51. package/dist/protocol/sr04.d.ts.map +1 -0
  52. package/dist/protocol/sr04.js +58 -0
  53. package/dist/protocol/sr04.js.map +1 -0
  54. package/dist/protocol/usb-ids.d.ts +60 -0
  55. package/dist/protocol/usb-ids.d.ts.map +1 -0
  56. package/dist/protocol/usb-ids.js +79 -0
  57. package/dist/protocol/usb-ids.js.map +1 -0
  58. package/dist/protocol/vl53l8.d.ts +59 -0
  59. package/dist/protocol/vl53l8.d.ts.map +1 -0
  60. package/dist/protocol/vl53l8.js +116 -0
  61. package/dist/protocol/vl53l8.js.map +1 -0
  62. package/dist/sensors/bno086/bno086.d.ts +197 -0
  63. package/dist/sensors/bno086/bno086.d.ts.map +1 -0
  64. package/dist/sensors/bno086/bno086.js +543 -0
  65. package/dist/sensors/bno086/bno086.js.map +1 -0
  66. package/dist/sensors/bno086/reports.d.ts +289 -0
  67. package/dist/sensors/bno086/reports.d.ts.map +1 -0
  68. package/dist/sensors/bno086/reports.js +397 -0
  69. package/dist/sensors/bno086/reports.js.map +1 -0
  70. package/dist/sensors/bno086/sh2.d.ts +307 -0
  71. package/dist/sensors/bno086/sh2.d.ts.map +1 -0
  72. package/dist/sensors/bno086/sh2.js +480 -0
  73. package/dist/sensors/bno086/sh2.js.map +1 -0
  74. package/dist/sensors/bno086/shtp.d.ts +98 -0
  75. package/dist/sensors/bno086/shtp.d.ts.map +1 -0
  76. package/dist/sensors/bno086/shtp.js +205 -0
  77. package/dist/sensors/bno086/shtp.js.map +1 -0
  78. package/dist/sensors/sr04.d.ts +65 -0
  79. package/dist/sensors/sr04.d.ts.map +1 -0
  80. package/dist/sensors/sr04.js +121 -0
  81. package/dist/sensors/sr04.js.map +1 -0
  82. package/dist/sensors/vl53l8/assets/ch.d.ts +16 -0
  83. package/dist/sensors/vl53l8/assets/ch.d.ts.map +1 -0
  84. package/dist/sensors/vl53l8/assets/ch.js +22 -0
  85. package/dist/sensors/vl53l8/assets/ch.js.map +1 -0
  86. package/dist/sensors/vl53l8/assets/cx.d.ts +16 -0
  87. package/dist/sensors/vl53l8/assets/cx.d.ts.map +1 -0
  88. package/dist/sensors/vl53l8/assets/cx.js +22 -0
  89. package/dist/sensors/vl53l8/assets/cx.js.map +1 -0
  90. package/dist/sensors/vl53l8/assets/decode.d.ts +7 -0
  91. package/dist/sensors/vl53l8/assets/decode.d.ts.map +1 -0
  92. package/dist/sensors/vl53l8/assets/decode.js +35 -0
  93. package/dist/sensors/vl53l8/assets/decode.js.map +1 -0
  94. package/dist/sensors/vl53l8/assets/index.d.ts +19 -0
  95. package/dist/sensors/vl53l8/assets/index.d.ts.map +1 -0
  96. package/dist/sensors/vl53l8/assets/index.js +11 -0
  97. package/dist/sensors/vl53l8/assets/index.js.map +1 -0
  98. package/dist/sensors/vl53l8/cnh.d.ts +113 -0
  99. package/dist/sensors/vl53l8/cnh.d.ts.map +1 -0
  100. package/dist/sensors/vl53l8/cnh.js +299 -0
  101. package/dist/sensors/vl53l8/cnh.js.map +1 -0
  102. package/dist/sensors/vl53l8/uld.d.ts +346 -0
  103. package/dist/sensors/vl53l8/uld.d.ts.map +1 -0
  104. package/dist/sensors/vl53l8/uld.js +1388 -0
  105. package/dist/sensors/vl53l8/uld.js.map +1 -0
  106. package/dist/sensors/vl53l8/vl53l8.d.ts +182 -0
  107. package/dist/sensors/vl53l8/vl53l8.d.ts.map +1 -0
  108. package/dist/sensors/vl53l8/vl53l8.js +411 -0
  109. package/dist/sensors/vl53l8/vl53l8.js.map +1 -0
  110. package/dist/transport/loopback.d.ts +18 -0
  111. package/dist/transport/loopback.d.ts.map +1 -0
  112. package/dist/transport/loopback.js +53 -0
  113. package/dist/transport/loopback.js.map +1 -0
  114. package/dist/transport/node.d.ts +51 -0
  115. package/dist/transport/node.d.ts.map +1 -0
  116. package/dist/transport/node.js +123 -0
  117. package/dist/transport/node.js.map +1 -0
  118. package/dist/transport/replay.d.ts +68 -0
  119. package/dist/transport/replay.d.ts.map +1 -0
  120. package/dist/transport/replay.js +196 -0
  121. package/dist/transport/replay.js.map +1 -0
  122. package/dist/transport/types.d.ts +23 -0
  123. package/dist/transport/types.d.ts.map +1 -0
  124. package/dist/transport/types.js +7 -0
  125. package/dist/transport/types.js.map +1 -0
  126. package/dist/transport/webserial.d.ts +69 -0
  127. package/dist/transport/webserial.d.ts.map +1 -0
  128. package/dist/transport/webserial.js +196 -0
  129. package/dist/transport/webserial.js.map +1 -0
  130. package/package.json +77 -0
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Device discovery & selection (contract 02 §4).
3
+ *
4
+ * The engine here is transport-agnostic: it takes an enumerated list of
5
+ * candidate ports plus a factory that turns a port into a (not-yet-open)
6
+ * `SerialTransport`. The Node entry (`@depz/sensor-sdk/node`) wires it to
7
+ * `serialport`; the browser entry (`@depz/sensor-sdk/web`) wires it to
8
+ * granted WebSerial ports. Both expose `openDevice` / `listDepzDevices`.
9
+ *
10
+ * Selection is by USB identity (`usb-ids.ts`) — never "first port in system
11
+ * order", which could grab an unrelated `/dev/ttyS0`. Mirrors the Python
12
+ * reference `depz_sensor_sdk.discovery`.
13
+ */
14
+ import { DepzDevice } from "./device/device.js";
15
+ import { type SensorType } from "./protocol/identity.js";
16
+ import type { SerialTransport } from "./transport/types.js";
17
+ /** One enumerated candidate port (Node: serialport.list; Web: granted port). */
18
+ export interface DepzPortInfo {
19
+ /** Stable identifier: an OS path (Node) or a synthetic id (WebSerial). */
20
+ path: string;
21
+ /**
22
+ * USB iSerial as reported by the OS — the sort/selection key. WebSerial
23
+ * cannot read this, so it is undefined there (selection falls back to
24
+ * granted-port order).
25
+ */
26
+ serialNumber?: string;
27
+ usbVid?: number;
28
+ usbPid?: number;
29
+ }
30
+ /** Result of probing a port (parity with Python `DeviceInfo`). */
31
+ export interface DeviceInfo {
32
+ path: string;
33
+ mode: "app" | "bootloader" | "unknown";
34
+ sensorType: SensorType | null;
35
+ softwareName: string;
36
+ fwVersion: string;
37
+ deviceName: string;
38
+ /** Device-reported serial (GET_SERIAL); "" when the device does not answer. */
39
+ serialNumber: string;
40
+ usbVid: number | null;
41
+ usbPid: number | null;
42
+ }
43
+ /** Turns an enumerated port into a fresh, not-yet-open transport. */
44
+ export type TransportFactory = (port: DepzPortInfo) => SerialTransport;
45
+ export interface OpenDeviceOptions {
46
+ /** Select the candidate whose USB iSerial equals this exact string. */
47
+ serial?: string;
48
+ /** Per-request timeout for the probe and the opened device (ms). */
49
+ timeoutMs?: number;
50
+ }
51
+ export interface ListOptions {
52
+ /** Probe only ports with a known DEPZ (vid,pid) (default). */
53
+ matchUsb?: boolean;
54
+ timeoutMs?: number;
55
+ }
56
+ /** `undefined` = auto; number = Nth candidate; string = port path; DeviceInfo = its port. */
57
+ export type OpenTarget = number | string | DeviceInfo | null | undefined;
58
+ /**
59
+ * Sort ports by USB iSerial ascending; empty/missing serials sort last, ties
60
+ * broken by path. Pure and deterministic — a given bench always maps the same
61
+ * serial to index 0. Exposed so the ordering rule can be golden-tested.
62
+ */
63
+ export declare function orderPortsBySerial(ports: DepzPortInfo[]): DepzPortInfo[];
64
+ export declare function isDeviceInfo(t: unknown): t is DeviceInfo;
65
+ /**
66
+ * Order *probed* devices by their DEVICE-reported serial (GET_SERIAL, i.e.
67
+ * `DeviceInfo.serialNumber`); empty serials sort last, ties broken by path.
68
+ * This is the selection key for transports that cannot read the USB iSerial
69
+ * (WebSerial), where the serial is only knowable by probing.
70
+ */
71
+ export declare function orderDevicesBySerial(infos: DeviceInfo[]): DeviceInfo[];
72
+ /**
73
+ * Open `port`, ask its identity (+ device name/serial), then close. Returns
74
+ * null when nothing DEPZ-shaped answers. Probing *opens* the port, so callers
75
+ * should restrict the port list to plausible candidates.
76
+ */
77
+ export declare function probePort(port: DepzPortInfo, factory: TransportFactory, timeoutMs?: number): Promise<DeviceInfo | null>;
78
+ /**
79
+ * Probe candidate ports and return every DEPZ device found, in selection
80
+ * order (sorted by USB iSerial). With `matchUsb` (default) only ports with a
81
+ * known DEPZ (vid,pid) are probed.
82
+ */
83
+ export declare function listDepzDevicesFrom(ports: DepzPortInfo[], factory: TransportFactory, opts?: ListOptions): Promise<DeviceInfo[]>;
84
+ /**
85
+ * Open the right sensor class for `target` (contract 02 §4).
86
+ *
87
+ * - `undefined`/`null`: the candidate with the alphabetically-smallest USB
88
+ * iSerial (or the one whose serial == `opts.serial`). No candidate → throws
89
+ * `NoDepzDeviceError` (never falls back to "first port in system").
90
+ * - `number N`: the Nth candidate, sorted by USB iSerial (0-based). Out of
91
+ * range → `NoDepzDeviceError`.
92
+ * - `string`: open exactly that port path; warns if its (vid,pid) is not a
93
+ * known DEPZ id (may be an unprogrammed unit).
94
+ * - `DeviceInfo`: opens its `.path`.
95
+ */
96
+ export declare function openDeviceFrom(ports: DepzPortInfo[], factory: TransportFactory, target?: OpenTarget, opts?: OpenDeviceOptions): Promise<DepzDevice>;
97
+ /**
98
+ * Select and open a device by its DEVICE-reported serial (GET_SERIAL), for
99
+ * transports that cannot enumerate USB iSerials (WebSerial). Probes every
100
+ * given port (open → GET_SERIAL → close), orders the answers by device
101
+ * serial, then selects — `opts.serial` picks an exact match, a numeric
102
+ * `target` picks the Nth, otherwise the smallest serial — and reopens it.
103
+ *
104
+ * The probing cost (opening each granted port once) is the price of not
105
+ * having USB iSerials up front; the *result* matches Node's serial-based
106
+ * selection because for programmed units USB iSerial == device serial.
107
+ */
108
+ export declare function openDeviceByDeviceSerial(ports: DepzPortInfo[], factory: TransportFactory, target?: number | null, opts?: OpenDeviceOptions): Promise<DepzDevice>;
109
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAK5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,eAAe,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6FAA6F;AAC7F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;AAUzE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAUxE;AAUD,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAQtE;AAID;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,gBAAgB,EACzB,SAAS,SAA2B,GACnC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA4C5B;AAID;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,gBAAgB,EACzB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,UAAU,EAAE,CAAC,CAUvB;AA0CD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,UAAU,EACnB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,UAAU,CAAC,CA4DrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,UAAU,CAAC,CAwBrB"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Device discovery & selection (contract 02 §4).
3
+ *
4
+ * The engine here is transport-agnostic: it takes an enumerated list of
5
+ * candidate ports plus a factory that turns a port into a (not-yet-open)
6
+ * `SerialTransport`. The Node entry (`@depz/sensor-sdk/node`) wires it to
7
+ * `serialport`; the browser entry (`@depz/sensor-sdk/web`) wires it to
8
+ * granted WebSerial ports. Both expose `openDevice` / `listDepzDevices`.
9
+ *
10
+ * Selection is by USB identity (`usb-ids.ts`) — never "first port in system
11
+ * order", which could grab an unrelated `/dev/ttyS0`. Mirrors the Python
12
+ * reference `depz_sensor_sdk.discovery`.
13
+ */
14
+ import { DepzDevice } from "./device/device.js";
15
+ import { DepzError, NoDepzDeviceError } from "./errors.js";
16
+ import { parseSoftwareName } from "./protocol/identity.js";
17
+ import { isKnownDepzUsb, usbModelHint } from "./protocol/usb-ids.js";
18
+ import { Bno086 } from "./sensors/bno086/bno086.js";
19
+ import { Sr04 } from "./sensors/sr04.js";
20
+ import { Vl53l8Ch, Vl53l8Cx } from "./sensors/vl53l8/vl53l8.js";
21
+ const DEFAULT_PROBE_TIMEOUT_MS = 200;
22
+ // ── selection helpers ─────────────────────────────────────────────────────────
23
+ function isKnownPort(p) {
24
+ return isKnownDepzUsb(p.usbVid, p.usbPid);
25
+ }
26
+ /**
27
+ * Sort ports by USB iSerial ascending; empty/missing serials sort last, ties
28
+ * broken by path. Pure and deterministic — a given bench always maps the same
29
+ * serial to index 0. Exposed so the ordering rule can be golden-tested.
30
+ */
31
+ export function orderPortsBySerial(ports) {
32
+ return ports.slice().sort((a, b) => {
33
+ const sa = a.serialNumber ?? "";
34
+ const sb = b.serialNumber ?? "";
35
+ const ea = sa === "" ? 1 : 0;
36
+ const eb = sb === "" ? 1 : 0;
37
+ if (ea !== eb)
38
+ return ea - eb;
39
+ if (sa !== sb)
40
+ return sa < sb ? -1 : 1;
41
+ return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;
42
+ });
43
+ }
44
+ /**
45
+ * Candidate ports (known DEPZ vid/pid) sorted by USB iSerial (index 0 = the
46
+ * one auto-select opens).
47
+ */
48
+ function sortedCandidates(ports) {
49
+ return orderPortsBySerial(ports.filter(isKnownPort));
50
+ }
51
+ export function isDeviceInfo(t) {
52
+ return typeof t === "object" && t !== null && "path" in t && "sensorType" in t;
53
+ }
54
+ /**
55
+ * Order *probed* devices by their DEVICE-reported serial (GET_SERIAL, i.e.
56
+ * `DeviceInfo.serialNumber`); empty serials sort last, ties broken by path.
57
+ * This is the selection key for transports that cannot read the USB iSerial
58
+ * (WebSerial), where the serial is only knowable by probing.
59
+ */
60
+ export function orderDevicesBySerial(infos) {
61
+ return infos.slice().sort((a, b) => {
62
+ const ea = a.serialNumber === "" ? 1 : 0;
63
+ const eb = b.serialNumber === "" ? 1 : 0;
64
+ if (ea !== eb)
65
+ return ea - eb;
66
+ if (a.serialNumber !== b.serialNumber)
67
+ return a.serialNumber < b.serialNumber ? -1 : 1;
68
+ return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;
69
+ });
70
+ }
71
+ // ── probing ───────────────────────────────────────────────────────────────────
72
+ /**
73
+ * Open `port`, ask its identity (+ device name/serial), then close. Returns
74
+ * null when nothing DEPZ-shaped answers. Probing *opens* the port, so callers
75
+ * should restrict the port list to plausible candidates.
76
+ */
77
+ export async function probePort(port, factory, timeoutMs = DEFAULT_PROBE_TIMEOUT_MS) {
78
+ const transport = factory(port);
79
+ let dev;
80
+ try {
81
+ dev = new DepzDevice(transport, { timeoutMs });
82
+ await dev.open();
83
+ }
84
+ catch {
85
+ try {
86
+ await transport.close();
87
+ }
88
+ catch {
89
+ /* already gone */
90
+ }
91
+ return null;
92
+ }
93
+ try {
94
+ const ident = parseSoftwareName(await dev.getSoftwareName());
95
+ let deviceName = "";
96
+ try {
97
+ deviceName = await dev.getDeviceName();
98
+ }
99
+ catch {
100
+ /* optional */
101
+ }
102
+ let serialNumber = "";
103
+ try {
104
+ serialNumber = await dev.getSerialNumber();
105
+ }
106
+ catch {
107
+ /* optional */
108
+ }
109
+ return {
110
+ path: port.path,
111
+ mode: ident.mode,
112
+ sensorType: ident.sensorType,
113
+ softwareName: ident.softwareName,
114
+ fwVersion: ident.version,
115
+ deviceName,
116
+ serialNumber,
117
+ usbVid: port.usbVid ?? null,
118
+ usbPid: port.usbPid ?? null,
119
+ };
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ finally {
125
+ await dev.close();
126
+ }
127
+ }
128
+ // ── list ──────────────────────────────────────────────────────────────────────
129
+ /**
130
+ * Probe candidate ports and return every DEPZ device found, in selection
131
+ * order (sorted by USB iSerial). With `matchUsb` (default) only ports with a
132
+ * known DEPZ (vid,pid) are probed.
133
+ */
134
+ export async function listDepzDevicesFrom(ports, factory, opts = {}) {
135
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS;
136
+ const matchUsb = opts.matchUsb ?? true;
137
+ const scan = matchUsb ? sortedCandidates(ports) : ports.slice();
138
+ const found = [];
139
+ for (const port of scan) {
140
+ const info = await probePort(port, factory, timeoutMs);
141
+ if (info !== null)
142
+ found.push(info);
143
+ }
144
+ return found;
145
+ }
146
+ // ── open ──────────────────────────────────────────────────────────────────────
147
+ function constructSensor(transport, sensorType, timeoutMs, port) {
148
+ switch (sensorType) {
149
+ case "sr04":
150
+ return new Sr04(transport, { timeoutMs });
151
+ case "vl53l8":
152
+ // The USB model hint distinguishes CH silicon (PID 0xED40 → 'vl53l8ch')
153
+ // from CX; the dev-default id (0x56DC) and the silicon id are
154
+ // indistinguishable, so those fall through to the CX base class.
155
+ return usbModelHint(port?.usbVid, port?.usbPid) === "vl53l8ch"
156
+ ? new Vl53l8Ch(transport, { timeoutMs })
157
+ : new Vl53l8Cx(transport, { timeoutMs });
158
+ case "bno086":
159
+ return new Bno086(transport, { timeoutMs });
160
+ default:
161
+ return new DepzDevice(transport, { timeoutMs });
162
+ }
163
+ }
164
+ async function openProbed(port, info, factory, timeoutMs) {
165
+ if (info.mode === "bootloader") {
166
+ throw new DepzError("device is in bootloader mode; use the bootloader client (contract 06)");
167
+ }
168
+ const transport = factory(port);
169
+ const dev = constructSensor(transport, info.sensorType, timeoutMs, port);
170
+ await dev.open();
171
+ return dev;
172
+ }
173
+ /**
174
+ * Open the right sensor class for `target` (contract 02 §4).
175
+ *
176
+ * - `undefined`/`null`: the candidate with the alphabetically-smallest USB
177
+ * iSerial (or the one whose serial == `opts.serial`). No candidate → throws
178
+ * `NoDepzDeviceError` (never falls back to "first port in system").
179
+ * - `number N`: the Nth candidate, sorted by USB iSerial (0-based). Out of
180
+ * range → `NoDepzDeviceError`.
181
+ * - `string`: open exactly that port path; warns if its (vid,pid) is not a
182
+ * known DEPZ id (may be an unprogrammed unit).
183
+ * - `DeviceInfo`: opens its `.path`.
184
+ */
185
+ export async function openDeviceFrom(ports, factory, target, opts = {}) {
186
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS;
187
+ // Explicit port path (string or DeviceInfo) — open exactly that port.
188
+ if (typeof target === "string" || isDeviceInfo(target)) {
189
+ const path = typeof target === "string" ? target : target.path;
190
+ const enumerated = ports.find((p) => p.path === path);
191
+ const port = enumerated ?? { path };
192
+ const info = await probePort(port, factory, timeoutMs);
193
+ if (info === null) {
194
+ throw new NoDepzDeviceError(`no DEPZ device answered on ${path}`);
195
+ }
196
+ if (!isKnownDepzUsb(port.usbVid, port.usbPid)) {
197
+ console.warn(`depz: ${path} has an unrecognized USB id ` +
198
+ `(vid=${fmtId(port.usbVid)}, pid=${fmtId(port.usbPid)}); opening anyway`);
199
+ }
200
+ if (opts.serial !== undefined && enumerated?.serialNumber !== undefined && enumerated.serialNumber !== opts.serial) {
201
+ console.warn(`depz: requested serial ${opts.serial} but ${path} enumerates as ` +
202
+ `${enumerated.serialNumber}`);
203
+ }
204
+ return openProbed(port, info, factory, timeoutMs);
205
+ }
206
+ const candidates = sortedCandidates(ports);
207
+ // Nth candidate by USB iSerial.
208
+ if (typeof target === "number") {
209
+ if (!Number.isInteger(target) || target < 0 || target >= candidates.length) {
210
+ throw new NoDepzDeviceError(`no DEPZ device at index ${target} (${candidates.length} candidate(s) found)`);
211
+ }
212
+ const port = candidates[target];
213
+ if (opts.serial !== undefined && port.serialNumber !== opts.serial) {
214
+ console.warn(`depz: index ${target} selects serial ${port.serialNumber ?? "(none)"}, ` +
215
+ `not the requested ${opts.serial}`);
216
+ }
217
+ return openIndexed(port, factory, timeoutMs);
218
+ }
219
+ // Auto: by serial, else smallest serial (index 0).
220
+ let port;
221
+ if (opts.serial !== undefined) {
222
+ port = candidates.find((p) => p.serialNumber === opts.serial);
223
+ if (port === undefined) {
224
+ throw new NoDepzDeviceError(`no DEPZ device with serial ${opts.serial}`);
225
+ }
226
+ }
227
+ else {
228
+ port = candidates[0];
229
+ if (port === undefined) {
230
+ throw new NoDepzDeviceError("no DEPZ device found (no port with a known DEPZ USB id)");
231
+ }
232
+ }
233
+ return openIndexed(port, factory, timeoutMs);
234
+ }
235
+ /**
236
+ * Select and open a device by its DEVICE-reported serial (GET_SERIAL), for
237
+ * transports that cannot enumerate USB iSerials (WebSerial). Probes every
238
+ * given port (open → GET_SERIAL → close), orders the answers by device
239
+ * serial, then selects — `opts.serial` picks an exact match, a numeric
240
+ * `target` picks the Nth, otherwise the smallest serial — and reopens it.
241
+ *
242
+ * The probing cost (opening each granted port once) is the price of not
243
+ * having USB iSerials up front; the *result* matches Node's serial-based
244
+ * selection because for programmed units USB iSerial == device serial.
245
+ */
246
+ export async function openDeviceByDeviceSerial(ports, factory, target, opts = {}) {
247
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS;
248
+ // matchUsb:false — a granted port is user-curated and may not expose a
249
+ // recognizable vid/pid; the protocol probe is the real filter.
250
+ const infos = orderDevicesBySerial(await listDepzDevicesFrom(ports, factory, { matchUsb: false, timeoutMs }));
251
+ let chosen;
252
+ if (opts.serial !== undefined) {
253
+ chosen = infos.find((d) => d.serialNumber === opts.serial);
254
+ if (chosen === undefined)
255
+ throw new NoDepzDeviceError(`no DEPZ device with serial ${opts.serial}`);
256
+ }
257
+ else if (typeof target === "number") {
258
+ if (!Number.isInteger(target) || target < 0 || target >= infos.length) {
259
+ throw new NoDepzDeviceError(`no DEPZ device at index ${target} (${infos.length} candidate(s) found)`);
260
+ }
261
+ chosen = infos[target];
262
+ }
263
+ else {
264
+ chosen = infos[0];
265
+ if (chosen === undefined)
266
+ throw new NoDepzDeviceError("no DEPZ device found");
267
+ }
268
+ const port = ports.find((p) => p.path === chosen.path) ?? { path: chosen.path };
269
+ return openProbed(port, chosen, factory, timeoutMs);
270
+ }
271
+ async function openIndexed(port, factory, timeoutMs) {
272
+ const info = await probePort(port, factory, timeoutMs);
273
+ if (info === null) {
274
+ throw new NoDepzDeviceError(`no DEPZ device answered on ${port.path}`);
275
+ }
276
+ return openProbed(port, info, factory, timeoutMs);
277
+ }
278
+ function fmtId(v) {
279
+ return v == null ? "?" : `0x${v.toString(16).toUpperCase().padStart(4, "0")}`;
280
+ }
281
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Exception hierarchy of the DEPZ sensor SDK.
3
+ * Status code names follow contracts/02_COMMON_COMMANDS.md §3.
4
+ */
5
+ /** Base class for all SDK errors. */
6
+ export declare class DepzError extends Error {
7
+ constructor(message?: string);
8
+ }
9
+ /** A request got no matching reply within the timeout. */
10
+ export declare class DepzTimeoutError extends DepzError {
11
+ readonly cmd: number;
12
+ readonly timeoutMs: number;
13
+ constructor(cmd: number, timeoutMs: number);
14
+ }
15
+ /** Device answered a request with a non-OK RPT_STATUS. */
16
+ export declare class StatusError extends DepzError {
17
+ readonly cmd: number;
18
+ readonly status: number;
19
+ readonly statusName: string;
20
+ constructor(cmd: number, status: number);
21
+ }
22
+ /** Device answered ERR_BUSY; the operation may be retried later. */
23
+ export declare class BusyError extends StatusError {
24
+ constructor(cmd: number);
25
+ }
26
+ /** The serial link dropped (unplug, reboot) while in use. */
27
+ export declare class DeviceLostError extends DepzError {
28
+ }
29
+ /** Operation attempted on a closed link/device. */
30
+ export declare class LinkClosedError extends DepzError {
31
+ }
32
+ /**
33
+ * Discovery found no DEPZ device matching the request (no candidate port by
34
+ * USB id, an out-of-range index, or a serial that nothing answered to).
35
+ * Mirrors the Python reference `NoDepzDeviceError`.
36
+ */
37
+ export declare class NoDepzDeviceError extends DepzError {
38
+ }
39
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qCAAqC;AACrC,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,CAAC,EAAE,MAAM;CAI7B;AAMD,0DAA0D;AAC1D,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAK3C;AAeD,0DAA0D;AAC1D,qBAAa,WAAY,SAAQ,SAAS;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAOxC;AAED,oEAAoE;AACpE,qBAAa,SAAU,SAAQ,WAAW;gBAC5B,GAAG,EAAE,MAAM;CAGxB;AAED,6DAA6D;AAC7D,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,mDAAmD;AACnD,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;CAAG"}
package/dist/errors.js ADDED
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Exception hierarchy of the DEPZ sensor SDK.
3
+ * Status code names follow contracts/02_COMMON_COMMANDS.md §3.
4
+ */
5
+ /** Base class for all SDK errors. */
6
+ export class DepzError extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = new.target.name;
10
+ }
11
+ }
12
+ function hex2(n) {
13
+ return n.toString(16).toUpperCase().padStart(2, "0");
14
+ }
15
+ /** A request got no matching reply within the timeout. */
16
+ export class DepzTimeoutError extends DepzError {
17
+ cmd;
18
+ timeoutMs;
19
+ constructor(cmd, timeoutMs) {
20
+ super(`no reply to cmd 0x${hex2(cmd)} within ${timeoutMs}ms`);
21
+ this.cmd = cmd;
22
+ this.timeoutMs = timeoutMs;
23
+ }
24
+ }
25
+ const STATUS_NAMES = {
26
+ 0x00: "OK",
27
+ 0x01: "ERROR",
28
+ 0x02: "ERR_INVALID_CMD",
29
+ 0x03: "ERR_PAYLOAD_FORMAT",
30
+ 0x04: "ERR_INVALID_PARAM",
31
+ 0x05: "ERR_PAYLOAD_CRC",
32
+ 0x06: "ERR_BUSY",
33
+ 0x07: "ERR_CMD_NOT_SUPPORTED",
34
+ 0x08: "ERR_NOT_INITIALIZED",
35
+ 0x09: "ERR_HARDWARE_FAULT",
36
+ };
37
+ /** Device answered a request with a non-OK RPT_STATUS. */
38
+ export class StatusError extends DepzError {
39
+ cmd;
40
+ status;
41
+ statusName;
42
+ constructor(cmd, status) {
43
+ const statusName = STATUS_NAMES[status] ?? `0x${hex2(status)}`;
44
+ super(`cmd 0x${hex2(cmd)} failed: ${statusName} (0x${hex2(status)})`);
45
+ this.cmd = cmd;
46
+ this.status = status;
47
+ this.statusName = statusName;
48
+ }
49
+ }
50
+ /** Device answered ERR_BUSY; the operation may be retried later. */
51
+ export class BusyError extends StatusError {
52
+ constructor(cmd) {
53
+ super(cmd, 0x06);
54
+ }
55
+ }
56
+ /** The serial link dropped (unplug, reboot) while in use. */
57
+ export class DeviceLostError extends DepzError {
58
+ }
59
+ /** Operation attempted on a closed link/device. */
60
+ export class LinkClosedError extends DepzError {
61
+ }
62
+ /**
63
+ * Discovery found no DEPZ device matching the request (no candidate port by
64
+ * USB id, an out-of-range index, or a serial that nothing answered to).
65
+ * Mirrors the Python reference `NoDepzDeviceError`.
66
+ */
67
+ export class NoDepzDeviceError extends DepzError {
68
+ }
69
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qCAAqC;AACrC,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAED,SAAS,IAAI,CAAC,CAAS;IACrB,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,0DAA0D;AAC1D,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IACpC,GAAG,CAAS;IACZ,SAAS,CAAS;IAE3B,YAAY,GAAW,EAAE,SAAiB;QACxC,KAAK,CAAC,qBAAqB,IAAI,CAAC,GAAG,CAAC,WAAW,SAAS,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,oBAAoB;CAC3B,CAAC;AAEF,0DAA0D;AAC1D,MAAM,OAAO,WAAY,SAAQ,SAAS;IAC/B,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,UAAU,CAAS;IAE5B,YAAY,GAAW,EAAE,MAAc;QACrC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,KAAK,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,YAAY,UAAU,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,oEAAoE;AACpE,MAAM,OAAO,SAAU,SAAQ,WAAW;IACxC,YAAY,GAAW;QACrB,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnB,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,OAAO,eAAgB,SAAQ,SAAS;CAAG;AAEjD,mDAAmD;AACnD,MAAM,OAAO,eAAgB,SAAQ,SAAS;CAAG;AAEjD;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,SAAS;CAAG"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @depz/sensor-sdk — browser-safe root export.
3
+ * Node-only pieces live in `@depz/sensor-sdk/node`.
4
+ */
5
+ export * from "./protocol/crc.js";
6
+ export * from "./protocol/framing.js";
7
+ export * from "./protocol/common.js";
8
+ export * from "./protocol/identity.js";
9
+ export * from "./protocol/sr04.js";
10
+ export * from "./protocol/vl53l8.js";
11
+ export * from "./protocol/bno086.js";
12
+ export * from "./protocol/fwdepz.js";
13
+ export * from "./protocol/usb-ids.js";
14
+ export * from "./errors.js";
15
+ export { isDeviceInfo, listDepzDevicesFrom, openDeviceByDeviceSerial, openDeviceFrom, orderDevicesBySerial, orderPortsBySerial, probePort, } from "./discovery.js";
16
+ export type { DeviceInfo, DepzPortInfo, ListOptions, OpenDeviceOptions, OpenTarget, TransportFactory, } from "./discovery.js";
17
+ export { DepzLink } from "./device/link.js";
18
+ export type { LinkStats } from "./device/link.js";
19
+ export { DEFAULT_TIMEOUT_MS, DepzDevice, NO_MATCH, StreamQueue, hostNowUs, syncTimeAll, } from "./device/device.js";
20
+ export type { DeviceEvent, DeviceOptions, Matcher, RequestOptions, TimeSync, } from "./device/device.js";
21
+ export { Sr04 } from "./sensors/sr04.js";
22
+ export type { Sr04Measurement } from "./sensors/sr04.js";
23
+ export { MIN_RANGING_FREQUENCY_HZ, Vl53l8, Vl53l8Ch, Vl53l8Cx, zoneGrid, } from "./sensors/vl53l8/vl53l8.js";
24
+ export type { Vl53l8Frame, Vl53l8InitOptions, Vl53l8Options, } from "./sensors/vl53l8/vl53l8.js";
25
+ export { CALIBRATE_XTALK, FW_CHECKSUM, GET_XTALK_CMD, MotionConfig, NB_THRESHOLDS, POWER_MODE_DEEP_SLEEP, POWER_MODE_SLEEP, POWER_MODE_WAKEUP, RANGING_MODE_AUTONOMOUS, RANGING_MODE_CONTINUOUS, RESOLUTION_4X4, RESOLUTION_8X8, TARGET_ORDER_CLOSEST, TARGET_ORDER_STRONGEST, THRESH_IN_WINDOW, THRESH_OP_AND, THRESH_OP_NONE, THRESH_OP_OR, THRESH_OUT_OF_WINDOW, VL53L8CX, Vl53l8cxError, defaultMotionConfig, motionConfigSetResolution, packDetectionThresholds, swapBuffer, xtalkMarginToRaw, } from "./sensors/vl53l8/uld.js";
26
+ export type { DetectionThreshold, MotionResult, Vl53l8Platform, Vl53l8Results, } from "./sensors/vl53l8/uld.js";
27
+ export { CNH_BIN_WIDTH_MM, CNH_MAX_DATA_BYTES, CnhConfig, CnhConfigError, MI_CFG_DEV_IDX, decode as decodeCnh, maxBins as cnhMaxBins, } from "./sensors/vl53l8/cnh.js";
28
+ export type { CnhAggregate, CnhDecoded } from "./sensors/vl53l8/cnh.js";
29
+ export { loadAssets } from "./sensors/vl53l8/assets/index.js";
30
+ export type { Vl53l8Assets, Vl53l8Variant } from "./sensors/vl53l8/assets/index.js";
31
+ export * from "./sensors/bno086/shtp.js";
32
+ export * from "./sensors/bno086/reports.js";
33
+ export * from "./sensors/bno086/sh2.js";
34
+ export * from "./sensors/bno086/bno086.js";
35
+ export { RECORDING_SCHEMA, RecordingTransport, ReplayTransport } from "./transport/replay.js";
36
+ export { DATASET_SCHEMA, DatasetPlayer, DatasetReader, DatasetRecorder, DatasetWriter, } from "./dataset.js";
37
+ export type { DatasetDeviceMeta, DatasetHeader, DatasetRecord, PlayerState, } from "./dataset.js";
38
+ export type { SerialTransport, SerialTransportInfo } from "./transport/types.js";
39
+ export { LoopbackTransport } from "./transport/loopback.js";
40
+ export { WebSerialTransport, isWebSerialSupported, getGrantedPorts, watchConnect, } from "./transport/webserial.js";
41
+ export type { WebSerialPortLike } from "./transport/webserial.js";
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @depz/sensor-sdk — browser-safe root export.
3
+ * Node-only pieces live in `@depz/sensor-sdk/node`.
4
+ */
5
+ export * from "./protocol/crc.js";
6
+ export * from "./protocol/framing.js";
7
+ export * from "./protocol/common.js";
8
+ export * from "./protocol/identity.js";
9
+ export * from "./protocol/sr04.js";
10
+ export * from "./protocol/vl53l8.js";
11
+ export * from "./protocol/bno086.js";
12
+ export * from "./protocol/fwdepz.js";
13
+ export * from "./protocol/usb-ids.js";
14
+ export * from "./errors.js";
15
+ export { isDeviceInfo, listDepzDevicesFrom, openDeviceByDeviceSerial, openDeviceFrom, orderDevicesBySerial, orderPortsBySerial, probePort, } from "./discovery.js";
16
+ export { DepzLink } from "./device/link.js";
17
+ export { DEFAULT_TIMEOUT_MS, DepzDevice, NO_MATCH, StreamQueue, hostNowUs, syncTimeAll, } from "./device/device.js";
18
+ export { Sr04 } from "./sensors/sr04.js";
19
+ export { MIN_RANGING_FREQUENCY_HZ, Vl53l8, Vl53l8Ch, Vl53l8Cx, zoneGrid, } from "./sensors/vl53l8/vl53l8.js";
20
+ export { CALIBRATE_XTALK, FW_CHECKSUM, GET_XTALK_CMD, MotionConfig, NB_THRESHOLDS, POWER_MODE_DEEP_SLEEP, POWER_MODE_SLEEP, POWER_MODE_WAKEUP, RANGING_MODE_AUTONOMOUS, RANGING_MODE_CONTINUOUS, RESOLUTION_4X4, RESOLUTION_8X8, TARGET_ORDER_CLOSEST, TARGET_ORDER_STRONGEST, THRESH_IN_WINDOW, THRESH_OP_AND, THRESH_OP_NONE, THRESH_OP_OR, THRESH_OUT_OF_WINDOW, VL53L8CX, Vl53l8cxError, defaultMotionConfig, motionConfigSetResolution, packDetectionThresholds, swapBuffer, xtalkMarginToRaw, } from "./sensors/vl53l8/uld.js";
21
+ export { CNH_BIN_WIDTH_MM, CNH_MAX_DATA_BYTES, CnhConfig, CnhConfigError, MI_CFG_DEV_IDX, decode as decodeCnh, maxBins as cnhMaxBins, } from "./sensors/vl53l8/cnh.js";
22
+ export { loadAssets } from "./sensors/vl53l8/assets/index.js";
23
+ export * from "./sensors/bno086/shtp.js";
24
+ export * from "./sensors/bno086/reports.js";
25
+ export * from "./sensors/bno086/sh2.js";
26
+ export * from "./sensors/bno086/bno086.js";
27
+ export { RECORDING_SCHEMA, RecordingTransport, ReplayTransport } from "./transport/replay.js";
28
+ export { DATASET_SCHEMA, DatasetPlayer, DatasetReader, DatasetRecorder, DatasetWriter, } from "./dataset.js";
29
+ export { LoopbackTransport } from "./transport/loopback.js";
30
+ export { WebSerialTransport, isWebSerialSupported, getGrantedPorts, watchConnect, } from "./transport/webserial.js";
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,GACV,MAAM,gBAAgB,CAAC;AASxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EACL,wBAAwB,EACxB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,UAAU,EACV,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,cAAc,EACd,MAAM,IAAI,SAAS,EACnB,OAAO,IAAI,UAAU,GACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,GACd,MAAM,cAAc,CAAC;AAQtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,YAAY,GACb,MAAM,0BAA0B,CAAC"}