@depz/sensor-sdk 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -5
- package/dist/dataset.d.ts.map +1 -1
- package/dist/dataset.js +66 -2
- package/dist/dataset.js.map +1 -1
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +25 -2
- package/dist/discovery.js.map +1 -1
- package/dist/index.d.ts +21 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/protocol/bno055.d.ts +101 -0
- package/dist/protocol/bno055.d.ts.map +1 -0
- package/dist/protocol/bno055.js +105 -0
- package/dist/protocol/bno055.js.map +1 -0
- package/dist/protocol/identity.d.ts +1 -1
- package/dist/protocol/identity.d.ts.map +1 -1
- package/dist/protocol/identity.js +6 -0
- package/dist/protocol/identity.js.map +1 -1
- package/dist/protocol/vl53l7.d.ts +77 -0
- package/dist/protocol/vl53l7.d.ts.map +1 -0
- package/dist/protocol/vl53l7.js +99 -0
- package/dist/protocol/vl53l7.js.map +1 -0
- package/dist/protocol/vl53lx.d.ts +72 -0
- package/dist/protocol/vl53lx.d.ts.map +1 -0
- package/dist/protocol/vl53lx.js +87 -0
- package/dist/protocol/vl53lx.js.map +1 -0
- package/dist/sensors/bno055/bno055.d.ts +207 -0
- package/dist/sensors/bno055/bno055.d.ts.map +1 -0
- package/dist/sensors/bno055/bno055.js +547 -0
- package/dist/sensors/bno055/bno055.js.map +1 -0
- package/dist/sensors/bno055/regs.d.ts +271 -0
- package/dist/sensors/bno055/regs.d.ts.map +1 -0
- package/dist/sensors/bno055/regs.js +366 -0
- package/dist/sensors/bno055/regs.js.map +1 -0
- package/dist/sensors/bno086/bno086.d.ts +13 -0
- package/dist/sensors/bno086/bno086.d.ts.map +1 -1
- package/dist/sensors/bno086/bno086.js +26 -1
- package/dist/sensors/bno086/bno086.js.map +1 -1
- package/dist/sensors/bno086/sh2.d.ts.map +1 -1
- package/dist/sensors/bno086/sh2.js +5 -2
- package/dist/sensors/bno086/sh2.js.map +1 -1
- package/dist/sensors/vl53l7/vl53l7.d.ts +97 -0
- package/dist/sensors/vl53l7/vl53l7.d.ts.map +1 -0
- package/dist/sensors/vl53l7/vl53l7.js +138 -0
- package/dist/sensors/vl53l7/vl53l7.js.map +1 -0
- package/dist/sensors/vl53l8/assets/index.d.ts +5 -1
- package/dist/sensors/vl53l8/assets/index.d.ts.map +1 -1
- package/dist/sensors/vl53l8/assets/index.js +7 -1
- package/dist/sensors/vl53l8/assets/index.js.map +1 -1
- package/dist/sensors/vl53l8/assets/l7ch.d.ts +12 -0
- package/dist/sensors/vl53l8/assets/l7ch.d.ts.map +1 -0
- package/dist/sensors/vl53l8/assets/l7ch.js +18 -0
- package/dist/sensors/vl53l8/assets/l7ch.js.map +1 -0
- package/dist/sensors/vl53l8/assets/l7cx.d.ts +14 -0
- package/dist/sensors/vl53l8/assets/l7cx.d.ts.map +1 -0
- package/dist/sensors/vl53l8/assets/l7cx.js +20 -0
- package/dist/sensors/vl53l8/assets/l7cx.js.map +1 -0
- package/dist/sensors/vl53l8/cnh.d.ts +4 -3
- package/dist/sensors/vl53l8/cnh.d.ts.map +1 -1
- package/dist/sensors/vl53l8/cnh.js +4 -3
- package/dist/sensors/vl53l8/cnh.js.map +1 -1
- package/dist/sensors/vl53l8/uld.d.ts +50 -9
- package/dist/sensors/vl53l8/uld.d.ts.map +1 -1
- package/dist/sensors/vl53l8/uld.js +241 -35
- package/dist/sensors/vl53l8/uld.js.map +1 -1
- package/dist/sensors/vl53l8/vl53l8.d.ts +8 -3
- package/dist/sensors/vl53l8/vl53l8.d.ts.map +1 -1
- package/dist/sensors/vl53l8/vl53l8.js +12 -7
- package/dist/sensors/vl53l8/vl53l8.js.map +1 -1
- package/dist/sensors/vl53lx/decode.d.ts +70 -0
- package/dist/sensors/vl53lx/decode.d.ts.map +1 -0
- package/dist/sensors/vl53lx/decode.js +108 -0
- package/dist/sensors/vl53lx/decode.js.map +1 -0
- package/dist/sensors/vl53lx/uld/arith.d.ts +23 -0
- package/dist/sensors/vl53lx/uld/arith.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/arith.js +42 -0
- package/dist/sensors/vl53lx/uld/arith.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/core.d.ts +359 -0
- package/dist/sensors/vl53lx/uld/bare/core.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/core.js +1112 -0
- package/dist/sensors/vl53lx/uld/bare/core.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/driver.d.ts +100 -0
- package/dist/sensors/vl53lx/uld/bare/driver.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/driver.js +226 -0
- package/dist/sensors/vl53lx/uld/bare/driver.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/hist.d.ts +180 -0
- package/dist/sensors/vl53lx/uld/bare/hist.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/hist.js +949 -0
- package/dist/sensors/vl53lx/uld/bare/hist.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/image.d.ts +53 -0
- package/dist/sensors/vl53lx/uld/bare/image.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/image.js +108 -0
- package/dist/sensors/vl53lx/uld/bare/image.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/imath.d.ts +39 -0
- package/dist/sensors/vl53lx/uld/bare/imath.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/imath.js +99 -0
- package/dist/sensors/vl53lx/uld/bare/imath.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/index.d.ts +22 -0
- package/dist/sensors/vl53lx/uld/bare/index.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/index.js +22 -0
- package/dist/sensors/vl53lx/uld/bare/index.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/nvm.d.ts +85 -0
- package/dist/sensors/vl53lx/uld/bare/nvm.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/nvm.js +148 -0
- package/dist/sensors/vl53lx/uld/bare/nvm.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/regs.d.ts +54 -0
- package/dist/sensors/vl53lx/uld/bare/regs.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/regs.js +496 -0
- package/dist/sensors/vl53lx/uld/bare/regs.js.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/tuning.d.ts +15 -0
- package/dist/sensors/vl53lx/uld/bare/tuning.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/bare/tuning.js +303 -0
- package/dist/sensors/vl53lx/uld/bare/tuning.js.map +1 -0
- package/dist/sensors/vl53lx/uld/base.d.ts +134 -0
- package/dist/sensors/vl53lx/uld/base.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/base.js +171 -0
- package/dist/sensors/vl53lx/uld/base.js.map +1 -0
- package/dist/sensors/vl53lx/uld/l0x.d.ts +334 -0
- package/dist/sensors/vl53lx/uld/l0x.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/l0x.js +1532 -0
- package/dist/sensors/vl53lx/uld/l0x.js.map +1 -0
- package/dist/sensors/vl53lx/uld/l1.d.ts +69 -0
- package/dist/sensors/vl53lx/uld/l1.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/l1.js +262 -0
- package/dist/sensors/vl53lx/uld/l1.js.map +1 -0
- package/dist/sensors/vl53lx/uld/l3.d.ts +25 -0
- package/dist/sensors/vl53lx/uld/l3.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/l3.js +51 -0
- package/dist/sensors/vl53lx/uld/l3.js.map +1 -0
- package/dist/sensors/vl53lx/uld/l4.d.ts +20 -0
- package/dist/sensors/vl53lx/uld/l4.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/l4.js +95 -0
- package/dist/sensors/vl53lx/uld/l4.js.map +1 -0
- package/dist/sensors/vl53lx/uld/link.d.ts +42 -0
- package/dist/sensors/vl53lx/uld/link.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/link.js +28 -0
- package/dist/sensors/vl53lx/uld/link.js.map +1 -0
- package/dist/sensors/vl53lx/uld/registry.d.ts +68 -0
- package/dist/sensors/vl53lx/uld/registry.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/registry.js +139 -0
- package/dist/sensors/vl53lx/uld/registry.js.map +1 -0
- package/dist/sensors/vl53lx/uld/vl53l1-die.d.ts +190 -0
- package/dist/sensors/vl53lx/uld/vl53l1-die.d.ts.map +1 -0
- package/dist/sensors/vl53lx/uld/vl53l1-die.js +457 -0
- package/dist/sensors/vl53lx/uld/vl53l1-die.js.map +1 -0
- package/dist/sensors/vl53lx/vl53lx.d.ts +332 -0
- package/dist/sensors/vl53lx/vl53lx.d.ts.map +1 -0
- package/dist/sensors/vl53lx/vl53lx.js +694 -0
- package/dist/sensors/vl53lx/vl53lx.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BNO055 register map and the pure codecs every SDK shares
|
|
3
|
+
* (contracts/13_SENSOR_BNO055.md §4, Bosch BST-BNO055-DS000 rev 1.8).
|
|
4
|
+
* Mirrors the Python reference `depz_sensor_sdk.bno055.regs`.
|
|
5
|
+
*
|
|
6
|
+
* Nothing here touches the wire: these functions turn register bytes into
|
|
7
|
+
* values and back, so they are what `vectors/bno055.json` pins.
|
|
8
|
+
*/
|
|
9
|
+
export declare const BNO055_REG_CHIP_ID = 0;
|
|
10
|
+
export declare const BNO055_REG_PAGE_ID = 7;
|
|
11
|
+
export declare const BNO055_REG_ACC_DATA = 8;
|
|
12
|
+
export declare const BNO055_REG_MAG_DATA = 14;
|
|
13
|
+
export declare const BNO055_REG_GYR_DATA = 20;
|
|
14
|
+
/** heading, roll, pitch */
|
|
15
|
+
export declare const BNO055_REG_EUL_DATA = 26;
|
|
16
|
+
/** w, x, y, z */
|
|
17
|
+
export declare const BNO055_REG_QUA_DATA = 32;
|
|
18
|
+
export declare const BNO055_REG_LIA_DATA = 40;
|
|
19
|
+
export declare const BNO055_REG_GRV_DATA = 46;
|
|
20
|
+
export declare const BNO055_REG_TEMP = 52;
|
|
21
|
+
export declare const BNO055_REG_CALIB_STAT = 53;
|
|
22
|
+
export declare const BNO055_REG_ST_RESULT = 54;
|
|
23
|
+
/** Clear-on-read — never part of a routine block read. */
|
|
24
|
+
export declare const BNO055_REG_INT_STA = 55;
|
|
25
|
+
export declare const BNO055_REG_SYS_CLK_STATUS = 56;
|
|
26
|
+
export declare const BNO055_REG_SYS_STATUS = 57;
|
|
27
|
+
export declare const BNO055_REG_SYS_ERR = 58;
|
|
28
|
+
export declare const BNO055_REG_UNIT_SEL = 59;
|
|
29
|
+
export declare const BNO055_REG_OPR_MODE = 61;
|
|
30
|
+
export declare const BNO055_REG_PWR_MODE = 62;
|
|
31
|
+
export declare const BNO055_REG_SYS_TRIGGER = 63;
|
|
32
|
+
export declare const BNO055_REG_TEMP_SOURCE = 64;
|
|
33
|
+
export declare const BNO055_REG_AXIS_MAP_CONFIG = 65;
|
|
34
|
+
export declare const BNO055_REG_AXIS_MAP_SIGN = 66;
|
|
35
|
+
/** 9 × i16, row-major. */
|
|
36
|
+
export declare const BNO055_REG_SIC_MATRIX = 67;
|
|
37
|
+
/** acc/mag/gyr offsets + acc/mag radius. */
|
|
38
|
+
export declare const BNO055_REG_CALIB_PROFILE = 85;
|
|
39
|
+
export declare const BNO055_CALIB_PROFILE_LEN = 22;
|
|
40
|
+
export declare const BNO055_REG1_ACC_CONFIG = 8;
|
|
41
|
+
export declare const BNO055_REG1_MAG_CONFIG = 9;
|
|
42
|
+
export declare const BNO055_REG1_GYR_CONFIG_0 = 10;
|
|
43
|
+
export declare const BNO055_REG1_GYR_CONFIG_1 = 11;
|
|
44
|
+
export declare const BNO055_REG1_INT_MSK = 15;
|
|
45
|
+
export declare const BNO055_REG1_INT_EN = 16;
|
|
46
|
+
/** First / last page-1 motion-interrupt setting register (written raw). */
|
|
47
|
+
export declare const BNO055_REG1_INT_SETTINGS_FIRST = 17;
|
|
48
|
+
export declare const BNO055_REG1_INT_SETTINGS_LAST = 31;
|
|
49
|
+
export declare const BNO055_REG1_UNIQUE_ID = 80;
|
|
50
|
+
export declare const BNO055_UNIQUE_ID_LEN = 16;
|
|
51
|
+
/** [addr, len] of the block carrying every output channel (0x08..0x35). */
|
|
52
|
+
export declare const BNO055_FULL_BLOCK: readonly [number, number];
|
|
53
|
+
/** [addr, len] of the quaternion alone — the cheapest orientation read. */
|
|
54
|
+
export declare const BNO055_QUAT_BLOCK: readonly [number, number];
|
|
55
|
+
export declare const BNO055_SYS_TRIGGER_SELF_TEST = 1;
|
|
56
|
+
export declare const BNO055_SYS_TRIGGER_RST_SYS = 32;
|
|
57
|
+
export declare const BNO055_SYS_TRIGGER_RST_INT = 64;
|
|
58
|
+
export declare const BNO055_SYS_TRIGGER_CLK_SEL = 128;
|
|
59
|
+
/**
|
|
60
|
+
* INT_EN / INT_MSK / INT_STA bits. The DRDY bits exist only on sensor
|
|
61
|
+
* firmware 03.14+; the boards in this line carry 03.11.
|
|
62
|
+
*/
|
|
63
|
+
export declare const BNO055_INT: {
|
|
64
|
+
readonly accBsxDrdy: 1;
|
|
65
|
+
readonly magDrdy: 2;
|
|
66
|
+
readonly gyrAm: 4;
|
|
67
|
+
readonly gyrHighRate: 8;
|
|
68
|
+
readonly gyrDrdy: 16;
|
|
69
|
+
readonly accHighG: 32;
|
|
70
|
+
readonly accAm: 64;
|
|
71
|
+
readonly accNm: 128;
|
|
72
|
+
};
|
|
73
|
+
/** ST_RESULT bits (1 = passed). */
|
|
74
|
+
export declare const BNO055_ST: {
|
|
75
|
+
readonly acc: 1;
|
|
76
|
+
readonly mag: 2;
|
|
77
|
+
readonly gyr: 4;
|
|
78
|
+
readonly mcu: 8;
|
|
79
|
+
};
|
|
80
|
+
export declare const BNO055_EXPECTED_SELF_TEST = 15;
|
|
81
|
+
/** OPR_MODE (0x3D) bits 3:0. */
|
|
82
|
+
export declare enum Bno055OprMode {
|
|
83
|
+
Config = 0,
|
|
84
|
+
AccOnly = 1,
|
|
85
|
+
MagOnly = 2,
|
|
86
|
+
GyroOnly = 3,
|
|
87
|
+
AccMag = 4,
|
|
88
|
+
AccGyro = 5,
|
|
89
|
+
MagGyro = 6,
|
|
90
|
+
Amg = 7,
|
|
91
|
+
Imu = 8,
|
|
92
|
+
Compass = 9,
|
|
93
|
+
M4g = 10,
|
|
94
|
+
NdofFmcOff = 11,
|
|
95
|
+
Ndof = 12
|
|
96
|
+
}
|
|
97
|
+
export declare function bno055IsFusion(mode: Bno055OprMode): boolean;
|
|
98
|
+
/** PWR_MODE (0x3E) bits 1:0. */
|
|
99
|
+
export declare enum Bno055PwrMode {
|
|
100
|
+
Normal = 0,
|
|
101
|
+
LowPower = 1,
|
|
102
|
+
Suspend = 2
|
|
103
|
+
}
|
|
104
|
+
/** TEMP_SOURCE (0x40) bits 1:0. */
|
|
105
|
+
export declare enum Bno055TempSource {
|
|
106
|
+
Accel = 0,
|
|
107
|
+
Gyro = 1
|
|
108
|
+
}
|
|
109
|
+
/** Datasheet Table 3-6 plus margin: CONFIG → any 7 ms, any → CONFIG 19 ms. */
|
|
110
|
+
export declare const BNO055_MODE_SWITCH_FROM_CONFIG_MS = 10;
|
|
111
|
+
export declare const BNO055_MODE_SWITCH_TO_CONFIG_MS = 25;
|
|
112
|
+
/** BIST runs ~400 ms (datasheet §3.9.2). */
|
|
113
|
+
export declare const BNO055_SELF_TEST_MS = 450;
|
|
114
|
+
/**
|
|
115
|
+
* SYS_STATUS values while the sensor is still booting after BNO_RESET —
|
|
116
|
+
* the bridge answers at the chip-ID handshake, ~15 ms before the sensor's
|
|
117
|
+
* boot ends and it reverts OPR_MODE (contract 13 §5, ERRATA E13).
|
|
118
|
+
*/
|
|
119
|
+
export declare const BNO055_SYS_STATUS_BOOTING: readonly number[];
|
|
120
|
+
export declare const BNO055_BOOT_SETTLE_TIMEOUT_MS = 1000;
|
|
121
|
+
/**
|
|
122
|
+
* SYS_STATUS 4 polls in a row taken as the leftover of a self-test run in
|
|
123
|
+
* CONFIG mode, not POST: POST shows 4 for ~35 ms (a handful of polls), the
|
|
124
|
+
* leftover stays until the mode leaves CONFIG (measured on SW 03.11). Counted,
|
|
125
|
+
* not timed, so a replay makes the same decision.
|
|
126
|
+
*/
|
|
127
|
+
export declare const BNO055_STUCK_SELF_TEST_POLLS = 20;
|
|
128
|
+
/** Fusion outputs read zero for ~70 ms after CONFIG → a fusion mode. */
|
|
129
|
+
export declare const BNO055_FUSION_START_TIMEOUT_MS = 1000;
|
|
130
|
+
export declare const BNO055_SYS_STATUS_NAMES: Readonly<Record<number, string>>;
|
|
131
|
+
export declare const BNO055_SYS_ERR_NAMES: Readonly<Record<number, string>>;
|
|
132
|
+
/**
|
|
133
|
+
* Output units. Default (all false) = m/s², dps, degrees, °C, Windows
|
|
134
|
+
* orientation (UNIT_SEL 0x00). The sensor's power-on value is 0x80.
|
|
135
|
+
*/
|
|
136
|
+
export interface Bno055Units {
|
|
137
|
+
/** ACC_DATA in mg, else m/s² (linear accel / gravity stay m/s²). */
|
|
138
|
+
accelMg: boolean;
|
|
139
|
+
gyroRps: boolean;
|
|
140
|
+
eulerRad: boolean;
|
|
141
|
+
tempF: boolean;
|
|
142
|
+
android: boolean;
|
|
143
|
+
}
|
|
144
|
+
export declare const BNO055_DEFAULT_UNITS: Readonly<Bno055Units>;
|
|
145
|
+
export declare function packBno055Units(u: Bno055Units): number;
|
|
146
|
+
export declare function unpackBno055Units(value: number): Bno055Units;
|
|
147
|
+
/** LSB per unit (contract 13 §4.2). */
|
|
148
|
+
export declare function bno055Lsb(u: Bno055Units): {
|
|
149
|
+
accel: number;
|
|
150
|
+
gyro: number;
|
|
151
|
+
euler: number;
|
|
152
|
+
temp: number;
|
|
153
|
+
};
|
|
154
|
+
export declare const BNO055_MAG_LSB = 16;
|
|
155
|
+
export declare const BNO055_QUAT_LSB = 16384;
|
|
156
|
+
/** LIA / GRV ignore the ACC_Unit bit: always m/s² at 100 LSB (measured). */
|
|
157
|
+
export declare const BNO055_FUSION_ACCEL_LSB = 100;
|
|
158
|
+
/** CALIB_STAT (0x35): 0 = not calibrated … 3 = fully calibrated. */
|
|
159
|
+
export interface Bno055CalibStatus {
|
|
160
|
+
system: number;
|
|
161
|
+
gyro: number;
|
|
162
|
+
accel: number;
|
|
163
|
+
mag: number;
|
|
164
|
+
}
|
|
165
|
+
export declare function unpackBno055CalibStatus(v: number): Bno055CalibStatus;
|
|
166
|
+
export declare function packBno055CalibStatus(s: Bno055CalibStatus): number;
|
|
167
|
+
export declare function bno055FullyCalibrated(s: Bno055CalibStatus): boolean;
|
|
168
|
+
type Vec3i = [number, number, number];
|
|
169
|
+
/**
|
|
170
|
+
* Sensor offsets and radii, registers 0x55..0x6A (22 bytes, all i16 LE).
|
|
171
|
+
* Read after a full calibration (CONFIG mode), store, write back after
|
|
172
|
+
* every power-on reset. A written profile is a starting point: fusion
|
|
173
|
+
* refines it as soon as it resumes.
|
|
174
|
+
*/
|
|
175
|
+
export interface Bno055CalibrationProfile {
|
|
176
|
+
accelOffset: Vec3i;
|
|
177
|
+
magOffset: Vec3i;
|
|
178
|
+
gyroOffset: Vec3i;
|
|
179
|
+
accelRadius: number;
|
|
180
|
+
magRadius: number;
|
|
181
|
+
}
|
|
182
|
+
export declare function packBno055CalibrationProfile(p: Bno055CalibrationProfile): Uint8Array;
|
|
183
|
+
export declare function unpackBno055CalibrationProfile(data: Uint8Array): Bno055CalibrationProfile;
|
|
184
|
+
/** Soft-iron matrix, 9 × i16 row-major, 1.0 = 16384. */
|
|
185
|
+
export declare const BNO055_SIC_IDENTITY: readonly number[];
|
|
186
|
+
export declare function packBno055SicMatrix(m: readonly number[]): Uint8Array;
|
|
187
|
+
export declare function unpackBno055SicMatrix(data: Uint8Array): number[];
|
|
188
|
+
export declare const BNO055_AXIS_X = 0;
|
|
189
|
+
export declare const BNO055_AXIS_Y = 1;
|
|
190
|
+
export declare const BNO055_AXIS_Z = 2;
|
|
191
|
+
/**
|
|
192
|
+
* Which physical axis feeds each output axis, and its sign: `x = AXIS_Y`
|
|
193
|
+
* means "output X is the chip's Y axis".
|
|
194
|
+
*/
|
|
195
|
+
export interface Bno055AxisRemap {
|
|
196
|
+
x: number;
|
|
197
|
+
y: number;
|
|
198
|
+
z: number;
|
|
199
|
+
xNegative: boolean;
|
|
200
|
+
yNegative: boolean;
|
|
201
|
+
zNegative: boolean;
|
|
202
|
+
}
|
|
203
|
+
export declare const BNO055_DEFAULT_AXIS_REMAP: Readonly<Bno055AxisRemap>;
|
|
204
|
+
/**
|
|
205
|
+
* → [AXIS_MAP_CONFIG, AXIS_MAP_SIGN]. The sensor keeps the old mapping when
|
|
206
|
+
* one axis is used twice, so this refuses a non-permutation up front.
|
|
207
|
+
*/
|
|
208
|
+
export declare function packBno055AxisRemap(a: Bno055AxisRemap): [number, number];
|
|
209
|
+
export declare function unpackBno055AxisRemap(config: number, sign: number): Bno055AxisRemap;
|
|
210
|
+
/** Datasheet §3.4: placement → [AXIS_MAP_CONFIG, AXIS_MAP_SIGN]; P1 is the default. */
|
|
211
|
+
export declare const BNO055_PLACEMENTS: Readonly<Record<string, readonly [number, number]>>;
|
|
212
|
+
export declare function bno055Placement(name: string): Bno055AxisRemap;
|
|
213
|
+
export declare const BNO055_ACC_RANGE_G: readonly number[];
|
|
214
|
+
export declare const BNO055_ACC_BANDWIDTH_HZ: readonly number[];
|
|
215
|
+
export declare const BNO055_GYR_RANGE_DPS: readonly number[];
|
|
216
|
+
export declare const BNO055_GYR_BANDWIDTH_HZ: readonly number[];
|
|
217
|
+
export declare const BNO055_MAG_RATE_HZ: readonly number[];
|
|
218
|
+
/** Register codes: `range`/`bandwidth` index the tables above, `power` the datasheet mode list. */
|
|
219
|
+
export interface Bno055AccelConfig {
|
|
220
|
+
range: number;
|
|
221
|
+
bandwidth: number;
|
|
222
|
+
power: number;
|
|
223
|
+
}
|
|
224
|
+
export declare function packBno055AccelConfig(c: Bno055AccelConfig): number;
|
|
225
|
+
export declare function unpackBno055AccelConfig(v: number): Bno055AccelConfig;
|
|
226
|
+
export interface Bno055GyroConfig {
|
|
227
|
+
range: number;
|
|
228
|
+
bandwidth: number;
|
|
229
|
+
power: number;
|
|
230
|
+
}
|
|
231
|
+
export declare function packBno055GyroConfig(c: Bno055GyroConfig): Uint8Array;
|
|
232
|
+
export declare function unpackBno055GyroConfig(b: Uint8Array): Bno055GyroConfig;
|
|
233
|
+
export interface Bno055MagConfig {
|
|
234
|
+
rate: number;
|
|
235
|
+
mode: number;
|
|
236
|
+
power: number;
|
|
237
|
+
}
|
|
238
|
+
export declare function packBno055MagConfig(c: Bno055MagConfig): number;
|
|
239
|
+
export declare function unpackBno055MagConfig(v: number): Bno055MagConfig;
|
|
240
|
+
/** ST_RESULT (0x36) + SYS_CLK_STATUS/SYS_STATUS/SYS_ERR (0x38..0x3A). */
|
|
241
|
+
export interface Bno055SystemStatus {
|
|
242
|
+
selfTest: number;
|
|
243
|
+
clkStatus: number;
|
|
244
|
+
status: number;
|
|
245
|
+
error: number;
|
|
246
|
+
statusText: string;
|
|
247
|
+
errorText: string;
|
|
248
|
+
selfTestPassed: boolean;
|
|
249
|
+
}
|
|
250
|
+
export declare function makeBno055SystemStatus(selfTest: number, clkStatus: number, status: number, error: number): Bno055SystemStatus;
|
|
251
|
+
/**
|
|
252
|
+
* Raw register values found in one block read. A channel is null when the
|
|
253
|
+
* window `addr..addr+len` does not cover it completely.
|
|
254
|
+
*/
|
|
255
|
+
export interface Bno055RawBlock {
|
|
256
|
+
accel: Vec3i | null;
|
|
257
|
+
mag: Vec3i | null;
|
|
258
|
+
gyro: Vec3i | null;
|
|
259
|
+
/** heading, roll, pitch */
|
|
260
|
+
euler: Vec3i | null;
|
|
261
|
+
/** w, x, y, z */
|
|
262
|
+
quaternion: [number, number, number, number] | null;
|
|
263
|
+
linearAccel: Vec3i | null;
|
|
264
|
+
gravity: Vec3i | null;
|
|
265
|
+
temperature: number | null;
|
|
266
|
+
calibStat: number | null;
|
|
267
|
+
}
|
|
268
|
+
/** Unpack whatever channels the register window starting at `addr` holds. */
|
|
269
|
+
export declare function decodeBno055Block(addr: number, data: Uint8Array): Bno055RawBlock;
|
|
270
|
+
export {};
|
|
271
|
+
//# sourceMappingURL=regs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regs.d.ts","sourceRoot":"","sources":["../../../src/sensors/bno055/regs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BNO055 register map and the pure codecs every SDK shares
|
|
3
|
+
* (contracts/13_SENSOR_BNO055.md §4, Bosch BST-BNO055-DS000 rev 1.8).
|
|
4
|
+
* Mirrors the Python reference `depz_sensor_sdk.bno055.regs`.
|
|
5
|
+
*
|
|
6
|
+
* Nothing here touches the wire: these functions turn register bytes into
|
|
7
|
+
* values and back, so they are what `vectors/bno055.json` pins.
|
|
8
|
+
*/
|
|
9
|
+
// ── page 0 ────────────────────────────────────────────────────────────────────
|
|
10
|
+
export const BNO055_REG_CHIP_ID = 0x00;
|
|
11
|
+
export const BNO055_REG_PAGE_ID = 0x07;
|
|
12
|
+
export const BNO055_REG_ACC_DATA = 0x08;
|
|
13
|
+
export const BNO055_REG_MAG_DATA = 0x0e;
|
|
14
|
+
export const BNO055_REG_GYR_DATA = 0x14;
|
|
15
|
+
/** heading, roll, pitch */
|
|
16
|
+
export const BNO055_REG_EUL_DATA = 0x1a;
|
|
17
|
+
/** w, x, y, z */
|
|
18
|
+
export const BNO055_REG_QUA_DATA = 0x20;
|
|
19
|
+
export const BNO055_REG_LIA_DATA = 0x28;
|
|
20
|
+
export const BNO055_REG_GRV_DATA = 0x2e;
|
|
21
|
+
export const BNO055_REG_TEMP = 0x34;
|
|
22
|
+
export const BNO055_REG_CALIB_STAT = 0x35;
|
|
23
|
+
export const BNO055_REG_ST_RESULT = 0x36;
|
|
24
|
+
/** Clear-on-read — never part of a routine block read. */
|
|
25
|
+
export const BNO055_REG_INT_STA = 0x37;
|
|
26
|
+
export const BNO055_REG_SYS_CLK_STATUS = 0x38;
|
|
27
|
+
export const BNO055_REG_SYS_STATUS = 0x39;
|
|
28
|
+
export const BNO055_REG_SYS_ERR = 0x3a;
|
|
29
|
+
export const BNO055_REG_UNIT_SEL = 0x3b;
|
|
30
|
+
export const BNO055_REG_OPR_MODE = 0x3d;
|
|
31
|
+
export const BNO055_REG_PWR_MODE = 0x3e;
|
|
32
|
+
export const BNO055_REG_SYS_TRIGGER = 0x3f;
|
|
33
|
+
export const BNO055_REG_TEMP_SOURCE = 0x40;
|
|
34
|
+
export const BNO055_REG_AXIS_MAP_CONFIG = 0x41;
|
|
35
|
+
export const BNO055_REG_AXIS_MAP_SIGN = 0x42;
|
|
36
|
+
/** 9 × i16, row-major. */
|
|
37
|
+
export const BNO055_REG_SIC_MATRIX = 0x43;
|
|
38
|
+
/** acc/mag/gyr offsets + acc/mag radius. */
|
|
39
|
+
export const BNO055_REG_CALIB_PROFILE = 0x55;
|
|
40
|
+
export const BNO055_CALIB_PROFILE_LEN = 22;
|
|
41
|
+
// ── page 1 ────────────────────────────────────────────────────────────────────
|
|
42
|
+
export const BNO055_REG1_ACC_CONFIG = 0x08;
|
|
43
|
+
export const BNO055_REG1_MAG_CONFIG = 0x09;
|
|
44
|
+
export const BNO055_REG1_GYR_CONFIG_0 = 0x0a;
|
|
45
|
+
export const BNO055_REG1_GYR_CONFIG_1 = 0x0b;
|
|
46
|
+
export const BNO055_REG1_INT_MSK = 0x0f;
|
|
47
|
+
export const BNO055_REG1_INT_EN = 0x10;
|
|
48
|
+
/** First / last page-1 motion-interrupt setting register (written raw). */
|
|
49
|
+
export const BNO055_REG1_INT_SETTINGS_FIRST = 0x11;
|
|
50
|
+
export const BNO055_REG1_INT_SETTINGS_LAST = 0x1f;
|
|
51
|
+
export const BNO055_REG1_UNIQUE_ID = 0x50;
|
|
52
|
+
export const BNO055_UNIQUE_ID_LEN = 16;
|
|
53
|
+
/** [addr, len] of the block carrying every output channel (0x08..0x35). */
|
|
54
|
+
export const BNO055_FULL_BLOCK = [0x08, 46];
|
|
55
|
+
/** [addr, len] of the quaternion alone — the cheapest orientation read. */
|
|
56
|
+
export const BNO055_QUAT_BLOCK = [0x20, 8];
|
|
57
|
+
// SYS_TRIGGER bits.
|
|
58
|
+
export const BNO055_SYS_TRIGGER_SELF_TEST = 0x01;
|
|
59
|
+
export const BNO055_SYS_TRIGGER_RST_SYS = 0x20;
|
|
60
|
+
export const BNO055_SYS_TRIGGER_RST_INT = 0x40;
|
|
61
|
+
export const BNO055_SYS_TRIGGER_CLK_SEL = 0x80;
|
|
62
|
+
/**
|
|
63
|
+
* INT_EN / INT_MSK / INT_STA bits. The DRDY bits exist only on sensor
|
|
64
|
+
* firmware 03.14+; the boards in this line carry 03.11.
|
|
65
|
+
*/
|
|
66
|
+
export const BNO055_INT = {
|
|
67
|
+
accBsxDrdy: 0x01,
|
|
68
|
+
magDrdy: 0x02,
|
|
69
|
+
gyrAm: 0x04,
|
|
70
|
+
gyrHighRate: 0x08,
|
|
71
|
+
gyrDrdy: 0x10,
|
|
72
|
+
accHighG: 0x20,
|
|
73
|
+
accAm: 0x40,
|
|
74
|
+
accNm: 0x80,
|
|
75
|
+
};
|
|
76
|
+
/** ST_RESULT bits (1 = passed). */
|
|
77
|
+
export const BNO055_ST = { acc: 0x01, mag: 0x02, gyr: 0x04, mcu: 0x08 };
|
|
78
|
+
export const BNO055_EXPECTED_SELF_TEST = 0x0f;
|
|
79
|
+
/** OPR_MODE (0x3D) bits 3:0. */
|
|
80
|
+
export var Bno055OprMode;
|
|
81
|
+
(function (Bno055OprMode) {
|
|
82
|
+
Bno055OprMode[Bno055OprMode["Config"] = 0] = "Config";
|
|
83
|
+
Bno055OprMode[Bno055OprMode["AccOnly"] = 1] = "AccOnly";
|
|
84
|
+
Bno055OprMode[Bno055OprMode["MagOnly"] = 2] = "MagOnly";
|
|
85
|
+
Bno055OprMode[Bno055OprMode["GyroOnly"] = 3] = "GyroOnly";
|
|
86
|
+
Bno055OprMode[Bno055OprMode["AccMag"] = 4] = "AccMag";
|
|
87
|
+
Bno055OprMode[Bno055OprMode["AccGyro"] = 5] = "AccGyro";
|
|
88
|
+
Bno055OprMode[Bno055OprMode["MagGyro"] = 6] = "MagGyro";
|
|
89
|
+
Bno055OprMode[Bno055OprMode["Amg"] = 7] = "Amg";
|
|
90
|
+
Bno055OprMode[Bno055OprMode["Imu"] = 8] = "Imu";
|
|
91
|
+
Bno055OprMode[Bno055OprMode["Compass"] = 9] = "Compass";
|
|
92
|
+
Bno055OprMode[Bno055OprMode["M4g"] = 10] = "M4g";
|
|
93
|
+
Bno055OprMode[Bno055OprMode["NdofFmcOff"] = 11] = "NdofFmcOff";
|
|
94
|
+
Bno055OprMode[Bno055OprMode["Ndof"] = 12] = "Ndof";
|
|
95
|
+
})(Bno055OprMode || (Bno055OprMode = {}));
|
|
96
|
+
export function bno055IsFusion(mode) {
|
|
97
|
+
return mode >= Bno055OprMode.Imu;
|
|
98
|
+
}
|
|
99
|
+
/** PWR_MODE (0x3E) bits 1:0. */
|
|
100
|
+
export var Bno055PwrMode;
|
|
101
|
+
(function (Bno055PwrMode) {
|
|
102
|
+
Bno055PwrMode[Bno055PwrMode["Normal"] = 0] = "Normal";
|
|
103
|
+
Bno055PwrMode[Bno055PwrMode["LowPower"] = 1] = "LowPower";
|
|
104
|
+
Bno055PwrMode[Bno055PwrMode["Suspend"] = 2] = "Suspend";
|
|
105
|
+
})(Bno055PwrMode || (Bno055PwrMode = {}));
|
|
106
|
+
/** TEMP_SOURCE (0x40) bits 1:0. */
|
|
107
|
+
export var Bno055TempSource;
|
|
108
|
+
(function (Bno055TempSource) {
|
|
109
|
+
Bno055TempSource[Bno055TempSource["Accel"] = 0] = "Accel";
|
|
110
|
+
Bno055TempSource[Bno055TempSource["Gyro"] = 1] = "Gyro";
|
|
111
|
+
})(Bno055TempSource || (Bno055TempSource = {}));
|
|
112
|
+
/** Datasheet Table 3-6 plus margin: CONFIG → any 7 ms, any → CONFIG 19 ms. */
|
|
113
|
+
export const BNO055_MODE_SWITCH_FROM_CONFIG_MS = 10;
|
|
114
|
+
export const BNO055_MODE_SWITCH_TO_CONFIG_MS = 25;
|
|
115
|
+
/** BIST runs ~400 ms (datasheet §3.9.2). */
|
|
116
|
+
export const BNO055_SELF_TEST_MS = 450;
|
|
117
|
+
/**
|
|
118
|
+
* SYS_STATUS values while the sensor is still booting after BNO_RESET —
|
|
119
|
+
* the bridge answers at the chip-ID handshake, ~15 ms before the sensor's
|
|
120
|
+
* boot ends and it reverts OPR_MODE (contract 13 §5, ERRATA E13).
|
|
121
|
+
*/
|
|
122
|
+
export const BNO055_SYS_STATUS_BOOTING = [2, 3, 4];
|
|
123
|
+
export const BNO055_BOOT_SETTLE_TIMEOUT_MS = 1000;
|
|
124
|
+
/**
|
|
125
|
+
* SYS_STATUS 4 polls in a row taken as the leftover of a self-test run in
|
|
126
|
+
* CONFIG mode, not POST: POST shows 4 for ~35 ms (a handful of polls), the
|
|
127
|
+
* leftover stays until the mode leaves CONFIG (measured on SW 03.11). Counted,
|
|
128
|
+
* not timed, so a replay makes the same decision.
|
|
129
|
+
*/
|
|
130
|
+
export const BNO055_STUCK_SELF_TEST_POLLS = 20;
|
|
131
|
+
/** Fusion outputs read zero for ~70 ms after CONFIG → a fusion mode. */
|
|
132
|
+
export const BNO055_FUSION_START_TIMEOUT_MS = 1000;
|
|
133
|
+
export const BNO055_SYS_STATUS_NAMES = {
|
|
134
|
+
0: "idle",
|
|
135
|
+
1: "system error",
|
|
136
|
+
2: "initializing peripherals",
|
|
137
|
+
3: "system initialization",
|
|
138
|
+
4: "executing self-test",
|
|
139
|
+
5: "fusion algorithm running",
|
|
140
|
+
6: "running without fusion",
|
|
141
|
+
};
|
|
142
|
+
export const BNO055_SYS_ERR_NAMES = {
|
|
143
|
+
0: "no error",
|
|
144
|
+
1: "peripheral initialization error",
|
|
145
|
+
2: "system initialization error",
|
|
146
|
+
3: "self-test failed",
|
|
147
|
+
4: "register map value out of range",
|
|
148
|
+
5: "register map address out of range",
|
|
149
|
+
6: "register map write error",
|
|
150
|
+
7: "low power mode not available for this operation mode",
|
|
151
|
+
8: "accelerometer power mode not available",
|
|
152
|
+
9: "fusion algorithm configuration error",
|
|
153
|
+
10: "sensor configuration error",
|
|
154
|
+
};
|
|
155
|
+
// ── units (UNIT_SEL 0x3B) ─────────────────────────────────────────────────────
|
|
156
|
+
// UNIT_SEL bits as the silicon implements them (Table 3-11 / Bosch's driver;
|
|
157
|
+
// the datasheet's §4.3.60 table is off by one — measured on SW 03.11).
|
|
158
|
+
const UNIT_ACC_MG = 0x01;
|
|
159
|
+
const UNIT_GYR_RPS = 0x02;
|
|
160
|
+
const UNIT_EUL_RAD = 0x04;
|
|
161
|
+
const UNIT_TEMP_F = 0x10;
|
|
162
|
+
const UNIT_ORI_ANDROID = 0x80;
|
|
163
|
+
export const BNO055_DEFAULT_UNITS = Object.freeze({
|
|
164
|
+
accelMg: false,
|
|
165
|
+
gyroRps: false,
|
|
166
|
+
eulerRad: false,
|
|
167
|
+
tempF: false,
|
|
168
|
+
android: false,
|
|
169
|
+
});
|
|
170
|
+
export function packBno055Units(u) {
|
|
171
|
+
return ((u.accelMg ? UNIT_ACC_MG : 0) |
|
|
172
|
+
(u.gyroRps ? UNIT_GYR_RPS : 0) |
|
|
173
|
+
(u.eulerRad ? UNIT_EUL_RAD : 0) |
|
|
174
|
+
(u.tempF ? UNIT_TEMP_F : 0) |
|
|
175
|
+
(u.android ? UNIT_ORI_ANDROID : 0));
|
|
176
|
+
}
|
|
177
|
+
export function unpackBno055Units(value) {
|
|
178
|
+
return {
|
|
179
|
+
accelMg: (value & UNIT_ACC_MG) !== 0,
|
|
180
|
+
gyroRps: (value & UNIT_GYR_RPS) !== 0,
|
|
181
|
+
eulerRad: (value & UNIT_EUL_RAD) !== 0,
|
|
182
|
+
tempF: (value & UNIT_TEMP_F) !== 0,
|
|
183
|
+
android: (value & UNIT_ORI_ANDROID) !== 0,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/** LSB per unit (contract 13 §4.2). */
|
|
187
|
+
export function bno055Lsb(u) {
|
|
188
|
+
return {
|
|
189
|
+
accel: u.accelMg ? 1 : 100,
|
|
190
|
+
gyro: u.gyroRps ? 900 : 16,
|
|
191
|
+
euler: u.eulerRad ? 900 : 16,
|
|
192
|
+
temp: u.tempF ? 0.5 : 1,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
export const BNO055_MAG_LSB = 16;
|
|
196
|
+
export const BNO055_QUAT_LSB = 16384;
|
|
197
|
+
/** LIA / GRV ignore the ACC_Unit bit: always m/s² at 100 LSB (measured). */
|
|
198
|
+
export const BNO055_FUSION_ACCEL_LSB = 100;
|
|
199
|
+
export function unpackBno055CalibStatus(v) {
|
|
200
|
+
return { system: (v >> 6) & 3, gyro: (v >> 4) & 3, accel: (v >> 2) & 3, mag: v & 3 };
|
|
201
|
+
}
|
|
202
|
+
export function packBno055CalibStatus(s) {
|
|
203
|
+
return ((s.system & 3) << 6) | ((s.gyro & 3) << 4) | ((s.accel & 3) << 2) | (s.mag & 3);
|
|
204
|
+
}
|
|
205
|
+
export function bno055FullyCalibrated(s) {
|
|
206
|
+
return s.system === 3 && s.gyro === 3 && s.accel === 3 && s.mag === 3;
|
|
207
|
+
}
|
|
208
|
+
export function packBno055CalibrationProfile(p) {
|
|
209
|
+
const out = new Uint8Array(BNO055_CALIB_PROFILE_LEN);
|
|
210
|
+
const dv = new DataView(out.buffer);
|
|
211
|
+
[...p.accelOffset, ...p.magOffset, ...p.gyroOffset, p.accelRadius, p.magRadius].forEach((v, i) => dv.setInt16(2 * i, v, true));
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
export function unpackBno055CalibrationProfile(data) {
|
|
215
|
+
if (data.length !== BNO055_CALIB_PROFILE_LEN) {
|
|
216
|
+
throw new RangeError(`calibration profile is 22 bytes, got ${data.length}`);
|
|
217
|
+
}
|
|
218
|
+
const dv = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
219
|
+
const v = Array.from({ length: 11 }, (_, i) => dv.getInt16(2 * i, true));
|
|
220
|
+
return {
|
|
221
|
+
accelOffset: [v[0], v[1], v[2]],
|
|
222
|
+
magOffset: [v[3], v[4], v[5]],
|
|
223
|
+
gyroOffset: [v[6], v[7], v[8]],
|
|
224
|
+
accelRadius: v[9],
|
|
225
|
+
magRadius: v[10],
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/** Soft-iron matrix, 9 × i16 row-major, 1.0 = 16384. */
|
|
229
|
+
export const BNO055_SIC_IDENTITY = [16384, 0, 0, 0, 16384, 0, 0, 0, 16384];
|
|
230
|
+
export function packBno055SicMatrix(m) {
|
|
231
|
+
if (m.length !== 9)
|
|
232
|
+
throw new RangeError("SIC matrix has 9 elements");
|
|
233
|
+
const out = new Uint8Array(18);
|
|
234
|
+
const dv = new DataView(out.buffer);
|
|
235
|
+
m.forEach((v, i) => dv.setInt16(2 * i, v, true));
|
|
236
|
+
return out;
|
|
237
|
+
}
|
|
238
|
+
export function unpackBno055SicMatrix(data) {
|
|
239
|
+
const dv = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
240
|
+
return Array.from({ length: 9 }, (_, i) => dv.getInt16(2 * i, true));
|
|
241
|
+
}
|
|
242
|
+
// ── axis remap (AXIS_MAP_CONFIG 0x41 / AXIS_MAP_SIGN 0x42) ──────────────────
|
|
243
|
+
export const BNO055_AXIS_X = 0;
|
|
244
|
+
export const BNO055_AXIS_Y = 1;
|
|
245
|
+
export const BNO055_AXIS_Z = 2;
|
|
246
|
+
export const BNO055_DEFAULT_AXIS_REMAP = Object.freeze({
|
|
247
|
+
x: 0,
|
|
248
|
+
y: 1,
|
|
249
|
+
z: 2,
|
|
250
|
+
xNegative: false,
|
|
251
|
+
yNegative: false,
|
|
252
|
+
zNegative: false,
|
|
253
|
+
});
|
|
254
|
+
/**
|
|
255
|
+
* → [AXIS_MAP_CONFIG, AXIS_MAP_SIGN]. The sensor keeps the old mapping when
|
|
256
|
+
* one axis is used twice, so this refuses a non-permutation up front.
|
|
257
|
+
*/
|
|
258
|
+
export function packBno055AxisRemap(a) {
|
|
259
|
+
const sorted = [a.x, a.y, a.z].sort();
|
|
260
|
+
if (sorted[0] !== 0 || sorted[1] !== 1 || sorted[2] !== 2) {
|
|
261
|
+
throw new RangeError(`axis remap must be a permutation of X/Y/Z, got ${a.x}/${a.y}/${a.z}`);
|
|
262
|
+
}
|
|
263
|
+
const config = (a.z << 4) | (a.y << 2) | a.x;
|
|
264
|
+
const sign = (a.xNegative ? 4 : 0) | (a.yNegative ? 2 : 0) | (a.zNegative ? 1 : 0);
|
|
265
|
+
return [config, sign];
|
|
266
|
+
}
|
|
267
|
+
export function unpackBno055AxisRemap(config, sign) {
|
|
268
|
+
return {
|
|
269
|
+
x: config & 3,
|
|
270
|
+
y: (config >> 2) & 3,
|
|
271
|
+
z: (config >> 4) & 3,
|
|
272
|
+
xNegative: (sign & 4) !== 0,
|
|
273
|
+
yNegative: (sign & 2) !== 0,
|
|
274
|
+
zNegative: (sign & 1) !== 0,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/** Datasheet §3.4: placement → [AXIS_MAP_CONFIG, AXIS_MAP_SIGN]; P1 is the default. */
|
|
278
|
+
export const BNO055_PLACEMENTS = {
|
|
279
|
+
P0: [0x21, 0x04],
|
|
280
|
+
P1: [0x24, 0x00],
|
|
281
|
+
P2: [0x24, 0x06],
|
|
282
|
+
P3: [0x21, 0x02],
|
|
283
|
+
P4: [0x24, 0x03],
|
|
284
|
+
P5: [0x21, 0x01],
|
|
285
|
+
P6: [0x21, 0x07],
|
|
286
|
+
P7: [0x24, 0x05],
|
|
287
|
+
};
|
|
288
|
+
export function bno055Placement(name) {
|
|
289
|
+
const p = BNO055_PLACEMENTS[name.toUpperCase()];
|
|
290
|
+
if (p === undefined)
|
|
291
|
+
throw new RangeError(`unknown placement ${name}; expected P0..P7`);
|
|
292
|
+
return unpackBno055AxisRemap(p[0], p[1]);
|
|
293
|
+
}
|
|
294
|
+
// ── page-1 sensor configuration (non-fusion modes only) ─────────────────────
|
|
295
|
+
export const BNO055_ACC_RANGE_G = [2, 4, 8, 16];
|
|
296
|
+
export const BNO055_ACC_BANDWIDTH_HZ = [7.81, 15.63, 31.25, 62.5, 125, 250, 500, 1000];
|
|
297
|
+
export const BNO055_GYR_RANGE_DPS = [2000, 1000, 500, 250, 125];
|
|
298
|
+
export const BNO055_GYR_BANDWIDTH_HZ = [523, 230, 116, 47, 23, 12, 64, 32];
|
|
299
|
+
export const BNO055_MAG_RATE_HZ = [2, 6, 8, 10, 15, 20, 25, 30];
|
|
300
|
+
export function packBno055AccelConfig(c) {
|
|
301
|
+
return ((c.power & 7) << 5) | ((c.bandwidth & 7) << 2) | (c.range & 3);
|
|
302
|
+
}
|
|
303
|
+
export function unpackBno055AccelConfig(v) {
|
|
304
|
+
return { range: v & 3, bandwidth: (v >> 2) & 7, power: (v >> 5) & 7 };
|
|
305
|
+
}
|
|
306
|
+
export function packBno055GyroConfig(c) {
|
|
307
|
+
return Uint8Array.of(((c.bandwidth & 7) << 3) | (c.range & 7), c.power & 7);
|
|
308
|
+
}
|
|
309
|
+
export function unpackBno055GyroConfig(b) {
|
|
310
|
+
return { range: b[0] & 7, bandwidth: (b[0] >> 3) & 7, power: b[1] & 7 };
|
|
311
|
+
}
|
|
312
|
+
export function packBno055MagConfig(c) {
|
|
313
|
+
return ((c.power & 3) << 5) | ((c.mode & 3) << 3) | (c.rate & 7);
|
|
314
|
+
}
|
|
315
|
+
export function unpackBno055MagConfig(v) {
|
|
316
|
+
return { rate: v & 7, mode: (v >> 3) & 3, power: (v >> 5) & 3 };
|
|
317
|
+
}
|
|
318
|
+
export function makeBno055SystemStatus(selfTest, clkStatus, status, error) {
|
|
319
|
+
return {
|
|
320
|
+
selfTest,
|
|
321
|
+
clkStatus,
|
|
322
|
+
status,
|
|
323
|
+
error,
|
|
324
|
+
statusText: BNO055_SYS_STATUS_NAMES[status] ?? `unknown (${status})`,
|
|
325
|
+
errorText: BNO055_SYS_ERR_NAMES[error] ?? `unknown (${error})`,
|
|
326
|
+
selfTestPassed: (selfTest & BNO055_EXPECTED_SELF_TEST) === BNO055_EXPECTED_SELF_TEST,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
const CHANNELS = [
|
|
330
|
+
["accel", BNO055_REG_ACC_DATA, 3],
|
|
331
|
+
["mag", BNO055_REG_MAG_DATA, 3],
|
|
332
|
+
["gyro", BNO055_REG_GYR_DATA, 3],
|
|
333
|
+
["euler", BNO055_REG_EUL_DATA, 3],
|
|
334
|
+
["quaternion", BNO055_REG_QUA_DATA, 4],
|
|
335
|
+
["linearAccel", BNO055_REG_LIA_DATA, 3],
|
|
336
|
+
["gravity", BNO055_REG_GRV_DATA, 3],
|
|
337
|
+
];
|
|
338
|
+
/** Unpack whatever channels the register window starting at `addr` holds. */
|
|
339
|
+
export function decodeBno055Block(addr, data) {
|
|
340
|
+
const dv = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
341
|
+
const end = addr + data.length;
|
|
342
|
+
const out = {
|
|
343
|
+
accel: null,
|
|
344
|
+
mag: null,
|
|
345
|
+
gyro: null,
|
|
346
|
+
euler: null,
|
|
347
|
+
quaternion: null,
|
|
348
|
+
linearAccel: null,
|
|
349
|
+
gravity: null,
|
|
350
|
+
temperature: null,
|
|
351
|
+
calibStat: null,
|
|
352
|
+
};
|
|
353
|
+
for (const [name, reg, n] of CHANNELS) {
|
|
354
|
+
if (addr <= reg && reg + 2 * n <= end) {
|
|
355
|
+
const v = Array.from({ length: n }, (_, i) => dv.getInt16(reg - addr + 2 * i, true));
|
|
356
|
+
out[name] = v;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
if (addr <= BNO055_REG_TEMP && BNO055_REG_TEMP < end)
|
|
360
|
+
out.temperature = dv.getInt8(BNO055_REG_TEMP - addr);
|
|
361
|
+
if (addr <= BNO055_REG_CALIB_STAT && BNO055_REG_CALIB_STAT < end) {
|
|
362
|
+
out.calibStat = dv.getUint8(BNO055_REG_CALIB_STAT - addr);
|
|
363
|
+
}
|
|
364
|
+
return out;
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=regs.js.map
|