This repository was archived by the owner on Aug 22, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBNO055.h
236 lines (192 loc) · 9.19 KB
/
BNO055.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#ifndef BNO055_H_
#define BNO055_H_
#include "I2CInstruction.h"
// Change to 0x29 if using 0x29 as the address
#define BNO055_I2C_ADDR (0x28)
/* Function prototypes */
/* Sends the instructions to the IMU to write reg with data toWrite
* Returns an I2CInstruction ID for the final instruction sent */
I2CInstruction_ID bno055WriteReg(uint8_t toWrite, uint8_t reg);
/* Sends the instructions to the IMU to read reg into out
* Returns an I2CInstruction ID for the final instruction sent */
I2CInstruction_ID bno055ReadReg(uint8_t * out, uint8_t reg);
/* Sends instructions to the IMU to read numOfRegsToRead from firstReg to
* out. Returns an I2CInstruction ID for the final instruction sent */
I2CInstruction_ID bno055MultiRegRead(uint8_t * out,
uint8_t firstReg,
size_t numOfRegsToRead);
/* Sends the instructions to the IMU to enter NDOF fusion mode
* Returns an I2CInstruction ID for the final instruction sent */
I2CInstruction_ID bno055EnterNDOF();
/* Sends the instructions to the IMU to read the current pitch
* Returns an I2CInstruction ID for the final instruction sent */
I2CInstruction_ID bno055GetPitch(uint8_t * out);
/* Sends the instructions to the IMU to read the current roll
* Returns an I2CInstruction ID for the final instruction sent */
I2CInstruction_ID bno055GetRoll(uint8_t * out);
/* Sends the instructions to the IMU to read the current heading
* Returns an I2CInstruction ID for the final instruction sent */
I2CInstruction_ID bno055GetHeading(uint8_t * out);
/* Sends the instructions to the IMU to read all orientations
* Returns an I2CInstruction ID for the final instruction sent */
I2CInstruction_ID bno055GetAllEuler(uint8_t * out);
/* Converts an euler angle uint8_t pair into a float */
void fusionRawToFormatted(uint8_t * raw, double * formatted);
I2CInstruction_ID bno055Task(void);
uint16_t bno055GetCurrHeading(void);
/* REGISTER ADDRESS DEFINITION */
/* Page id register definition*/
#define BNO055_PAGE_ID_ADDR (0X07)
/* PAGE0 REGISTER DEFINITION START*/
#define BNO055_CHIP_ID_ADDR (0x00)
#define BNO055_ACCEL_REV_ID_ADDR (0x01)
#define BNO055_MAG_REV_ID_ADDR (0x02)
#define BNO055_GYRO_REV_ID_ADDR (0x03)
#define BNO055_SW_REV_ID_LSB_ADDR (0x04)
#define BNO055_SW_REV_ID_MSB_ADDR (0x05)
#define BNO055_BL_REV_ID_ADDR (0X06)
/* Accel data register*/
#define BNO055_ACCEL_DATA_X_LSB_ADDR (0X08)
#define BNO055_ACCEL_DATA_X_MSB_ADDR (0X09)
#define BNO055_ACCEL_DATA_Y_LSB_ADDR (0X0A)
#define BNO055_ACCEL_DATA_Y_MSB_ADDR (0X0B)
#define BNO055_ACCEL_DATA_Z_LSB_ADDR (0X0C)
#define BNO055_ACCEL_DATA_Z_MSB_ADDR (0X0D)
/* Mag data register*/
#define BNO055_MAG_DATA_X_LSB_ADDR (0X0E)
#define BNO055_MAG_DATA_X_MSB_ADDR (0X0F)
#define BNO055_MAG_DATA_Y_LSB_ADDR (0X10)
#define BNO055_MAG_DATA_Y_MSB_ADDR (0X11)
#define BNO055_MAG_DATA_Z_LSB_ADDR (0X12)
#define BNO055_MAG_DATA_Z_MSB_ADDR (0X13)
/* Gyro data registers*/
#define BNO055_GYRO_DATA_X_LSB_ADDR (0X14)
#define BNO055_GYRO_DATA_X_MSB_ADDR (0X15)
#define BNO055_GYRO_DATA_Y_LSB_ADDR (0X16)
#define BNO055_GYRO_DATA_Y_MSB_ADDR (0X17)
#define BNO055_GYRO_DATA_Z_LSB_ADDR (0X18)
#define BNO055_GYRO_DATA_Z_MSB_ADDR (0X19)
/* Euler data registers*/
#define BNO055_EULER_HEADING_LSB_ADDR (0X1A)
#define BNO055_EULER_HEADING_MSB_ADDR (0X1B)
#define BNO055_EULER_ROLL_LSB_ADDR (0X1C)
#define BNO055_EULER_ROLL_MSB_ADDR (0X1D)
#define BNO055_EULER_PITCH_LSB_ADDR (0X1E)
#define BNO055_EULER_PITCH_MSB_ADDR (0X1F)
/* Quaternion data registers*/
#define BNO055_QUATERNION_DATA_W_LSB_ADDR (0X20)
#define BNO055_QUATERNION_DATA_W_MSB_ADDR (0X21)
#define BNO055_QUATERNION_DATA_X_LSB_ADDR (0X22)
#define BNO055_QUATERNION_DATA_X_MSB_ADDR (0X23)
#define BNO055_QUATERNION_DATA_Y_LSB_ADDR (0X24)
#define BNO055_QUATERNION_DATA_Y_MSB_ADDR (0X25)
#define BNO055_QUATERNION_DATA_Z_LSB_ADDR (0X26)
#define BNO055_QUATERNION_DATA_Z_MSB_ADDR (0X27)
/* Linear acceleration data registers*/
#define BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR (0X28)
#define BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR (0X29)
#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR (0X2A)
#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR (0X2B)
#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR (0X2C)
#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR (0X2D)
/* Gravity data registers*/
#define BNO055_GRAVITY_DATA_X_LSB_ADDR (0X2E)
#define BNO055_GRAVITY_DATA_X_MSB_ADDR (0X2F)
#define BNO055_GRAVITY_DATA_Y_LSB_ADDR (0X30)
#define BNO055_GRAVITY_DATA_Y_MSB_ADDR (0X31)
#define BNO055_GRAVITY_DATA_Z_LSB_ADDR (0X32)
#define BNO055_GRAVITY_DATA_Z_MSB_ADDR (0X33)
/* Temperature data register*/
#define BNO055_TEMP_ADDR (0X34)
/* Status registers*/
#define BNO055_CALIB_STAT_ADDR (0X35)
#define BNO055_SELFTEST_RESULT_ADDR (0X36)
#define BNO055_INTR_STAT_ADDR (0X37)
#define BNO055_SYS_CLK_STAT_ADDR (0X38)
#define BNO055_SYS_STAT_ADDR (0X39)
#define BNO055_SYS_ERR_ADDR (0X3A)
/* Unit selection register*/
#define BNO055_UNIT_SEL_ADDR (0X3B)
#define BNO055_DATA_SELECT_ADDR (0X3C)
/* Mode registers*/
#define BNO055_OPR_MODE_ADDR (0X3D)
#define BNO055_PWR_MODE_ADDR (0X3E)
#define BNO055_SYS_TRIGGER_ADDR (0X3F)
#define BNO055_TEMP_SOURCE_ADDR (0X40)
/* Axis remap registers*/
#define BNO055_AXIS_MAP_CONFIG_ADDR (0X41)
#define BNO055_AXIS_MAP_SIGN_ADDR (0X42)
/* SIC registers*/
#define BNO055_SIC_MATRIX_0_LSB_ADDR (0X43)
#define BNO055_SIC_MATRIX_0_MSB_ADDR (0X44)
#define BNO055_SIC_MATRIX_1_LSB_ADDR (0X45)
#define BNO055_SIC_MATRIX_1_MSB_ADDR (0X46)
#define BNO055_SIC_MATRIX_2_LSB_ADDR (0X47)
#define BNO055_SIC_MATRIX_2_MSB_ADDR (0X48)
#define BNO055_SIC_MATRIX_3_LSB_ADDR (0X49)
#define BNO055_SIC_MATRIX_3_MSB_ADDR (0X4A)
#define BNO055_SIC_MATRIX_4_LSB_ADDR (0X4B)
#define BNO055_SIC_MATRIX_4_MSB_ADDR (0X4C)
#define BNO055_SIC_MATRIX_5_LSB_ADDR (0X4D)
#define BNO055_SIC_MATRIX_5_MSB_ADDR (0X4E)
#define BNO055_SIC_MATRIX_6_LSB_ADDR (0X4F)
#define BNO055_SIC_MATRIX_6_MSB_ADDR (0X50)
#define BNO055_SIC_MATRIX_7_LSB_ADDR (0X51)
#define BNO055_SIC_MATRIX_7_MSB_ADDR (0X52)
#define BNO055_SIC_MATRIX_8_LSB_ADDR (0X53)
#define BNO055_SIC_MATRIX_8_MSB_ADDR (0X54)
/* Accelerometer Offset registers*/
#define BNO055_ACCEL_OFFSET_X_LSB_ADDR (0X55)
#define BNO055_ACCEL_OFFSET_X_MSB_ADDR (0X56)
#define BNO055_ACCEL_OFFSET_Y_LSB_ADDR (0X57)
#define BNO055_ACCEL_OFFSET_Y_MSB_ADDR (0X58)
#define BNO055_ACCEL_OFFSET_Z_LSB_ADDR (0X59)
#define BNO055_ACCEL_OFFSET_Z_MSB_ADDR (0X5A)
/* Magnetometer Offset registers*/
#define BNO055_MAG_OFFSET_X_LSB_ADDR (0X5B)
#define BNO055_MAG_OFFSET_X_MSB_ADDR (0X5C)
#define BNO055_MAG_OFFSET_Y_LSB_ADDR (0X5D)
#define BNO055_MAG_OFFSET_Y_MSB_ADDR (0X5E)
#define BNO055_MAG_OFFSET_Z_LSB_ADDR (0X5F)
#define BNO055_MAG_OFFSET_Z_MSB_ADDR (0X60)
/* Gyroscope Offset registers*/
#define BNO055_GYRO_OFFSET_X_LSB_ADDR (0X61)
#define BNO055_GYRO_OFFSET_X_MSB_ADDR (0X62)
#define BNO055_GYRO_OFFSET_Y_LSB_ADDR (0X63)
#define BNO055_GYRO_OFFSET_Y_MSB_ADDR (0X64)
#define BNO055_GYRO_OFFSET_Z_LSB_ADDR (0X65)
#define BNO055_GYRO_OFFSET_Z_MSB_ADDR (0X66)
/* Radius registers*/
#define BNO055_ACCEL_RADIUS_LSB_ADDR (0X67)
#define BNO055_ACCEL_RADIUS_MSB_ADDR (0X68)
#define BNO055_MAG_RADIUS_LSB_ADDR (0X69)
#define BNO055_MAG_RADIUS_MSB_ADDR (0X6A)
/* PAGE0 REGISTERS DEFINITION END*/
/* PAGE1 REGISTERS DEFINITION START*/
/* Configuration registers*/
#define BNO055_ACCEL_CONFIG_ADDR (0X08)
#define BNO055_MAG_CONFIG_ADDR (0X09)
#define BNO055_GYRO_CONFIG_ADDR (0X0A)
#define BNO055_GYRO_MODE_CONFIG_ADDR (0X0B)
#define BNO055_ACCEL_SLEEP_CONFIG_ADDR (0X0C)
#define BNO055_GYRO_SLEEP_CONFIG_ADDR (0X0D)
#define BNO055_MAG_SLEEP_CONFIG_ADDR (0x0E)
/* Interrupt registers*/
#define BNO055_INT_MASK_ADDR (0X0F)
#define BNO055_INT_ADDR (0X10)
#define BNO055_ACCEL_ANY_MOTION_THRES_ADDR (0X11)
#define BNO055_ACCEL_INTR_SETTINGS_ADDR (0X12)
#define BNO055_ACCEL_HIGH_G_DURN_ADDR (0X13)
#define BNO055_ACCEL_HIGH_G_THRES_ADDR (0X14)
#define BNO055_ACCEL_NO_MOTION_THRES_ADDR (0X15)
#define BNO055_ACCEL_NO_MOTION_SET_ADDR (0X16)
#define BNO055_GYRO_INTR_SETING_ADDR (0X17)
#define BNO055_GYRO_HIGHRATE_X_SET_ADDR (0X18)
#define BNO055_GYRO_DURN_X_ADDR (0X19)
#define BNO055_GYRO_HIGHRATE_Y_SET_ADDR (0X1A)
#define BNO055_GYRO_DURN_Y_ADDR (0X1B)
#define BNO055_GYRO_HIGHRATE_Z_SET_ADDR (0X1C)
#define BNO055_GYRO_DURN_Z_ADDR (0X1D)
#define BNO055_GYRO_ANY_MOTION_THRES_ADDR (0X1E)
#define BNO055_GYRO_ANY_MOTION_SET_ADDR (0X1F)
#endif /* BNO055_H_ */