44#define CHIP_NAME "TDK MPU6500"
45#define MANUFACTURER_NAME "TDK"
46#define SUPPLY_VOLTAGE_MIN 1.71f
47#define SUPPLY_VOLTAGE_MAX 3.45f
48#define MAX_CURRENT 3.2f
49#define TEMPERATURE_MIN -40.0f
50#define TEMPERATURE_MAX 85.0f
51#define DRIVER_VERSION 1000
56#define MPU6500_REG_SELF_TEST_X_GYRO 0x00
57#define MPU6500_REG_SELF_TEST_Y_GYRO 0x01
58#define MPU6500_REG_SELF_TEST_Z_GYRO 0x02
59#define MPU6500_REG_SELF_TEST_X_ACCEL 0x0D
60#define MPU6500_REG_SELF_TEST_Y_ACCEL 0x0E
61#define MPU6500_REG_SELF_TEST_Z_ACCEL 0x0F
62#define MPU6500_REG_XG_OFFSET_H 0x13
63#define MPU6500_REG_XG_OFFSET_L 0x14
64#define MPU6500_REG_YG_OFFSET_H 0x15
65#define MPU6500_REG_YG_OFFSET_L 0x16
66#define MPU6500_REG_ZG_OFFSET_H 0x17
67#define MPU6500_REG_ZG_OFFSET_L 0x18
68#define MPU6500_REG_SMPRT_DIV 0x19
69#define MPU6500_REG_CONFIG 0x1A
70#define MPU6500_REG_GYRO_CONFIG 0x1B
71#define MPU6500_REG_ACCEL_CONFIG 0x1C
72#define MPU6500_REG_ACCEL_CONFIG2 0x1D
73#define MPU6500_REG_LP_ACCEL_ODR 0x1E
74#define MPU6500_REG_WOM_THR 0x1F
75#define MPU6500_REG_MOTION_DURATION 0x20
76#define MPU6500_REG_FIFO_EN 0x23
77#define MPU6500_REG_I2C_MST_CTRL 0x24
78#define MPU6500_REG_I2C_MST_STATUS 0x36
79#define MPU6500_REG_I2C_MST_DELAY_CTRL 0x67
80#define MPU6500_REG_I2C_SLV0_ADDR 0x25
81#define MPU6500_REG_I2C_SLV0_REG 0x26
82#define MPU6500_REG_I2C_SLV0_CTRL 0x27
83#define MPU6500_REG_I2C_SLV0_DO 0x63
84#define MPU6500_REG_I2C_SLV1_ADDR 0x28
85#define MPU6500_REG_I2C_SLV1_REG 0x29
86#define MPU6500_REG_I2C_SLV1_CTRL 0x2A
87#define MPU6500_REG_I2C_SLV1_DO 0x64
88#define MPU6500_REG_I2C_SLV2_ADDR 0x2B
89#define MPU6500_REG_I2C_SLV2_REG 0x2C
90#define MPU6500_REG_I2C_SLV2_CTRL 0x2D
91#define MPU6500_REG_I2C_SLV2_DO 0x65
92#define MPU6500_REG_I2C_SLV3_ADDR 0x2E
93#define MPU6500_REG_I2C_SLV3_REG 0x2F
94#define MPU6500_REG_I2C_SLV3_CTRL 0x30
95#define MPU6500_REG_I2C_SLV3_DO 0x66
96#define MPU6500_REG_I2C_SLV4_ADDR 0x31
97#define MPU6500_REG_I2C_SLV4_REG 0x32
98#define MPU6500_REG_I2C_SLV4_CTRL 0x34
99#define MPU6500_REG_I2C_SLV4_DO 0x33
100#define MPU6500_REG_I2C_SLV4_DI 0x35
101#define MPU6500_REG_EXT_SENS_DATA_00 0x49
102#define MPU6500_REG_INT_PIN_CFG 0x37
103#define MPU6500_REG_INT_ENABLE 0x38
104#define MPU6500_REG_INT_STATUS 0x3A
105#define MPU6500_REG_ACCEL_XOUT_H 0x3B
106#define MPU6500_REG_ACCEL_XOUT_L 0x3C
107#define MPU6500_REG_ACCEL_YOUT_H 0x3D
108#define MPU6500_REG_ACCEL_YOUT_L 0x3E
109#define MPU6500_REG_ACCEL_ZOUT_H 0x3F
110#define MPU6500_REG_ACCEL_ZOUT_L 0x40
111#define MPU6500_REG_TEMP_OUT_H 0x41
112#define MPU6500_REG_TEMP_OUT_L 0x42
113#define MPU6500_REG_GYRO_XOUT_H 0x43
114#define MPU6500_REG_GYRO_XOUT_L 0x44
115#define MPU6500_REG_GYRO_YOUT_H 0x45
116#define MPU6500_REG_GYRO_YOUT_L 0x46
117#define MPU6500_REG_GYRO_ZOUT_H 0x47
118#define MPU6500_REG_GYRO_ZOUT_L 0x48
119#define MPU6500_REG_SIGNAL_PATH_RESET 0x68
120#define MPU6500_REG_MOT_DETECT_CTRL 0x69
121#define MPU6500_REG_USER_CTRL 0x6A
122#define MPU6500_REG_PWR_MGMT_1 0x6B
123#define MPU6500_REG_PWR_MGMT_2 0x6C
124#define MPU6500_REG_BANK_SEL 0x6D
125#define MPU6500_REG_MEM 0x6F
126#define MPU6500_REG_PROGRAM_START 0x70
127#define MPU6500_REG_FIFO_COUNTH 0x72
128#define MPU6500_REG_FIFO_COUNTL 0x73
129#define MPU6500_REG_R_W 0x74
130#define MPU6500_REG_WHO_AM_I 0x75
131#define MPU6500_REG_XA_OFFSET_H 0x77
132#define MPU6500_REG_XA_OFFSET_L 0x78
133#define MPU6500_REG_YA_OFFSET_H 0x7A
134#define MPU6500_REG_YA_OFFSET_L 0x7B
135#define MPU6500_REG_ZA_OFFSET_H 0x7D
136#define MPU6500_REG_ZA_OFFSET_L 0x7E
141#define MPU6500_DMP_SAMPLE_RATE 200
142#define MPU6500_DMP_GYRO_SF (46850825LL * 200 / MPU6500_DMP_SAMPLE_RATE)
143#define MPU6500_DMP_D_PEDSTD_TIMECTR 964
144#define MPU6500_DMP_D_PEDSTD_STEPCTR (768 + 0x60)
145#define MPU6500_DMP_D_1_36 (256 + 36)
146#define MPU6500_DMP_D_1_40 (256 + 40)
147#define MPU6500_DMP_D_1_44 (256 + 44)
148#define MPU6500_DMP_D_1_72 (256 + 72)
149#define MPU6500_DMP_D_1_79 (256 + 79)
150#define MPU6500_DMP_D_1_88 (256 + 88)
151#define MPU6500_DMP_D_1_90 (256 + 90)
152#define MPU6500_DMP_D_1_92 (256 + 92)
153#define MPU6500_DMP_D_1_218 (256 + 218)
154#define MPU6500_DMP_D_0_22 (512 + 22)
155#define MPU6500_DMP_D_0_104 104
156#define MPU6500_DMP_TAPW_MIN 478
157#define MPU6500_DMP_TAP_THX 468
158#define MPU6500_DMP_TAP_THY 472
159#define MPU6500_DMP_TAP_THZ 476
160#define MPU6500_DMP_CFG_6 2753
161#define MPU6500_DMP_CFG_8 2718
162#define MPU6500_DMP_CFG_MOTION_BIAS 1208
163#define MPU6500_DMP_CFG_LP_QUAT 2712
164#define MPU6500_DMP_CFG_FIFO_ON_EVENT 2690
165#define MPU6500_DMP_FCFG_1 1062
166#define MPU6500_DMP_FCFG_2 1066
167#define MPU6500_DMP_FCFG_3 1088
168#define MPU6500_DMP_FCFG_7 1073
169#define MPU6500_DMP_D_EXT_GYRO_BIAS_X (61 * 16)
170#define MPU6500_DMP_D_EXT_GYRO_BIAS_Y (61 * 16 + 4)
171#define MPU6500_DMP_D_EXT_GYRO_BIAS_Z (61 * 16 + 8)
172#define MPU6500_DMP_D_ACCEL_BIAS 660
173#define MPU6500_DMP_FEATURE_SEND_ANY_GYRO (MPU6500_DMP_FEATURE_SEND_RAW_GYRO | \
174 MPU6500_DMP_FEATURE_SEND_CAL_GYRO)
175#define MPU6500_DMP_CFG_15 2727
176#define MPU6500_DMP_CFG_27 2742
177#define MPU6500_DMP_CFG_GYRO_RAW_DATA 2722
178#define MPU6500_DMP_CFG_20 2224
179#define MPU6500_DMP_CFG_ORIENT_INT 1853
180#define MPU6500_DMP_QUAT_ERROR_THRESH (1L << 24)
181#define MPU6500_DMP_QUAT_MAG_SQ_NORMALIZED (1L << 28)
182#define MPU6500_DMP_QUAT_MAG_SQ_MIN (MPU6500_DMP_QUAT_MAG_SQ_NORMALIZED - \
183 MPU6500_DMP_QUAT_ERROR_THRESH)
184#define MPU6500_DMP_QUAT_MAG_SQ_MAX (MPU6500_DMP_QUAT_MAG_SQ_NORMALIZED + \
185 MPU6500_DMP_QUAT_ERROR_THRESH)
186#define MPU6500_DMP_INT_SRC_TAP 0x01
187#define MPU6500_DMP_INT_SRC_ORIENT 0x08
188#define MPU6500_DMP_TAP_THRESH 250
189#define MPU6500_DMP_TAP_MIN_TAP_COUNT 1
190#define MPU6500_DMP_TAP_TIME 100
191#define MPU6500_DMP_TAP_TIME_MULTI 200
192#define MPU6500_DMP_SHAKE_REJECT_THRESH 200
193#define MPU6500_DMP_SHAKE_REJECT_TIME 40
194#define MPU6500_DMP_SHAKE_REJECT_TIMEOUT 10
199#define MIN(a, b) (((a) < (b)) ? (a) : (b))
204static uint16_t gs_st_tb[256] =
206 2620, 2646, 2672, 2699, 2726, 2753, 2781, 2808,
207 2837, 2865, 2894, 2923, 2952, 2981, 3011, 3041,
208 3072, 3102, 3133, 3165, 3196, 3228, 3261, 3293,
209 3326, 3359, 3393, 3427, 3461, 3496, 3531, 3566,
210 3602, 3638, 3674, 3711, 3748, 3786, 3823, 3862,
211 3900, 3939, 3979, 4019, 4059, 4099, 4140, 4182,
212 4224, 4266, 4308, 4352, 4395, 4439, 4483, 4528,
213 4574, 4619, 4665, 4712, 4759, 4807, 4855, 4903,
214 4953, 5002, 5052, 5103, 5154, 5205, 5257, 5310,
215 5363, 5417, 5471, 5525, 5581, 5636, 5693, 5750,
216 5807, 5865, 5924, 5983, 6043, 6104, 6165, 6226,
217 6289, 6351, 6415, 6479, 6544, 6609, 6675, 6742,
218 6810, 6878, 6946, 7016, 7086, 7157, 7229, 7301,
219 7374, 7448, 7522, 7597, 7673, 7750, 7828, 7906,
220 7985, 8065, 8145, 8227, 8309, 8392, 8476, 8561,
221 8647, 8733, 8820, 8909, 8998, 9088, 9178, 9270,
222 9363, 9457, 9551, 9647, 9743, 9841, 9939, 10038,
223 10139, 10240, 10343, 10446, 10550, 10656, 10763, 10870,
224 10979, 11089, 11200, 11312, 11425, 11539, 11654, 11771,
225 11889, 12008, 12128, 12249, 12371, 12495, 12620, 12746,
226 12874, 13002, 13132, 13264, 13396, 13530, 13666, 13802,
227 13940, 14080, 14221, 14363, 14506, 14652, 14798, 14946,
228 15096, 15247, 15399, 15553, 15709, 15866, 16024, 16184,
229 16346, 16510, 16675, 16842, 17010, 17180, 17352, 17526,
230 17701, 17878, 18057, 18237, 18420, 18604, 18790, 18978,
231 19167, 19359, 19553, 19748, 19946, 20145, 20347, 20550,
232 20756, 20963, 21173, 21385, 21598, 21814, 22033, 22253,
233 22475, 22700, 22927, 23156, 23388, 23622, 23858, 24097,
234 24338, 24581, 24827, 25075, 25326, 25579, 25835, 26093,
235 26354, 26618, 26884, 27153, 27424, 27699, 27976, 28255,
236 28538, 28823, 29112, 29403, 29697, 29994, 30294, 30597,
237 30903, 31212, 31524, 31839, 32157, 32479, 32804, 33132,
251static uint8_t a_mpu6500_read(
mpu6500_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
266 if (handle->
spi_read(reg | 0x80, (uint8_t *)buf, len) != 0)
288static uint8_t a_mpu6500_write(
mpu6500_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
303 if (handle->
spi_write(reg & (~0x80), (uint8_t *)buf, len) != 0)
326static uint8_t a_mpu6500_write_mem(
mpu6500_handle_t *handle, uint16_t addr, uint8_t *buf, uint16_t len)
330 tmp[0] = (addr >> 8) & 0xFF;
331 tmp[1] = (addr >> 0) & 0xFF;
333 if (tmp[1] + len > 256)
376static uint8_t a_mpu6500_read_mem(
mpu6500_handle_t *handle, uint16_t addr, uint8_t *buf, uint16_t len)
380 tmp[0] = (addr >> 8) & 0xFF;
381 tmp[1] = (addr >> 0) & 0xFF;
383 if (tmp[1] + len > 256)
432 handle->
debug_print(
"mpu6500: read int enable register failed.\n");
439 handle->
debug_print(
"mpu6500: read fifo enable register failed.\n");
446 handle->
debug_print(
"mpu6500: read user ctrl register failed.\n");
455 handle->
debug_print(
"mpu6500: write int enable register failed.\n");
463 handle->
debug_print(
"mpu6500: write fifo enable register failed.\n");
467 user_ctrl &= ~(1 << 6);
468 user_ctrl &= ~(1 << 7);
471 user_ctrl |= (1 << 2) | (1 << 3);
480 handle->
debug_print(
"mpu6500: write user ctrl register failed.\n");
487 user_ctrl |= (1 << 6) | (1 << 7);
496 handle->
debug_print(
"mpu6500: write user ctrl register failed.\n");
504 handle->
debug_print(
"mpu6500: write int enable register failed.\n");
511 handle->
debug_print(
"mpu6500: write fifo enable register failed.\n");
525static uint16_t a_mpu6500_inv_row_2_scale(int8_t *row)
567static uint16_t a_mpu6500_inv_orientation_matrix_to_scalar(int8_t *mtx)
571 scalar = a_mpu6500_inv_row_2_scale(mtx);
572 scalar |= a_mpu6500_inv_row_2_scale(mtx + 3) << 3;
573 scalar |= a_mpu6500_inv_row_2_scale(mtx + 6) << 6;
583static void a_mpu6500_dmp_decode_gesture(
mpu6500_handle_t *handle, uint8_t gesture[4])
588 orient = gesture[3] & 0xC0;
589 tap = 0x3F & gesture[3];
592 uint8_t direction, count;
594 direction = tap >> 3;
595 count = (tap % 8) + 1;
620static uint8_t a_mpu6500_accel_self_test(
mpu6500_handle_t *handle, int32_t *bias_regular, int32_t *bias_st)
624 uint8_t otp_value_zero;
626 float accel_st_al_min;
627 float accel_st_al_max;
628 float accel_offset_max;
629 float st_shift_cust[3];
630 float st_shift_ratio[3];
631 float ct_shift_prod[3];
640 for (i = 0; i < 3; i++)
644 ct_shift_prod[i] = (float)gs_st_tb[regs[i] - 1];
645 ct_shift_prod[i] *= 65536.f;
646 ct_shift_prod[i] /= 16384.0f;
650 ct_shift_prod[i] = 0.0f;
654 if (otp_value_zero == 0)
656 for (i = 0; i < 3; i++)
658 st_shift_cust[i] = (float)(bias_st[i] - bias_regular[i]);
659 st_shift_ratio[i] = st_shift_cust[i] / ct_shift_prod[i] - 1.f;
660 if (fabsf(st_shift_ratio[i]) > 0.5f)
668 accel_st_al_min = 0.225f * 65536.f;
669 accel_st_al_max = 0.675f * 65536.f;
670 for (i = 0; i < 3; i++)
672 st_shift_cust[i] = (float)(bias_st[i] - bias_regular[i]);
673 if (st_shift_cust[i] < accel_st_al_min
674 || st_shift_cust[i] > accel_st_al_max)
681 accel_offset_max = 0.5f * 65536.f;
682 for (i = 0; i < 3; i++)
684 if (fabsf((
float)bias_regular[i]) > accel_offset_max)
703static uint8_t a_mpu6500_gyro_self_test(
mpu6500_handle_t *handle, int32_t *bias_regular, int32_t *bias_st)
707 uint8_t otp_value_zero;
708 float gyro_st_al_max;
709 float gyro_offset_max;
710 float st_shift_cust[3];
711 float st_shift_ratio[3];
712 float ct_shift_prod[3];
722 for (i = 0; i < 3; i++)
726 ct_shift_prod[i] = (float)gs_st_tb[regs[i] - 1];
727 ct_shift_prod[i] *= 65536.f;
728 ct_shift_prod[i] /= 131.0f;
732 ct_shift_prod[i] = 0;
737 if (otp_value_zero == 0)
739 for (i = 0; i < 3; i++)
741 st_shift_cust[i] = (float)(bias_st[i] - bias_regular[i]);
742 st_shift_ratio[i] = st_shift_cust[i] / ct_shift_prod[i];
743 if (fabsf(st_shift_ratio[i]) < 0.5f)
751 gyro_st_al_max = 60.f * 65536.f;
752 for (i = 0; i < 3; i++)
754 st_shift_cust[i] = (float)(bias_st[i] - bias_regular[i]);
755 if (st_shift_cust[i] < gyro_st_al_max)
762 gyro_offset_max = 20.f * 65536.f;
763 for (i = 0; i < 3; i++)
765 if( fabsf((
float)bias_regular[i]) > gyro_offset_max)
786 int32_t gyro_offset[3], int32_t accel_offset[3],
787 uint8_t hw_test_enable)
830 data[0] = 1 << 3 | 1 << 2;
849 if (hw_test_enable != 0)
851 data[0] = 0x00 | 0xE0;
862 if (hw_test_enable != 0)
864 data[0] = 0x18 | 0xE0;
875 if (hw_test_enable != 0)
905 cnt = ((uint16_t)data[0] << 8) | data[1];
914 for (i = 0; i < pack_cnt; i++)
916 int16_t accel_cur[3];
925 accel_cur[0] = ((int16_t)data[0] << 8) | data[1];
926 accel_cur[1] = ((int16_t)data[2] << 8) | data[3];
927 accel_cur[2] = ((int16_t)data[4] << 8) | data[5];
928 accel_offset[0] += (int32_t)accel_cur[0];
929 accel_offset[1] += (int32_t)accel_cur[1];
930 accel_offset[2] += (int32_t)accel_cur[2];
931 gyro_cur[0] = (((int16_t)data[6] << 8) | data[7]);
932 gyro_cur[1] = (((int16_t)data[8] << 8) | data[9]);
933 gyro_cur[2] = (((int16_t)data[10] << 8) | data[11]);
934 gyro_offset[0] += (int32_t)gyro_cur[0];
935 gyro_offset[1] += (int32_t)gyro_cur[1];
936 gyro_offset[2] += (int32_t)gyro_cur[2];
939 gyro_offset[0] = (int32_t)(((int64_t)gyro_offset[0] << 16) / (32768 / 250) / pack_cnt);
940 gyro_offset[1] = (int32_t)(((int64_t)gyro_offset[1] << 16) / (32768 / 250) / pack_cnt);
941 gyro_offset[2] = (int32_t)(((int64_t)gyro_offset[2] << 16) / (32768 / 250) / pack_cnt);
942 accel_offset[0] = (int32_t)(((int64_t)accel_offset[0] << 16) / (32768 / 16) / pack_cnt);
943 accel_offset[1] = (int32_t)(((int64_t)accel_offset[1] << 16) / (32768 / 16) / pack_cnt);
944 accel_offset[2] = (int32_t)(((int64_t)accel_offset[2] << 16) / (32768 / 16) / pack_cnt);
945 if (accel_offset[2] > 0L)
947 accel_offset[2] -= 65536L;
951 accel_offset[2] += 65536L;
1009 uint16_t this_write;
1023 handle->
debug_print(
"mpu6500: dmp is running.\n");
1029 for (i = 0; i < size; i += this_write)
1031 this_write =
MIN(16, size - i);
1033 res = a_mpu6500_write_mem(handle, i, (uint8_t *)(gs_mpu6500_dmp_code + i),
1037 handle->
debug_print(
"mpu6500: write mem failed.\n");
1041 res = a_mpu6500_read_mem(handle, i, cur, this_write);
1044 handle->
debug_print(
"mpu6500: read mem failed.\n");
1048 if (memcmp(gs_mpu6500_dmp_code + i, cur, this_write) != 0)
1050 handle->
debug_print(
"mpu6500: code compare error.\n");
1055 tmp[0] = (0x0400 >> 8) & 0xFF;
1056 tmp[1] = (0x0400 >> 0) & 0xFF;
1060 handle->
debug_print(
"mpu6500: set program start failed.\n");
1096 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1102 tmp[0] = (uint8_t)((ms >> 24) & 0xFF);
1103 tmp[1] = (uint8_t)((ms >> 16) & 0xFF);
1104 tmp[2] = (uint8_t)((ms >> 8) & 0xFF);
1105 tmp[3] = (uint8_t)(ms & 0xFF);
1110 handle->
debug_print(
"mpu6500: write mem failed.\n");
1145 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1153 handle->
debug_print(
"mpu6500: read mem failed.\n");
1157 *ms = (((uint32_t)tmp[0] << 24) | ((uint32_t)tmp[1] << 16) |
1158 ((uint32_t)tmp[2] << 8) | tmp[3]) * 20;
1190 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1195 tmp[0] = (uint8_t)((count >> 24) & 0xFF);
1196 tmp[1] = (uint8_t)((count >> 16) & 0xFF);
1197 tmp[2] = (uint8_t)((count >> 8) & 0xFF);
1198 tmp[3] = (uint8_t)(count & 0xFF);
1203 handle->
debug_print(
"mpu6500: write mem failed.\n");
1238 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1246 handle->
debug_print(
"mpu6500: read mem failed.\n");
1250 *count = (((uint32_t)tmp[0] << 24) | ((uint32_t)tmp[1] << 16) |
1251 ((uint32_t)tmp[2] << 8) | tmp[3]);
1283 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1289 tmp[0] = (ms >> 8) & 0xFF;
1290 tmp[1] = (ms >> 0) & 0xFF;
1295 handle->
debug_print(
"mpu6500: write mem failed.\n");
1330 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1338 handle->
debug_print(
"mpu6500: read mem failed.\n");
1342 *ms = (uint16_t)((uint16_t)tmp[0] << 8) | tmp[1];
1375 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1381 tmp[0] = (ms >> 8) & 0xFF;
1382 tmp[1] = (ms >> 0) & 0xFF;
1387 handle->
debug_print(
"mpu6500: write mem failed.\n");
1422 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1430 handle->
debug_print(
"mpu6500: read mem failed.\n");
1434 *ms = (uint16_t)((uint16_t)tmp[0] << 8) | tmp[1];
1456 uint32_t thresh_scaled;
1468 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1474 tmp[0] = (uint8_t)(((uint32_t)thresh_scaled >> 24) & 0xFF);
1475 tmp[1] = (uint8_t)(((uint32_t)thresh_scaled >> 16) & 0xFF);
1476 tmp[2] = (uint8_t)(((uint32_t)thresh_scaled >> 8) & 0xFF);
1477 tmp[3] = (uint8_t)((uint32_t)thresh_scaled & 0xFF);
1482 handle->
debug_print(
"mpu6500: write mem failed.\n");
1506 uint32_t thresh_scaled;
1518 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1526 handle->
debug_print(
"mpu6500: read mem failed.\n");
1530 thresh_scaled = (((uint32_t)tmp[0] << 24) | ((uint32_t)tmp[1] << 16) |
1531 ((uint32_t)tmp[2] << 8) | tmp[3]);
1532 *dps = (uint16_t)((
float)(thresh_scaled) /
1565 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1571 tmp[0] = (ms >> 8) & 0xFF;
1572 tmp[1] = (ms >> 0) & 0xFF;
1577 handle->
debug_print(
"mpu6500: write mem failed.\n");
1612 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1620 handle->
debug_print(
"mpu6500: read mem failed.\n");
1624 *ms = (uint16_t)((uint16_t)tmp[0] << 8) | tmp[1];
1657 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1663 tmp[0] = (ms >> 8) & 0xFF;
1664 tmp[1] = (ms >> 0) & 0xFF;
1669 handle->
debug_print(
"mpu6500: write mem failed.\n");
1704 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1712 handle->
debug_print(
"mpu6500: read mem failed.\n");
1716 *ms = (uint16_t)((uint16_t)tmp[0] << 8) | tmp[1];
1750 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1754 if ((cnt < 1) || (cnt > 4))
1756 handle->
debug_print(
"mpu6500: cnt must be between 1 and 4.\n");
1765 handle->
debug_print(
"mpu6500: write mem failed.\n");
1800 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1808 handle->
debug_print(
"mpu6500: read mem failed.\n");
1843 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1850 uint8_t regs[9] = {0xb8, 0xaa, 0xb3, 0x8d, 0xb4, 0x98, 0x0d, 0x35, 0x5d};
1855 handle->
debug_print(
"mpu6500: write mem failed.\n");
1865 uint8_t regs[9] = {0xb8, 0xaa, 0xaa, 0xaa, 0xb0, 0x88, 0xc3, 0xc5, 0xc7};
1870 handle->
debug_print(
"mpu6500: write mem failed.\n");
1906 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1913 uint8_t regs[4] = {0xC0, 0xC2, 0xC4, 0xC6};
1918 handle->
debug_print(
"mpu6500: write mem failed.\n");
1922 res = a_mpu6500_reset_fifo(handle);
1925 handle->
debug_print(
"mpu6500: reset fifo failed.\n");
1935 uint8_t regs[4] = {0x8B, 0x8B, 0x8B, 0x8B};
1940 handle->
debug_print(
"mpu6500: write mem failed.\n");
1944 res = a_mpu6500_reset_fifo(handle);
1947 handle->
debug_print(
"mpu6500: reset fifo failed.\n");
1983 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
1990 uint8_t regs[4] = {0x20, 0x28, 0x30, 0x38};
1995 handle->
debug_print(
"mpu6500: write mem failed.\n");
1999 res = a_mpu6500_reset_fifo(handle);
2002 handle->
debug_print(
"mpu6500: reset fifo failed.\n");
2012 uint8_t regs[4] = {0xA3, 0xA3, 0xA3, 0xA3};
2017 handle->
debug_print(
"mpu6500: write mem failed.\n");
2021 res = a_mpu6500_reset_fifo(handle);
2024 handle->
debug_print(
"mpu6500: reset fifo failed.\n");
2060 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
2067 uint8_t regs_continuous[11] = {0xd8, 0xb1, 0xb9,
2073 (uint8_t *)regs_continuous, 11);
2076 handle->
debug_print(
"mpu6500: write mem failed.\n");
2085 uint8_t regs_gesture[11] = {0xda, 0xb1, 0xb9,
2091 (uint8_t *)regs_gesture, 11);
2094 handle->
debug_print(
"mpu6500: write mem failed.\n");
2119 int32_t gyro_bias_body[3];
2131 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
2136 gyro_bias_body[0] = bias[handle->
orient & 3];
2137 if ((handle->
orient & 4) != 0)
2139 gyro_bias_body[0] *= -1;
2141 gyro_bias_body[1] = bias[(handle->
orient >> 3) & 3];
2142 if ((handle->
orient & 0x20) != 0)
2144 gyro_bias_body[1] *= -1;
2146 gyro_bias_body[2] = bias[(handle->
orient >> 6) & 3];
2147 if ((handle->
orient & 0x100) != 0)
2149 gyro_bias_body[2] *= -1;
2156 regs[0] = (uint8_t)((gyro_bias_body[0] >> 24) & 0xFF);
2157 regs[1] = (uint8_t)((gyro_bias_body[0] >> 16) & 0xFF);
2158 regs[2] = (uint8_t)((gyro_bias_body[0] >> 8) & 0xFF);
2159 regs[3] = (uint8_t)(gyro_bias_body[0] & 0xFF);
2163 handle->
debug_print(
"mpu6500: write mem failed.\n");
2167 regs[0] = (uint8_t)((gyro_bias_body[1] >> 24) & 0xFF);
2168 regs[1] = (uint8_t)((gyro_bias_body[1] >> 16) & 0xFF);
2169 regs[2] = (uint8_t)((gyro_bias_body[1] >> 8) & 0xFF);
2170 regs[3] = (uint8_t)(gyro_bias_body[1] & 0xFF);
2174 handle->
debug_print(
"mpu6500: write mem failed.\n");
2178 regs[0] = (uint8_t)((gyro_bias_body[2] >> 24) & 0xFF);
2179 regs[1] = (uint8_t)((gyro_bias_body[2] >> 16) & 0xFF);
2180 regs[2] = (uint8_t)((gyro_bias_body[2] >> 8) & 0xFF);
2181 regs[3] = (uint8_t)(gyro_bias_body[2] & 0xFF);
2185 handle->
debug_print(
"mpu6500: write mem failed.\n");
2210 int32_t accel_bias_body[3];
2224 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
2232 handle->
debug_print(
"mpu6500: read accelerometer config failed.\n");
2236 range = ((prev >> 3) & 0x3);
2239 accel_sf = (int64_t)16384 << 15;
2241 else if (range == 1)
2243 accel_sf = (int64_t)8192 << 15;
2245 else if (range == 2)
2247 accel_sf = (int64_t)4096 << 15;
2251 accel_sf = (int64_t)2048 << 15;
2254 accel_bias_body[0] = bias[handle->
orient & 3];
2255 if ((handle->
orient & 4) != 0)
2257 accel_bias_body[0] *= -1;
2259 accel_bias_body[1] = bias[(handle->
orient >> 3) & 3];
2260 if ((handle->
orient & 0x20) != 0)
2262 accel_bias_body[1] *= -1;
2264 accel_bias_body[2] = bias[(handle->
orient >> 6) & 3];
2265 if ((handle->
orient & 0x100) != 0)
2267 accel_bias_body[2] *= -1;
2270 accel_bias_body[0] = (int32_t)(((int64_t)accel_bias_body[0] * accel_sf) >> 30);
2271 accel_bias_body[1] = (int32_t)(((int64_t)accel_bias_body[1] * accel_sf) >> 30);
2272 accel_bias_body[2] = (int32_t)(((int64_t)accel_bias_body[2] * accel_sf) >> 30);
2273 regs[0] = (uint8_t)((accel_bias_body[0] >> 24) & 0xFF);
2274 regs[1] = (uint8_t)((accel_bias_body[0] >> 16) & 0xFF);
2275 regs[2] = (uint8_t)((accel_bias_body[0] >> 8) & 0xFF);
2276 regs[3] = (uint8_t)(accel_bias_body[0] & 0xFF);
2277 regs[4] = (uint8_t)((accel_bias_body[1] >> 24) & 0xFF);
2278 regs[5] = (uint8_t)((accel_bias_body[1] >> 16) & 0xFF);
2279 regs[6] = (uint8_t)((accel_bias_body[1] >> 8) & 0xFF);
2280 regs[7] = (uint8_t)(accel_bias_body[1] & 0xFF);
2281 regs[8] = (uint8_t)((accel_bias_body[2] >> 24) & 0xFF);
2282 regs[9] = (uint8_t)((accel_bias_body[2] >> 16) & 0xFF);
2283 regs[10] = (uint8_t)((accel_bias_body[2] >> 8) & 0xFF);
2284 regs[11] = (uint8_t)(accel_bias_body[2] & 0xFF);
2288 handle->
debug_print(
"mpu6500: write mem failed.\n");
2310 uint8_t gyro_axes[4] = {0x4C, 0xCD, 0x6C, 0x00};
2311 uint8_t accel_axes[4] = {0x0C, 0xC9, 0x2C, 0x00 };
2312 uint8_t gyro_sign[4] = {0x36, 0x56, 0x76, 0x00 };
2313 uint8_t accel_sign[4] = {0x26, 0x46, 0x66, 0x00 };
2315 uint8_t gyro_regs[3];
2316 uint8_t accel_regs[3];
2329 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
2334 orient = a_mpu6500_inv_orientation_matrix_to_scalar(mat);
2335 gyro_regs[0] = gyro_axes[orient & 3];
2336 gyro_regs[1] = gyro_axes[(orient >> 3) & 3];
2337 gyro_regs[2] = gyro_axes[(orient >> 6) & 3];
2338 accel_regs[0] = accel_axes[orient & 3];
2339 accel_regs[1] = accel_axes[(orient >> 3) & 3];
2340 accel_regs[2] = accel_axes[(orient >> 6) & 3];
2342 (uint8_t *)gyro_regs, 3);
2345 handle->
debug_print(
"mpu6500: write mem failed.\n");
2350 (uint8_t *)accel_regs, 3);
2353 handle->
debug_print(
"mpu6500: write mem failed.\n");
2358 memcpy(gyro_regs, gyro_sign, 3);
2359 memcpy(accel_regs, accel_sign, 3);
2360 if ((orient & 4) != 0)
2365 if ((orient & 0x20) != 0)
2370 if ((orient & 0x100) != 0)
2376 (uint8_t *)gyro_regs, 3);
2379 handle->
debug_print(
"mpu6500: write mem failed.\n");
2384 (uint8_t *)accel_regs, 3);
2387 handle->
debug_print(
"mpu6500: write mem failed.\n");
2427 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
2439 handle->
debug_print(
"mpu6500: write mem failed.\n");
2475 handle->
debug_print(
"mpu6500: write mem failed.\n");
2491 handle->
debug_print(
"mpu6500: write mem failed.\n");
2498 uint8_t regs[9] = {0xb8, 0xaa, 0xb3, 0x8d, 0xb4, 0x98, 0x0d, 0x35, 0x5d};
2503 handle->
debug_print(
"mpu6500: write mem failed.\n");
2510 uint8_t regs[9] = {0xb8, 0xaa, 0xaa, 0xaa, 0xb0, 0x88, 0xc3, 0xc5, 0xc7};
2515 handle->
debug_print(
"mpu6500: write mem failed.\n");
2540 handle->
debug_print(
"mpu6500: write mem failed.\n");
2551 uint32_t thresh_scaled;
2553 uint16_t dmp_thresh;
2554 uint16_t dmp_thresh_2;
2555 float scaled_thresh;
2561 handle->
debug_print(
"mpu6500: write mem failed.\n");
2570 handle->
debug_print(
"mpu6500: read accelerometer config failed.\n");
2574 range = ((prev >> 3) & 0x3);
2577 dmp_thresh = (uint16_t)(scaled_thresh * 16384);
2578 dmp_thresh_2 = (uint16_t)(scaled_thresh * 12288);
2580 else if (range == 1)
2582 dmp_thresh = (uint16_t)(scaled_thresh * 8192);
2583 dmp_thresh_2 = (uint16_t)(scaled_thresh * 6144);
2585 else if (range == 2)
2587 dmp_thresh = (uint16_t)(scaled_thresh * 4096);
2588 dmp_thresh_2 = (uint16_t)(scaled_thresh * 3072);
2592 dmp_thresh = (uint16_t)(scaled_thresh * 2048);
2593 dmp_thresh_2 = (uint16_t)(scaled_thresh * 1536);
2595 tmp[0] = (uint8_t)(dmp_thresh >> 8);
2596 tmp[1] = (uint8_t)(dmp_thresh & 0xFF);
2597 tmp[2] = (uint8_t)(dmp_thresh_2 >> 8);
2598 tmp[3] = (uint8_t)(dmp_thresh_2 & 0xFF);
2603 handle->
debug_print(
"mpu6500: write mem failed.\n");
2610 handle->
debug_print(
"mpu6500: write mem failed.\n");
2618 handle->
debug_print(
"mpu6500: write mem failed.\n");
2625 handle->
debug_print(
"mpu6500: write mem failed.\n");
2633 handle->
debug_print(
"mpu6500: write mem failed.\n");
2640 handle->
debug_print(
"mpu6500: write mem failed.\n");
2649 handle->
debug_print(
"mpu6500: write mem failed.\n");
2658 handle->
debug_print(
"mpu6500: write mem failed.\n");
2665 tmp[0] = (ms >> 8) & 0xFF;
2666 tmp[1] = (ms >> 0) & 0xFF;
2671 handle->
debug_print(
"mpu6500: write mem failed.\n");
2678 tmp[0] = (ms >> 8) & 0xFF;
2679 tmp[1] = (ms >> 0) & 0xFF;
2684 handle->
debug_print(
"mpu6500: write mem failed.\n");
2691 tmp[0] = (uint8_t)(((uint32_t)thresh_scaled >> 24) & 0xFF);
2692 tmp[1] = (uint8_t)(((uint32_t)thresh_scaled >> 16) & 0xFF);
2693 tmp[2] = (uint8_t)(((uint32_t)thresh_scaled >> 8) & 0xFF);
2694 tmp[3] = (uint8_t)((uint32_t)thresh_scaled & 0xFF);
2699 handle->
debug_print(
"mpu6500: write mem failed.\n");
2706 tmp[0] = (ms >> 8) & 0xFF;
2707 tmp[1] = (ms >> 0) & 0xFF;
2712 handle->
debug_print(
"mpu6500: write mem failed.\n");
2719 tmp[0] = (ms >> 8) & 0xFF;
2720 tmp[1] = (ms >> 0) & 0xFF;
2725 handle->
debug_print(
"mpu6500: write mem failed.\n");
2736 handle->
debug_print(
"mpu6500: write mem failed.\n");
2753 handle->
debug_print(
"mpu6500: write mem failed.\n");
2760 uint8_t regs[4] = {0xC0, 0xC2, 0xC4, 0xC6};
2765 handle->
debug_print(
"mpu6500: write mem failed.\n");
2769 res = a_mpu6500_reset_fifo(handle);
2772 handle->
debug_print(
"mpu6500: reset fifo failed.\n");
2779 uint8_t regs[4] = {0x8B, 0x8B, 0x8B, 0x8B};
2784 handle->
debug_print(
"mpu6500: write mem failed.\n");
2788 res = a_mpu6500_reset_fifo(handle);
2791 handle->
debug_print(
"mpu6500: reset fifo failed.\n");
2799 uint8_t regs[4] = {0x20, 0x28, 0x30, 0x38};
2804 handle->
debug_print(
"mpu6500: write mem failed.\n");
2808 res = a_mpu6500_reset_fifo(handle);
2811 handle->
debug_print(
"mpu6500: reset fifo failed.\n");
2818 uint8_t regs[4] = {0xA3, 0xA3, 0xA3, 0xA3};
2823 handle->
debug_print(
"mpu6500: write mem failed.\n");
2827 res = a_mpu6500_reset_fifo(handle);
2830 handle->
debug_print(
"mpu6500: reset fifo failed.\n");
2838 return a_mpu6500_reset_fifo(handle);
2856 uint8_t regs_end[12] = {0xFE, 0xF2, 0xAB,
2874 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
2886 tmp[0] = (uint8_t)((d >> 8) & 0xFF);
2887 tmp[1] = (uint8_t)(d & 0xFF);
2892 handle->
debug_print(
"mpu6500: write mem failed.\n");
2897 (uint8_t *)regs_end, 12);
2900 handle->
debug_print(
"mpu6500: write mem failed.\n");
2936 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
2944 handle->
debug_print(
"mpu6500: read mem failed.\n");
2948 d = (uint16_t)tmp[0] << 8 | tmp[1];
2983 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
2991 handle->
debug_print(
"mpu6500: read mem failed.\n");
2995 pos = (uint8_t)((axis - 5) * 2);
3007 handle->
debug_print(
"mpu6500: write mem failed.\n");
3044 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
3052 handle->
debug_print(
"mpu6500: read mem failed.\n");
3056 pos = (uint8_t)((axis - 5) * 2);
3057 if (((tmp >> pos) & 0x3) == 0x3)
3090 uint16_t dmp_thresh;
3091 uint16_t dmp_thresh_2;
3092 float scaled_thresh;
3104 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
3117 (uint8_t *)&prev, 1);
3120 handle->
debug_print(
"mpu6500: read accelerometer config failed.\n");
3124 range = ((prev >> 3) & 0x3);
3127 dmp_thresh = (uint16_t)(scaled_thresh * 16384);
3128 dmp_thresh_2 = (uint16_t)(scaled_thresh * 12288);
3130 else if (range == 1)
3132 dmp_thresh = (uint16_t)(scaled_thresh * 8192);
3133 dmp_thresh_2 = (uint16_t)(scaled_thresh * 6144);
3135 else if (range == 2)
3137 dmp_thresh = (uint16_t)(scaled_thresh * 4096);
3138 dmp_thresh_2 = (uint16_t)(scaled_thresh * 3072);
3142 dmp_thresh = (uint16_t)(scaled_thresh * 2048);
3143 dmp_thresh_2 = (uint16_t)(scaled_thresh * 1536);
3145 tmp[0] = (uint8_t)(dmp_thresh >> 8);
3146 tmp[1] = (uint8_t)(dmp_thresh & 0xFF);
3147 tmp[2] = (uint8_t)(dmp_thresh_2 >> 8);
3148 tmp[3] = (uint8_t)(dmp_thresh_2 & 0xFF);
3155 handle->
debug_print(
"mpu6500: write mem failed.\n");
3162 handle->
debug_print(
"mpu6500: write mem failed.\n");
3174 handle->
debug_print(
"mpu6500: write mem failed.\n");
3181 handle->
debug_print(
"mpu6500: write mem failed.\n");
3193 handle->
debug_print(
"mpu6500: write mem failed.\n");
3200 handle->
debug_print(
"mpu6500: write mem failed.\n");
3235 uint16_t dmp_thresh;
3236 float scaled_thresh;
3248 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
3258 handle->
debug_print(
"mpu6500: read mem failed.\n");
3268 handle->
debug_print(
"mpu6500: read mem failed.\n");
3278 handle->
debug_print(
"mpu6500: read mem failed.\n");
3289 dmp_thresh = (uint16_t)tmp[0] << 8 | tmp[1];
3292 (uint8_t *)&prev, 1);
3295 handle->
debug_print(
"mpu6500: read accelerometer config failed.\n");
3299 range = ((prev >> 3) & 0x3);
3302 scaled_thresh = dmp_thresh / 16384.0f;
3304 else if (range == 1)
3306 scaled_thresh = dmp_thresh / 8192.0f;
3308 else if (range == 2)
3310 scaled_thresh = dmp_thresh / 4096.0f;
3314 scaled_thresh = dmp_thresh / 2048.0f;
3346 int16_t (*accel_raw)[3],
float (*accel_g)[3],
3347 int16_t (*gyro_raw)[3],
float (*gyro_dps)[3],
3349 float *pitch,
float *roll,
float *yaw,
3371 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
3379 handle->
debug_print(
"mpu6500: read int status failed.\n");
3386 (void)a_mpu6500_reset_fifo(handle);
3418 handle->
debug_print(
"mpu6500: read fifo count failed.\n");
3422 count = (uint16_t)(((uint16_t)buf[0] << 8) | buf[1]);
3423 count = (count < 1024) ? count : 1024;
3424 count = (count < (*l) * len) ? count : ((*l) *len);
3425 count = (count / len) * len;
3436 handle->
debug_print(
"mpu6500: fifo data is too little.\n");
3441 for (j = 0; j < (*l); j++)
3445 int32_t quat_q14[4];
3446 int32_t quat_mag_sq;
3447 float q0 = 1.0f, q1 = 0.0f, q2 = 0.0f, q3 = 0.0f;
3450 quat[j][0] = ((int32_t)handle->
buf[0 + len * j] << 24) | ((int32_t)handle->
buf[1 + len * j] << 16) |
3451 ((int32_t)handle->
buf[2 + len * j] << 8) | handle->
buf[3 + len * j];
3452 quat[j][1] = ((int32_t)handle->
buf[4 + len * j] << 24) | ((int32_t)handle->
buf[5 + len * j] << 16) |
3453 ((int32_t)handle->
buf[6 + len * j] << 8) | handle->
buf[7 + len * j];
3454 quat[j][2] = ((int32_t)handle->
buf[8 + len * j] << 24) | ((int32_t)handle->
buf[9 + len * j] << 16) |
3455 ((int32_t)handle->
buf[10 + len * j] << 8) | handle->
buf[11 + len * j];
3456 quat[j][3] = ((int32_t)handle->
buf[12 + len * j] << 24) | ((int32_t)handle->
buf[13 + len * j] << 16) |
3457 ((int32_t)handle->
buf[14 + len * j] << 8) | handle->
buf[15 + len * j];
3460 quat_q14[0] = quat[j][0] >> 16;
3461 quat_q14[1] = quat[j][1] >> 16;
3462 quat_q14[2] = quat[j][2] >> 16;
3463 quat_q14[3] = quat[j][3] >> 16;
3464 quat_mag_sq = quat_q14[0] * quat_q14[0] + quat_q14[1] * quat_q14[1] +
3465 quat_q14[2] * quat_q14[2] + quat_q14[3] * quat_q14[3];
3469 handle->
debug_print(
"mpu6500: quat check error.\n");
3470 (void)a_mpu6500_reset_fifo(handle);
3474 q0 = quat[j][0] / 1073741824.0f;
3475 q1 = quat[j][1] / 1073741824.0f;
3476 q2 = quat[j][2] / 1073741824.0f;
3477 q3 = quat[j][3] / 1073741824.0f;
3478 pitch[j] = asinf(-2 * q1 * q3 + 2 * q0* q2)* 57.3f;
3479 roll[j] = atan2f(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2 * q2 + 1)* 57.3f;
3480 yaw[j] = atan2f(2 * (q1 * q2 + q0 * q3), q0 * q0 + q1 * q1 - q2 * q2 - q3 * q3) * 57.3f;
3496 accel_raw[j][0] = ((int16_t)handle->
buf[i + 0 + len * j] << 8) | handle->
buf[i + 1 + len * j];
3497 accel_raw[j][1] = ((int16_t)handle->
buf[i + 2 + len * j] << 8) | handle->
buf[i + 3 + len * j];
3498 accel_raw[j][2] = ((int16_t)handle->
buf[i + 4 + len * j] << 8) | handle->
buf[i + 5 + len * j];
3504 handle->
debug_print(
"mpu6500: read accel config failed.\n");
3508 accel_conf = (accel_conf >> 3) & 0x3;
3509 if (accel_conf == 0)
3511 accel_g[j][0] = (float)(accel_raw[j][0]) / 16384.0f;
3512 accel_g[j][1] = (float)(accel_raw[j][1]) / 16384.0f;
3513 accel_g[j][2] = (float)(accel_raw[j][2]) / 16384.0f;
3515 else if (accel_conf == 1)
3517 accel_g[j][0] = (float)(accel_raw[j][0]) / 8192.0f;
3518 accel_g[j][1] = (float)(accel_raw[j][1]) / 8192.0f;
3519 accel_g[j][2] = (float)(accel_raw[j][2]) / 8192.0f;
3521 else if (accel_conf == 2)
3523 accel_g[j][0] = (float)(accel_raw[j][0]) / 4096.0f;
3524 accel_g[j][1] = (float)(accel_raw[j][1]) / 4096.0f;
3525 accel_g[j][2] = (float)(accel_raw[j][2]) / 4096.0f;
3529 accel_g[j][0] = (float)(accel_raw[j][0]) / 2048.0f;
3530 accel_g[j][1] = (float)(accel_raw[j][1]) / 2048.0f;
3531 accel_g[j][2] = (float)(accel_raw[j][2]) / 2048.0f;
3536 accel_raw[j][0] = 0;
3537 accel_raw[j][1] = 0;
3538 accel_raw[j][2] = 0;
3539 accel_g[j][0] = 0.0f;
3540 accel_g[j][1] = 0.0f;
3541 accel_g[j][2] = 0.0f;
3547 gyro_raw[j][0] = ((int16_t)handle->
buf[i + 0 + len * j] << 8) | handle->
buf[i + 1 + len * j];
3548 gyro_raw[j][1] = ((int16_t)handle->
buf[i + 2 + len * j] << 8) | handle->
buf[i + 3 + len * j];
3549 gyro_raw[j][2] = ((int16_t)handle->
buf[i + 4 + len * j] << 8) | handle->
buf[i + 5 + len * j];
3555 handle->
debug_print(
"mpu6500: read gyro config failed.\n");
3559 gyro_conf = (gyro_conf >> 3) & 0x3;
3562 gyro_dps[j][0] = (float)(gyro_raw[j][0]) / 131.0f;
3563 gyro_dps[j][1] = (float)(gyro_raw[j][1]) / 131.0f;
3564 gyro_dps[j][2] = (float)(gyro_raw[j][2]) / 131.0f;
3566 else if (gyro_conf == 1)
3568 gyro_dps[j][0] = (float)(gyro_raw[j][0]) / 65.5f;
3569 gyro_dps[j][1] = (float)(gyro_raw[j][1]) / 65.5f;
3570 gyro_dps[j][2] = (float)(gyro_raw[j][2]) / 65.5f;
3572 else if (gyro_conf == 2)
3574 gyro_dps[j][0] = (float)(gyro_raw[j][0]) / 32.8f;
3575 gyro_dps[j][1] = (float)(gyro_raw[j][1]) / 32.8f;
3576 gyro_dps[j][2] = (float)(gyro_raw[j][2]) / 32.8f;
3580 gyro_dps[j][0] = (float)(gyro_raw[j][0]) / 16.4f;
3581 gyro_dps[j][1] = (float)(gyro_raw[j][1]) / 16.4f;
3582 gyro_dps[j][2] = (float)(gyro_raw[j][2]) / 16.4f;
3590 gyro_dps[j][0] = 0.0f;
3591 gyro_dps[j][1] = 0.0f;
3592 gyro_dps[j][2] = 0.0f;
3596 a_mpu6500_dmp_decode_gesture(handle, handle->
buf + i + len * j);
3627 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
3661 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
3698 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
3706 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
3711 prev |= enable << 7;
3715 handle->
debug_print(
"mpu6500: write user ctrl failed.\n");
3739 int32_t gyro_offset_raw[3], int32_t accel_offset_raw[3],
3740 int32_t gyro_offset[3], int32_t accel_offset[3])
3756 handle->
debug_print(
"mpu6500: dmp is not inited.\n");
3764 handle->
debug_print(
"mpu6500: read accel config failed.\n");
3771 handle->
debug_print(
"mpu6500: read gyro config failed.\n");
3775 accel_conf = (accel_conf >> 3) & 0x3;
3776 gyro_conf = (gyro_conf >> 3) & 0x3;
3777 if (accel_conf == 0)
3779 accel_offset[0] = (int32_t)(accel_offset_raw[0] * 16384.0f);
3780 accel_offset[1] = (int32_t)(accel_offset_raw[1] * 16384.0f);
3781 accel_offset[2] = (int32_t)(accel_offset_raw[2] * 16384.0f);
3783 else if (accel_conf == 1)
3785 accel_offset[0] = (int32_t)(accel_offset_raw[0] * 8192.0f);
3786 accel_offset[1] = (int32_t)(accel_offset_raw[1] * 8192.0f);
3787 accel_offset[2] = (int32_t)(accel_offset_raw[2] * 8192.0f);
3789 else if (accel_conf == 2)
3791 accel_offset[0] = (int32_t)(accel_offset_raw[0] * 4096.0f);
3792 accel_offset[1] = (int32_t)(accel_offset_raw[1] * 4096.0f);
3793 accel_offset[2] = (int32_t)(accel_offset_raw[2] * 4096.0f);
3797 accel_offset[0] = (int32_t)(accel_offset_raw[0] * 2048.0f);
3798 accel_offset[1] = (int32_t)(accel_offset_raw[1] * 2048.0f);
3799 accel_offset[2] = (int32_t)(accel_offset_raw[2] * 2048.0f);
3803 gyro_offset[0] = (int32_t)(gyro_offset_raw[0] * 131.f);
3804 gyro_offset[1] = (int32_t)(gyro_offset_raw[1] * 131.f);
3805 gyro_offset[2] = (int32_t)(gyro_offset_raw[2] * 131.f);
3807 else if (gyro_conf == 1)
3809 gyro_offset[0] = (int32_t)(gyro_offset_raw[0] * 65.5f);
3810 gyro_offset[1] = (int32_t)(gyro_offset_raw[1] * 65.5f);
3811 gyro_offset[2] = (int32_t)(gyro_offset_raw[2] * 65.5f);
3813 else if (gyro_conf == 2)
3815 gyro_offset[0] = (int32_t)(gyro_offset_raw[0] * 32.8f);
3816 gyro_offset[1] = (int32_t)(gyro_offset_raw[1] * 32.8f);
3817 gyro_offset[2] = (int32_t)(gyro_offset_raw[2] * 32.8f);
3821 gyro_offset[0] = (int32_t)(gyro_offset_raw[0] * 16.4f);
3822 gyro_offset[1] = (int32_t)(gyro_offset_raw[1] * 16.4f);
3823 gyro_offset[2] = (int32_t)(gyro_offset_raw[2] * 16.4f);
3845 handle->
iic_spi = (uint8_t)interface;
3887 handle->
iic_addr = (uint8_t)addr_pin;
3940 handle->
debug_print(
"mpu6500: iic_init is null.\n");
3946 handle->
debug_print(
"mpu6500: iic_deinit is null.\n");
3952 handle->
debug_print(
"mpu6500: iic_read is null.\n");
3958 handle->
debug_print(
"mpu6500: iic_write is null.\n");
3964 handle->
debug_print(
"mpu6500: spi_init is null.\n");
3970 handle->
debug_print(
"mpu6500: spi_deinit is null.\n");
3976 handle->
debug_print(
"mpu6500: spi_read is null.\n");
3982 handle->
debug_print(
"mpu6500: spi_write is null.\n");
3988 handle->
debug_print(
"mpu6500: delay_ms is null.\n");
3994 handle->
debug_print(
"mpu6500: receive_callback is null.\n");
4004 handle->
debug_print(
"mpu6500: iic init failed.\n");
4014 handle->
debug_print(
"mpu6500: spi init failed.\n");
4023 handle->
debug_print(
"mpu6500: read who am i failed.\n");
4024 (void)a_mpu6500_deinit(handle);
4031 (void)a_mpu6500_deinit(handle);
4040 handle->
debug_print(
"mpu6500: write pwr mgmt 1 failed.\n");
4041 (void)a_mpu6500_deinit(handle);
4047 while (timeout != 0)
4052 handle->
debug_print(
"mpu6500: read pwr mgmt 1 failed.\n");
4053 (void)a_mpu6500_deinit(handle);
4057 if ((prev & (1 << 7)) == 0)
4098 prev = (1 << 6) | (1 << 3) | (7 << 0);
4102 handle->
debug_print(
"mpu6500: write pwr mgmt 1 failed.\n");
4106 res = a_mpu6500_deinit(handle);
4138 int16_t (*accel_raw)[3],
float (*accel_g)[3],
4139 int16_t (*gyro_raw)[3],
float (*gyro_dps)[3],
4158 handle->
debug_print(
"mpu6500: length is zero.\n");
4164 handle->
debug_print(
"mpu6500: dmp is running.\n");
4172 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4179 handle->
debug_print(
"mpu6500: read accel config failed.\n");
4186 handle->
debug_print(
"mpu6500: read gyro config failed.\n");
4190 accel_conf = (accel_conf >> 3) & 0x3;
4191 gyro_conf = (gyro_conf >> 3) & 0x3;
4192 if ((prev & (1 << 6)) != 0)
4202 handle->
debug_print(
"mpu6500: read fifo enable failed.\n");
4208 handle->
debug_print(
"mpu6500: fifo conf is error.\n");
4216 handle->
debug_print(
"mpu6500: read fifo count failed.\n");
4221 count = (uint16_t)(((uint16_t)buf[0] << 8) | buf[1]);
4222 count = (count < 1024) ? count : 1024;
4223 count = (count < ((*len) * 12)) ? count : ((*len) * 12);
4224 count = (count / 12) * 12;
4233 for (i = 0; i < (*len); i++)
4235 accel_raw[i][0] = (int16_t)((uint16_t)handle->
buf[i * 12 + 0] << 8) |
4236 handle->
buf[i * 12 + 1];
4237 accel_raw[i][1] = (int16_t)((uint16_t)handle->
buf[i * 12 + 2] << 8) |
4238 handle->
buf[i * 12 + 3];
4239 accel_raw[i][2] = (int16_t)((uint16_t)handle->
buf[i * 12 + 4] << 8) |
4240 handle->
buf[i * 12 + 5];
4241 gyro_raw[i][0] = (int16_t)((uint16_t)handle->
buf[i * 12 + 6] << 8) |
4242 handle->
buf[i * 12 + 7];
4243 gyro_raw[i][1] = (int16_t)((uint16_t)handle->
buf[i * 12 + 8] << 8) |
4244 handle->
buf[i * 12 + 9];
4245 gyro_raw[i][2] = (int16_t)((uint16_t)handle->
buf[i * 12 + 10] << 8) |
4246 handle->
buf[i * 12 + 11];
4248 if (accel_conf == 0)
4250 accel_g[i][0] = (float)(accel_raw[i][0]) / 16384.0f;
4251 accel_g[i][1] = (float)(accel_raw[i][1]) / 16384.0f;
4252 accel_g[i][2] = (float)(accel_raw[i][2]) / 16384.0f;
4254 else if (accel_conf == 1)
4256 accel_g[i][0] = (float)(accel_raw[i][0]) / 8192.0f;
4257 accel_g[i][1] = (float)(accel_raw[i][1]) / 8192.0f;
4258 accel_g[i][2] = (float)(accel_raw[i][2]) / 8192.0f;
4260 else if (accel_conf == 2)
4262 accel_g[i][0] = (float)(accel_raw[i][0]) / 4096.0f;
4263 accel_g[i][1] = (float)(accel_raw[i][1]) / 4096.0f;
4264 accel_g[i][2] = (float)(accel_raw[i][2]) / 4096.0f;
4268 accel_g[i][0] = (float)(accel_raw[i][0]) / 2048.0f;
4269 accel_g[i][1] = (float)(accel_raw[i][1]) / 2048.0f;
4270 accel_g[i][2] = (float)(accel_raw[i][2]) / 2048.0f;
4275 gyro_dps[i][0] = (float)(gyro_raw[i][0]) / 131.0f;
4276 gyro_dps[i][1] = (float)(gyro_raw[i][1]) / 131.0f;
4277 gyro_dps[i][2] = (float)(gyro_raw[i][2]) / 131.0f;
4279 else if (gyro_conf == 1)
4281 gyro_dps[i][0] = (float)(gyro_raw[i][0]) / 65.5f;
4282 gyro_dps[i][1] = (float)(gyro_raw[i][1]) / 65.5f;
4283 gyro_dps[i][2] = (float)(gyro_raw[i][2]) / 65.5f;
4285 else if (gyro_conf == 2)
4287 gyro_dps[i][0] = (float)(gyro_raw[i][0]) / 32.8f;
4288 gyro_dps[i][1] = (float)(gyro_raw[i][1]) / 32.8f;
4289 gyro_dps[i][2] = (float)(gyro_raw[i][2]) / 32.8f;
4293 gyro_dps[i][0] = (float)(gyro_raw[i][0]) / 16.4f;
4294 gyro_dps[i][1] = (float)(gyro_raw[i][1]) / 16.4f;
4295 gyro_dps[i][2] = (float)(gyro_raw[i][2]) / 16.4f;
4311 accel_raw[0][0] = (int16_t)((uint16_t)handle->
buf[0] << 8) | handle->
buf[1];
4312 accel_raw[0][1] = (int16_t)((uint16_t)handle->
buf[2] << 8) | handle->
buf[3];
4313 accel_raw[0][2] = (int16_t)((uint16_t)handle->
buf[4] << 8) | handle->
buf[5];
4314 gyro_raw[0][0] = (int16_t)((uint16_t)handle->
buf[8] << 8) | handle->
buf[9];
4315 gyro_raw[0][1] = (int16_t)((uint16_t)handle->
buf[10] << 8) | handle->
buf[11];
4316 gyro_raw[0][2] = (int16_t)((uint16_t)handle->
buf[12] << 8) | handle->
buf[13];
4318 if (accel_conf == 0)
4320 accel_g[0][0] = (float)(accel_raw[0][0]) / 16384.0f;
4321 accel_g[0][1] = (float)(accel_raw[0][1]) / 16384.0f;
4322 accel_g[0][2] = (float)(accel_raw[0][2]) / 16384.0f;
4324 else if (accel_conf == 1)
4326 accel_g[0][0] = (float)(accel_raw[0][0]) / 8192.0f;
4327 accel_g[0][1] = (float)(accel_raw[0][1]) / 8192.0f;
4328 accel_g[0][2] = (float)(accel_raw[0][2]) / 8192.0f;
4330 else if (accel_conf == 2)
4332 accel_g[0][0] = (float)(accel_raw[0][0]) / 4096.0f;
4333 accel_g[0][1] = (float)(accel_raw[0][1]) / 4096.0f;
4334 accel_g[0][2] = (float)(accel_raw[0][2]) / 4096.0f;
4338 accel_g[0][0] = (float)(accel_raw[0][0]) / 2048.0f;
4339 accel_g[0][1] = (float)(accel_raw[0][1]) / 2048.0f;
4340 accel_g[0][2] = (float)(accel_raw[0][2]) / 2048.0f;
4345 gyro_dps[0][0] = (float)(gyro_raw[0][0]) / 131.0f;
4346 gyro_dps[0][1] = (float)(gyro_raw[0][1]) / 131.0f;
4347 gyro_dps[0][2] = (float)(gyro_raw[0][2]) / 131.0f;
4349 else if (gyro_conf == 1)
4351 gyro_dps[0][0] = (float)(gyro_raw[0][0]) / 65.5f;
4352 gyro_dps[0][1] = (float)(gyro_raw[0][1]) / 65.5f;
4353 gyro_dps[0][2] = (float)(gyro_raw[0][2]) / 65.5f;
4355 else if (gyro_conf == 2)
4357 gyro_dps[0][0] = (float)(gyro_raw[0][0]) / 32.8f;
4358 gyro_dps[0][1] = (float)(gyro_raw[0][1]) / 32.8f;
4359 gyro_dps[0][2] = (float)(gyro_raw[0][2]) / 32.8f;
4363 gyro_dps[0][0] = (float)(gyro_raw[0][0]) / 16.4f;
4364 gyro_dps[0][1] = (float)(gyro_raw[0][1]) / 16.4f;
4365 gyro_dps[0][2] = (float)(gyro_raw[0][2]) / 16.4f;
4405 *raw = (int16_t)((uint16_t)buf[0] << 8) | buf[1];
4406 *degrees = (float)(*raw) / 321.0f + 21.0f;
4438 handle->
debug_print(
"mpu6500: read int status failed.\n");
4455 (void)a_mpu6500_reset_fifo(handle);
4510 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4515 prev |= enable << 6;
4519 handle->
debug_print(
"mpu6500: write user ctrl failed.\n");
4555 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4587 res = a_mpu6500_reset_fifo(handle);
4590 handle->
debug_print(
"mpu6500: force reset fifo failed.\n");
4626 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4631 prev |= enable << 5;
4635 handle->
debug_print(
"mpu6500: write user ctrl failed.\n");
4671 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4708 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4713 prev |= enable << 4;
4717 handle->
debug_print(
"mpu6500: write user ctrl failed.\n");
4753 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4789 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4798 handle->
debug_print(
"mpu6500: write user ctrl failed.\n");
4834 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4870 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4879 handle->
debug_print(
"mpu6500: write user ctrl failed.\n");
4915 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4951 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
4960 handle->
debug_print(
"mpu6500: write user ctrl failed.\n");
4996 handle->
debug_print(
"mpu6500: read user ctrl failed.\n");
5032 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5041 handle->
debug_print(
"mpu6500: write power management 1 failed.\n");
5077 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5114 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5118 prev &= ~(0x7 << 0);
5119 prev |= clock_source << 0;
5123 handle->
debug_print(
"mpu6500: write power management 1 failed.\n");
5159 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5196 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5201 prev |= (!enable) << 3;
5205 handle->
debug_print(
"mpu6500: write power management 1 failed.\n");
5241 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5278 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5283 prev |= enable << 5;
5287 handle->
debug_print(
"mpu6500: write power management 1 failed.\n");
5323 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5360 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5365 prev |= enable << 6;
5369 handle->
debug_print(
"mpu6500: write power management 1 failed.\n");
5405 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5442 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5447 prev |= enable << 4;
5451 handle->
debug_print(
"mpu6500: write power management 1 failed.\n");
5487 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
5525 handle->
debug_print(
"mpu6500: read power management 2 failed.\n");
5529 prev &= ~(1 << source);
5530 prev |= enable << source;
5534 handle->
debug_print(
"mpu6500: write power management 2 failed.\n");
5571 handle->
debug_print(
"mpu6500: read power management 2 failed.\n");
5608 handle->
debug_print(
"mpu6500: read fifo count failed.\n");
5612 *count = (uint16_t)(((uint16_t)buf[0] << 8) | buf[1]);
5645 handle->
debug_print(
"mpu6500: fifo read failed.\n");
5681 handle->
debug_print(
"mpu6500: fifo write failed.\n");
5717 handle->
debug_print(
"mpu6500: read signal path reset failed.\n");
5721 prev &= ~(1 << path);
5726 handle->
debug_print(
"mpu6500: write signal path reset failed.\n");
5761 handle->
debug_print(
"mpu6500: write smprt div failed.\n");
5796 handle->
debug_print(
"mpu6500: read smprt div failed.\n");
5832 handle->
debug_print(
"mpu6500: read config failed.\n");
5836 prev &= ~(0x7 << 3);
5841 handle->
debug_print(
"mpu6500: write config failed.\n");
5877 handle->
debug_print(
"mpu6500: read config failed.\n");
5914 handle->
debug_print(
"mpu6500: read config failed.\n");
5918 prev &= ~(0x7 << 0);
5919 prev |= filter << 0;
5923 handle->
debug_print(
"mpu6500: write config failed.\n");
5959 handle->
debug_print(
"mpu6500: read config failed.\n");
5996 handle->
debug_print(
"mpu6500: read config failed.\n");
6005 handle->
debug_print(
"mpu6500: write config failed.\n");
6041 handle->
debug_print(
"mpu6500: read config failed.\n");
6079 handle->
debug_print(
"mpu6500: read gyroscope config failed.\n");
6083 prev &= ~(1 << axis);
6084 prev |= enable << axis;
6088 handle->
debug_print(
"mpu6500: write gyroscope config failed.\n");
6125 handle->
debug_print(
"mpu6500: read gyroscope config failed.\n");
6162 handle->
debug_print(
"mpu6500: read gyroscope config failed.\n");
6171 handle->
debug_print(
"mpu6500: write gyroscope config failed.\n");
6207 handle->
debug_print(
"mpu6500: read gyroscope config failed.\n");
6251 handle->
debug_print(
"mpu6500: read gyroscope config failed.\n");
6256 prev |= choice << 0;
6260 handle->
debug_print(
"mpu6500: write gyroscope config failed.\n");
6296 handle->
debug_print(
"mpu6500: read gyroscope config failed.\n");
6300 *choice = prev & 0x03;
6334 handle->
debug_print(
"mpu6500: read accelerometer config failed.\n");
6338 prev &= ~(1 << axis);
6339 prev |= enable << axis;
6343 handle->
debug_print(
"mpu6500: write accelerometer config failed.\n");
6380 handle->
debug_print(
"mpu6500: read accelerometer config failed.\n");
6417 handle->
debug_print(
"mpu6500: read accelerometer config failed.\n");
6426 handle->
debug_print(
"mpu6500: write accelerometer config failed.\n");
6462 handle->
debug_print(
"mpu6500: read accelerometer config failed.\n");
6498 handle->
debug_print(
"mpu6500: read accelerometer 2 config failed.\n");
6507 handle->
debug_print(
"mpu6500: write accelerometer 2 config failed.\n");
6550 handle->
debug_print(
"mpu6500: read accelerometer 2 config failed.\n");
6555 prev |= choice << 3;
6559 handle->
debug_print(
"mpu6500: write accelerometer 2 config failed.\n");
6596 handle->
debug_print(
"mpu6500: read accelerometer 2 config failed.\n");
6600 *choice = (prev >> 3) & 0x1;
6633 handle->
debug_print(
"mpu6500: read accelerometer 2 config failed.\n");
6637 prev &= ~(0x7 << 0);
6638 prev |= filter << 0;
6642 handle->
debug_print(
"mpu6500: write accelerometer 2 config failed.\n");
6678 handle->
debug_print(
"mpu6500: read accelerometer 2 config failed.\n");
6715 handle->
debug_print(
"mpu6500: read lp accelerometer odr failed.\n");
6719 prev &= ~(0xF << 0);
6724 handle->
debug_print(
"mpu6500: write lp accelerometer odr failed.\n");
6760 handle->
debug_print(
"mpu6500: read lp accelerometer odr failed.\n");
6797 handle->
debug_print(
"mpu6500: read motion detect ctrl failed.\n");
6802 prev |= enable << 7;
6806 handle->
debug_print(
"mpu6500: write motion detect ctrl failed.\n");
6842 handle->
debug_print(
"mpu6500: read motion detect ctrl failed.\n");
6879 handle->
debug_print(
"mpu6500: read motion detect ctrl failed.\n");
6884 prev |= enable << 6;
6888 handle->
debug_print(
"mpu6500: write motion detect ctrl failed.\n");
6924 handle->
debug_print(
"mpu6500: read motion detect ctrl failed.\n");
6962 handle->
debug_print(
"mpu6500: read fifo enable config failed.\n");
6966 prev &= ~(1 << fifo);
6967 prev |= enable << fifo;
6971 handle->
debug_print(
"mpu6500: write fifo enable config failed.\n");
7008 handle->
debug_print(
"mpu6500: read fifo enable config failed.\n");
7045 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7054 handle->
debug_print(
"mpu6500: write interrupt pin failed.\n");
7090 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7127 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7136 handle->
debug_print(
"mpu6500: write interrupt pin failed.\n");
7172 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7209 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7214 prev |= (!enable) << 5;
7218 handle->
debug_print(
"mpu6500: write interrupt pin failed.\n");
7254 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7291 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7296 prev |= enable << 4;
7300 handle->
debug_print(
"mpu6500: write interrupt pin failed.\n");
7336 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7373 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7382 handle->
debug_print(
"mpu6500: write interrupt pin failed.\n");
7418 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7455 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7460 prev |= enable << 2;
7464 handle->
debug_print(
"mpu6500: write interrupt pin failed.\n");
7500 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7537 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7542 prev |= enable << 1;
7546 handle->
debug_print(
"mpu6500: write interrupt pin failed.\n");
7582 handle->
debug_print(
"mpu6500: read interrupt pin failed.\n");
7620 handle->
debug_print(
"mpu6500: read interrupt enable failed.\n");
7624 prev &= ~(1 << type);
7625 prev |= enable << type;
7629 handle->
debug_print(
"mpu6500: write interrupt enable failed.\n");
7666 handle->
debug_print(
"mpu6500: read interrupt enable failed.\n");
7702 handle->
debug_print(
"mpu6500: read interrupt status failed.\n");
7737 handle->
debug_print(
"mpu6500: write self test x failed.\n");
7772 handle->
debug_print(
"mpu6500: read self test x failed.\n");
7807 handle->
debug_print(
"mpu6500: write self test y failed.\n");
7842 handle->
debug_print(
"mpu6500: read self test y failed.\n");
7877 handle->
debug_print(
"mpu6500: write self test z failed.\n");
7912 handle->
debug_print(
"mpu6500: read self test z failed.\n");
7947 handle->
debug_print(
"mpu6500: write self test x failed.\n");
7982 handle->
debug_print(
"mpu6500: read self test x failed.\n");
8017 handle->
debug_print(
"mpu6500: write self test y failed.\n");
8052 handle->
debug_print(
"mpu6500: read self test y failed.\n");
8087 handle->
debug_print(
"mpu6500: write self test z failed.\n");
8122 handle->
debug_print(
"mpu6500: read self test z failed.\n");
8155 buf[0] = (offset >> 8) & 0xFF;
8156 buf[1] = (offset >> 0) & 0xFF;
8160 handle->
debug_print(
"mpu6500: write xa offset failed.\n");
8196 handle->
debug_print(
"mpu6500: read xa offset failed.\n");
8200 *offset = (int16_t)(((uint16_t)buf[0] << 8) | buf[1]);
8230 buf[0] = (offset >> 8) & 0xFF;
8231 buf[1] = (offset >> 0) & 0xFF;
8235 handle->
debug_print(
"mpu6500: write ya offset failed.\n");
8271 handle->
debug_print(
"mpu6500: read ya offset failed.\n");
8275 *offset = (int16_t)(((uint16_t)buf[0] << 8) | buf[1]);
8305 buf[0] = (offset >> 8) & 0xFF;
8306 buf[1] = (offset >> 0) & 0xFF;
8310 handle->
debug_print(
"mpu6500: write za offset failed.\n");
8346 handle->
debug_print(
"mpu6500: read za offset failed.\n");
8350 *offset = (int16_t)(((uint16_t)buf[0] << 8) | buf[1]);
8377 *reg = (int16_t)(mg / 0.98f);
8404 *mg = (float)(reg) * 0.98f;
8434 buf[0] = (offset >> 8) & 0xFF;
8435 buf[1] = (offset >> 0) & 0xFF;
8439 handle->
debug_print(
"mpu6500: write xg offset failed.\n");
8475 handle->
debug_print(
"mpu6500: read xg offset failed.\n");
8479 *offset = (int16_t)(((uint16_t)buf[0] << 8) | buf[1]);
8509 buf[0] = (offset >> 8) & 0xFF;
8510 buf[1] = (offset >> 0) & 0xFF;
8514 handle->
debug_print(
"mpu6500: write yg offset failed.\n");
8550 handle->
debug_print(
"mpu6500: read yg offset failed.\n");
8554 *offset = (int16_t)(((uint16_t)buf[0] << 8) | buf[1]);
8584 buf[0] = (offset >> 8) & 0xFF;
8585 buf[1] = (offset >> 0) & 0xFF;
8589 handle->
debug_print(
"mpu6500: write zg offset failed.\n");
8625 handle->
debug_print(
"mpu6500: read zg offset failed.\n");
8629 *offset = (int16_t)(((uint16_t)buf[0] << 8) | buf[1]);
8656 *reg = (int16_t)(dps / 0.0305f);
8683 *dps = (float)(reg) * 0.0305f;
8715 handle->
debug_print(
"mpu6500: write motion threshold failed.\n");
8750 handle->
debug_print(
"mpu6500: read motion threshold failed.\n");
8780 *reg = (uint8_t)(mg / 4.0f);
8807 *mg = (float)(reg) * 4.0f;
8828 int32_t gyro_offset_raw_st[3];
8829 int32_t accel_offset_raw_st[3];
8840 res = a_mpu6500_get_st_biases(handle, gyro_offset_raw, accel_offset_raw, 0);
8843 handle->
debug_print(
"mpu6500: get st biases failed.\n");
8847 res = a_mpu6500_get_st_biases(handle, gyro_offset_raw_st, accel_offset_raw_st, 1);
8850 handle->
debug_print(
"mpu6500: get st biases failed.\n");
8854 res = a_mpu6500_accel_self_test(handle, accel_offset_raw, accel_offset_raw_st);
8857 handle->
debug_print(
"mpu6500: accel self test failed.\n");
8861 res = a_mpu6500_gyro_self_test(handle, gyro_offset_raw, gyro_offset_raw_st);
8864 handle->
debug_print(
"mpu6500: gyro self test failed.\n");
8873 handle->
debug_print(
"mpu6500: write pwr mgmt 1 failed.\n");
8881 handle->
debug_print(
"mpu6500: read power management 1 failed.\n");
8889 handle->
debug_print(
"mpu6500: write power management 1 failed.\n");
8925 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
8934 handle->
debug_print(
"mpu6500: write i2c mst ctrl failed.\n");
8970 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9007 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9012 prev |= enable << 7;
9016 handle->
debug_print(
"mpu6500: write i2c mst ctrl failed.\n");
9052 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9089 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9094 prev |= enable << 6;
9098 handle->
debug_print(
"mpu6500: write i2c mst ctrl failed.\n");
9134 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9171 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9180 handle->
debug_print(
"mpu6500: write i2c mst ctrl failed.\n");
9216 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9260 handle->
debug_print(
"mpu6500: read fifo enable failed.\n");
9264 prev &= ~(1 << slave);
9265 prev |= enable << slave;
9269 handle->
debug_print(
"mpu6500: write fifo enable failed.\n");
9279 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9284 prev |= enable << 5;
9288 handle->
debug_print(
"mpu6500: write i2c mst ctrl failed.\n");
9338 handle->
debug_print(
"mpu6500: read fifo enable failed.\n");
9349 handle->
debug_print(
"mpu6500: read i2c mst ctrl failed.\n");
9397 handle->
debug_print(
"mpu6500: read i2c slv0 addr failed.\n");
9406 handle->
debug_print(
"mpu6500: write i2c slv0 addr failed.\n");
9416 handle->
debug_print(
"mpu6500: read i2c slv1 addr failed.\n");
9425 handle->
debug_print(
"mpu6500: write i2c slv1 addr failed.\n");
9435 handle->
debug_print(
"mpu6500: read i2c slv2 addr failed.\n");
9444 handle->
debug_print(
"mpu6500: write i2c slv2 addr failed.\n");
9454 handle->
debug_print(
"mpu6500: read i2c slv3 addr failed.\n");
9463 handle->
debug_print(
"mpu6500: write i2c slv3 addr failed.\n");
9473 handle->
debug_print(
"mpu6500: read i2c slv4 addr failed.\n");
9482 handle->
debug_print(
"mpu6500: write i2c slv4 addr failed.\n");
9529 handle->
debug_print(
"mpu6500: read i2c slv0 addr failed.\n");
9540 handle->
debug_print(
"mpu6500: read i2c slv1 addr failed.\n");
9551 handle->
debug_print(
"mpu6500: read i2c slv2 addr failed.\n");
9562 handle->
debug_print(
"mpu6500: read i2c slv3 addr failed.\n");
9573 handle->
debug_print(
"mpu6500: read i2c slv4 addr failed.\n");
9621 handle->
debug_print(
"mpu6500: read i2c slv0 addr failed.\n");
9626 prev |= addr_7bit & 0x7F;
9630 handle->
debug_print(
"mpu6500: write i2c slv0 addr failed.\n");
9640 handle->
debug_print(
"mpu6500: read i2c slv1 addr failed.\n");
9645 prev |= addr_7bit & 0x7F;
9649 handle->
debug_print(
"mpu6500: write i2c slv1 addr failed.\n");
9659 handle->
debug_print(
"mpu6500: read i2c slv2 addr failed.\n");
9664 prev |= addr_7bit & 0x7F;
9668 handle->
debug_print(
"mpu6500: write i2c slv2 addr failed.\n");
9678 handle->
debug_print(
"mpu6500: read i2c slv3 addr failed.\n");
9683 prev |= addr_7bit & 0x7F;
9687 handle->
debug_print(
"mpu6500: write i2c slv3 addr failed.\n");
9697 handle->
debug_print(
"mpu6500: read i2c slv4 addr failed.\n");
9702 prev |= addr_7bit & 0x7F;
9706 handle->
debug_print(
"mpu6500: write i2c slv4 addr failed.\n");
9753 handle->
debug_print(
"mpu6500: read i2c slv0 addr failed.\n");
9757 *addr_7bit = prev & 0x7F;
9764 handle->
debug_print(
"mpu6500: read i2c slv1 addr failed.\n");
9768 *addr_7bit = prev & 0x7F;
9775 handle->
debug_print(
"mpu6500: read i2c slv2 addr failed.\n");
9779 *addr_7bit = prev & 0x7F;
9786 handle->
debug_print(
"mpu6500: read i2c slv3 addr failed.\n");
9790 *addr_7bit = prev & 0x7F;
9797 handle->
debug_print(
"mpu6500: read i2c slv4 addr failed.\n");
9801 *addr_7bit = prev & 0x7F;
9844 handle->
debug_print(
"mpu6500: write i2c slv0 reg failed.\n");
9854 handle->
debug_print(
"mpu6500: write i2c slv1 reg failed.\n");
9864 handle->
debug_print(
"mpu6500: write i2c slv2 reg failed.\n");
9874 handle->
debug_print(
"mpu6500: write i2c slv3 reg failed.\n");
9884 handle->
debug_print(
"mpu6500: write i2c slv4 reg failed.\n");
9930 handle->
debug_print(
"mpu6500: read i2c slv0 reg failed.\n");
9940 handle->
debug_print(
"mpu6500: read i2c slv1 reg failed.\n");
9950 handle->
debug_print(
"mpu6500: read i2c slv2 reg failed.\n");
9960 handle->
debug_print(
"mpu6500: read i2c slv3 reg failed.\n");
9970 handle->
debug_print(
"mpu6500: read i2c slv4 reg failed.\n");
10002 if (handle == NULL)
10006 if (handle->
inited != 1)
10016 handle->
debug_print(
"mpu6500: write i2c slv0 do failed.\n");
10026 handle->
debug_print(
"mpu6500: write i2c slv1 do failed.\n");
10036 handle->
debug_print(
"mpu6500: write i2c slv2 do failed.\n");
10046 handle->
debug_print(
"mpu6500: write i2c slv3 do failed.\n");
10053 handle->
debug_print(
"mpu6500: invalid slave.\n");
10078 if (handle == NULL)
10082 if (handle->
inited != 1)
10092 handle->
debug_print(
"mpu6500: read i2c slv0 do failed.\n");
10102 handle->
debug_print(
"mpu6500: read i2c slv1 do failed.\n");
10112 handle->
debug_print(
"mpu6500: read i2c slv2 do failed.\n");
10122 handle->
debug_print(
"mpu6500: read i2c slv3 do failed.\n");
10129 handle->
debug_print(
"mpu6500: invalid slave.\n");
10155 if (handle == NULL)
10159 if (handle->
inited != 1)
10169 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10174 prev |= enable << 7;
10178 handle->
debug_print(
"mpu6500: write i2c slv0 ctrl failed.\n");
10188 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10193 prev |= enable << 7;
10197 handle->
debug_print(
"mpu6500: write i2c slv1 ctrl failed.\n");
10207 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10212 prev |= enable << 7;
10216 handle->
debug_print(
"mpu6500: write i2c slv2 ctrl failed.\n");
10226 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
10231 prev |= enable << 7;
10235 handle->
debug_print(
"mpu6500: write i2c slv3 ctrl failed.\n");
10242 handle->
debug_print(
"mpu6500: invalid slave.\n");
10268 if (handle == NULL)
10272 if (handle->
inited != 1)
10282 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10293 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10304 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10315 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
10323 handle->
debug_print(
"mpu6500: invalid slave.\n");
10349 if (handle == NULL)
10353 if (handle->
inited != 1)
10363 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10368 prev |= enable << 6;
10372 handle->
debug_print(
"mpu6500: write i2c slv0 ctrl failed.\n");
10382 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10387 prev |= enable << 6;
10391 handle->
debug_print(
"mpu6500: write i2c slv1 ctrl failed.\n");
10401 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10406 prev |= enable << 6;
10410 handle->
debug_print(
"mpu6500: write i2c slv2 ctrl failed.\n");
10420 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
10425 prev |= enable << 6;
10429 handle->
debug_print(
"mpu6500: write i2c slv3 ctrl failed.\n");
10436 handle->
debug_print(
"mpu6500: invalid slave.\n");
10462 if (handle == NULL)
10466 if (handle->
inited != 1)
10476 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10487 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10498 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10509 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
10517 handle->
debug_print(
"mpu6500: invalid slave.\n");
10543 if (handle == NULL)
10547 if (handle->
inited != 1)
10557 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10566 handle->
debug_print(
"mpu6500: write i2c slv0 ctrl failed.\n");
10576 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10585 handle->
debug_print(
"mpu6500: write i2c slv1 ctrl failed.\n");
10595 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10604 handle->
debug_print(
"mpu6500: write i2c slv2 ctrl failed.\n");
10614 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
10623 handle->
debug_print(
"mpu6500: write i2c slv3 ctrl failed.\n");
10630 handle->
debug_print(
"mpu6500: invalid slave.\n");
10656 if (handle == NULL)
10660 if (handle->
inited != 1)
10670 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10681 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10692 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10703 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
10711 handle->
debug_print(
"mpu6500: invalid slave.\n");
10737 if (handle == NULL)
10741 if (handle->
inited != 1)
10751 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10756 prev |= order << 4;
10760 handle->
debug_print(
"mpu6500: write i2c slv0 ctrl failed.\n");
10770 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10775 prev |= order << 4;
10779 handle->
debug_print(
"mpu6500: write i2c slv1 ctrl failed.\n");
10789 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10794 prev |= order << 4;
10798 handle->
debug_print(
"mpu6500: write i2c slv2 ctrl failed.\n");
10808 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
10813 prev |= order << 4;
10817 handle->
debug_print(
"mpu6500: write i2c slv3 ctrl failed.\n");
10824 handle->
debug_print(
"mpu6500: invalid slave.\n");
10850 if (handle == NULL)
10854 if (handle->
inited != 1)
10864 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10875 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10886 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10897 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
10905 handle->
debug_print(
"mpu6500: invalid slave.\n");
10932 if (handle == NULL)
10936 if (handle->
inited != 1)
10952 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
10961 handle->
debug_print(
"mpu6500: write i2c slv0 ctrl failed.\n");
10971 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
10980 handle->
debug_print(
"mpu6500: write i2c slv1 ctrl failed.\n");
10990 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
10999 handle->
debug_print(
"mpu6500: write i2c slv2 ctrl failed.\n");
11009 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
11018 handle->
debug_print(
"mpu6500: write i2c slv3 ctrl failed.\n");
11025 handle->
debug_print(
"mpu6500: invalid slave.\n");
11051 if (handle == NULL)
11055 if (handle->
inited != 1)
11065 handle->
debug_print(
"mpu6500: read i2c slv0 ctrl failed.\n");
11069 *len = prev & 0x0F;
11076 handle->
debug_print(
"mpu6500: read i2c slv1 ctrl failed.\n");
11080 *len = prev & 0x0F;
11087 handle->
debug_print(
"mpu6500: read i2c slv2 ctrl failed.\n");
11091 *len = prev & 0x0F;
11098 handle->
debug_print(
"mpu6500: read i2c slv3 ctrl failed.\n");
11102 *len = prev & 0x0F;
11106 handle->
debug_print(
"mpu6500: invalid slave.\n");
11129 if (handle == NULL)
11133 if (handle->
inited != 1)
11141 handle->
debug_print(
"mpu6500: read i2c mst status failed.\n");
11166 if (handle == NULL)
11170 if (handle->
inited != 1)
11178 handle->
debug_print(
"mpu6500: read i2c mst delay ctrl failed.\n");
11182 prev &= ~(1 << delay);
11183 prev |= enable << delay;
11187 handle->
debug_print(
"mpu6500: write i2c mst delay ctrl failed.\n");
11212 if (handle == NULL)
11216 if (handle->
inited != 1)
11224 handle->
debug_print(
"mpu6500: read i2c mst delay ctrl failed.\n");
11249 if (handle == NULL)
11253 if (handle->
inited != 1)
11261 handle->
debug_print(
"mpu6500: read i2c slv4 ctrl failed.\n");
11266 prev |= enable << 7;
11270 handle->
debug_print(
"mpu6500: write i2c slv4 ctrl failed.\n");
11294 if (handle == NULL)
11298 if (handle->
inited != 1)
11306 handle->
debug_print(
"mpu6500: read i2c slv4 ctrl failed.\n");
11331 if (handle == NULL)
11335 if (handle->
inited != 1)
11343 handle->
debug_print(
"mpu6500: read i2c slv4 ctrl failed.\n");
11348 prev |= enable << 6;
11352 handle->
debug_print(
"mpu6500: write i2c slv4 ctrl failed.\n");
11376 if (handle == NULL)
11380 if (handle->
inited != 1)
11388 handle->
debug_print(
"mpu6500: read i2c slv4 ctrl failed.\n");
11413 if (handle == NULL)
11417 if (handle->
inited != 1)
11425 handle->
debug_print(
"mpu6500: read i2c slv4 ctrl failed.\n");
11434 handle->
debug_print(
"mpu6500: write i2c slv4 ctrl failed.\n");
11458 if (handle == NULL)
11462 if (handle->
inited != 1)
11470 handle->
debug_print(
"mpu6500: read i2c slv4 ctrl failed.\n");
11496 if (handle == NULL)
11500 if (handle->
inited != 1)
11514 handle->
debug_print(
"mpu6500: read i2c slv4 ctrl failed.\n");
11523 handle->
debug_print(
"mpu6500: write i2c slv4 ctrl failed.\n");
11547 if (handle == NULL)
11551 if (handle->
inited != 1)
11559 handle->
debug_print(
"mpu6500: read i2c slv4 ctrl failed.\n");
11563 *delay = prev & 0x1F;
11583 if (handle == NULL)
11587 if (handle->
inited != 1)
11595 handle->
debug_print(
"mpu6500: write i2c slv4 do failed.\n");
11618 if (handle == NULL)
11622 if (handle->
inited != 1)
11630 handle->
debug_print(
"mpu6500: read i2c slv4 do failed.\n");
11653 if (handle == NULL)
11657 if (handle->
inited != 1)
11665 handle->
debug_print(
"mpu6500: write i2c slv4 di failed.\n");
11688 if (handle == NULL)
11692 if (handle->
inited != 1)
11700 handle->
debug_print(
"mpu6500: read i2c slv4 di failed.\n");
11725 if (handle == NULL)
11729 if (handle->
inited != 1)
11743 handle->
debug_print(
"mpu6500: read ext sens data 00 failed.\n");
11766 if (handle == NULL)
11770 if (handle->
inited != 1)
11775 return a_mpu6500_write(handle, reg, buf, len);
11793 if (handle == NULL)
11797 if (handle->
inited != 1)
11802 return a_mpu6500_read(handle, reg, buf, len);
11823 strncpy(info->
interface,
"IIC SPI", 8);
#define MPU6500_REG_I2C_SLV2_REG
#define MPU6500_REG_SIGNAL_PATH_RESET
#define MPU6500_DMP_TAP_MIN_TAP_COUNT
#define MPU6500_REG_TEMP_OUT_H
#define MPU6500_REG_CONFIG
#define MPU6500_REG_I2C_SLV4_DI
#define MPU6500_REG_I2C_SLV2_CTRL
#define MPU6500_REG_INT_STATUS
#define MPU6500_REG_I2C_SLV0_CTRL
#define MPU6500_DMP_TAP_THZ
#define MPU6500_DMP_CFG_6
#define MPU6500_DMP_D_0_104
#define MPU6500_REG_INT_PIN_CFG
#define MPU6500_REG_ACCEL_XOUT_H
#define MPU6500_DMP_TAP_THX
#define MPU6500_DMP_D_0_22
#define MPU6500_DMP_CFG_15
#define MPU6500_REG_SELF_TEST_X_ACCEL
#define MPU6500_REG_SELF_TEST_Y_GYRO
#define MPU6500_REG_I2C_SLV1_ADDR
#define MIN(a, b)
inner function definition
#define MPU6500_DMP_FCFG_2
#define MPU6500_REG_I2C_SLV1_DO
#define MPU6500_REG_PROGRAM_START
#define MPU6500_DMP_D_1_218
#define MPU6500_REG_PWR_MGMT_2
#define MPU6500_REG_I2C_SLV0_REG
#define MPU6500_DMP_TAPW_MIN
#define MPU6500_REG_I2C_SLV4_REG
#define MPU6500_REG_I2C_SLV0_DO
#define MPU6500_DMP_D_1_79
#define MPU6500_REG_I2C_MST_CTRL
#define MPU6500_REG_MOT_DETECT_CTRL
#define MPU6500_REG_I2C_SLV4_ADDR
#define MPU6500_DMP_D_1_36
#define MPU6500_DMP_D_1_88
#define MPU6500_DMP_INT_SRC_ORIENT
#define MPU6500_REG_ZG_OFFSET_H
#define SUPPLY_VOLTAGE_MAX
#define MPU6500_DMP_FCFG_3
#define MPU6500_REG_PWR_MGMT_1
#define MPU6500_DMP_SHAKE_REJECT_TIME
#define MPU6500_REG_SMPRT_DIV
#define MPU6500_REG_FIFO_COUNTH
#define MPU6500_REG_INT_ENABLE
#define MPU6500_DMP_SHAKE_REJECT_THRESH
#define MPU6500_REG_WOM_THR
#define MPU6500_REG_SELF_TEST_Z_ACCEL
#define MPU6500_REG_I2C_SLV0_ADDR
#define MPU6500_REG_EXT_SENS_DATA_00
#define MPU6500_REG_I2C_MST_DELAY_CTRL
#define MPU6500_DMP_CFG_27
#define MPU6500_DMP_CFG_ORIENT_INT
#define MPU6500_REG_ACCEL_CONFIG
#define MPU6500_REG_SELF_TEST_Z_GYRO
#define MPU6500_REG_BANK_SEL
#define MPU6500_DMP_D_1_90
#define MPU6500_REG_I2C_SLV2_ADDR
#define MPU6500_DMP_FCFG_7
#define MPU6500_REG_I2C_SLV3_DO
#define MPU6500_REG_I2C_SLV4_DO
#define MPU6500_DMP_SHAKE_REJECT_TIMEOUT
#define MANUFACTURER_NAME
#define MPU6500_DMP_CFG_GYRO_RAW_DATA
#define SUPPLY_VOLTAGE_MIN
#define MPU6500_DMP_CFG_8
#define MPU6500_REG_I2C_SLV1_CTRL
#define MPU6500_DMP_D_PEDSTD_STEPCTR
#define MPU6500_REG_I2C_SLV2_DO
#define MPU6500_DMP_SAMPLE_RATE
mpu6500 dmp code definition
#define MPU6500_DMP_TAP_TIME
#define MPU6500_DMP_D_1_44
#define MPU6500_DMP_D_EXT_GYRO_BIAS_Z
#define MPU6500_DMP_D_EXT_GYRO_BIAS_X
#define MPU6500_REG_SELF_TEST_X_GYRO
chip register definition
#define MPU6500_REG_GYRO_CONFIG
#define MPU6500_DMP_D_EXT_GYRO_BIAS_Y
#define MPU6500_DMP_INT_SRC_TAP
#define MPU6500_REG_XG_OFFSET_H
#define MPU6500_REG_FIFO_EN
#define MPU6500_REG_YG_OFFSET_H
#define MPU6500_REG_I2C_SLV4_CTRL
#define MPU6500_DMP_D_PEDSTD_TIMECTR
#define MPU6500_DMP_CFG_LP_QUAT
#define MPU6500_DMP_TAP_THY
#define MPU6500_REG_I2C_SLV1_REG
#define MPU6500_DMP_D_1_92
#define MPU6500_REG_I2C_SLV3_CTRL
#define MPU6500_REG_I2C_SLV3_ADDR
#define MPU6500_REG_YA_OFFSET_H
#define CHIP_NAME
chip information definition
#define MPU6500_DMP_GYRO_SF
#define MPU6500_REG_WHO_AM_I
#define MPU6500_REG_SELF_TEST_Y_ACCEL
#define MPU6500_REG_USER_CTRL
#define MPU6500_REG_XA_OFFSET_H
#define MPU6500_DMP_D_ACCEL_BIAS
#define MPU6500_DMP_QUAT_MAG_SQ_MAX
#define MPU6500_REG_ACCEL_CONFIG2
#define MPU6500_DMP_TAP_TIME_MULTI
#define MPU6500_DMP_D_1_72
#define MPU6500_DMP_CFG_MOTION_BIAS
#define MPU6500_DMP_D_1_40
#define MPU6500_DMP_TAP_THRESH
#define MPU6500_DMP_CFG_20
#define MPU6500_REG_I2C_MST_STATUS
#define MPU6500_REG_LP_ACCEL_ODR
#define MPU6500_DMP_QUAT_MAG_SQ_MIN
#define MPU6500_DMP_FCFG_1
#define MPU6500_DMP_CFG_FIFO_ON_EVENT
#define MPU6500_REG_ZA_OFFSET_H
#define MPU6500_REG_I2C_SLV3_REG
#define MPU6500_DMP_FEATURE_SEND_ANY_GYRO
driver mpu6500 header file
driver mpu6500 code header file
uint8_t mpu6500_set_motion_threshold(mpu6500_handle_t *handle, uint8_t threshold)
set the motion_threshold
uint8_t mpu6500_get_gyroscope_y_test(mpu6500_handle_t *handle, uint8_t *data)
get the gyroscope y test
uint8_t mpu6500_get_fsync_interrupt_level(mpu6500_handle_t *handle, mpu6500_pin_level_t *level)
get the fsync interrupt level
uint8_t mpu6500_set_ptat(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the temperature sensor
mpu6500_accelerometer_low_pass_filter_t
mpu6500 accelerometer low pass filter enumeration definition
uint8_t mpu6500_set_accelerometer_choice(mpu6500_handle_t *handle, uint8_t choice)
set the accelerometer choice
uint8_t mpu6500_set_iic_address(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, uint8_t addr_7bit)
set the iic address
uint8_t mpu6500_set_interface(mpu6500_handle_t *handle, mpu6500_interface_t interface)
set the chip interface
mpu6500_address_t
mpu6500 address enumeration definition
uint8_t mpu6500_get_iic_group_order(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_iic_group_order_t *order)
get the iic group order
uint8_t mpu6500_get_gyroscope_x_test(mpu6500_handle_t *handle, uint8_t *data)
get the gyroscope x test
uint8_t mpu6500_read_extern_sensor_data(mpu6500_handle_t *handle, uint8_t *data, uint8_t len)
read the extern sensor data
uint8_t mpu6500_set_gyro_standby(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the gyro standby
struct mpu6500_info_s mpu6500_info_t
mpu6500 information structure definition
mpu6500_bool_t
mpu6500 bool enumeration definition
uint8_t mpu6500_set_accelerometer_x_offset(mpu6500_handle_t *handle, int16_t offset)
set the accelerometer x offset
uint8_t mpu6500_get_iic_multi_master(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the iic multi master status
uint8_t mpu6500_get_low_pass_filter(mpu6500_handle_t *handle, mpu6500_low_pass_filter_t *filter)
get the low pass filter
uint8_t mpu6500_set_iic_multi_master(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable iic multi master
uint8_t mpu6500_fifo_get(mpu6500_handle_t *handle, uint8_t *buf, uint16_t len)
fifo read bytes
uint8_t mpu6500_set_addr_pin(mpu6500_handle_t *handle, mpu6500_address_t addr_pin)
set the chip address pin
uint8_t mpu6500_accelerometer_offset_convert_to_data(mpu6500_handle_t *handle, int16_t reg, float *mg)
convert the register raw data to the accelerometer offset
uint8_t mpu6500_get_accelerometer_x_offset(mpu6500_handle_t *handle, int16_t *offset)
get the accelerometer x offset
uint8_t mpu6500_get_iic4_interrupt(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the iic4 interrupt status
uint8_t mpu6500_get_gyro_z_offset(mpu6500_handle_t *handle, int16_t *offset)
get the gyro z offset
uint8_t mpu6500_set_iic_wait_for_external_sensor(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable iic wait for external sensor
mpu6500_iic_mode_t
mpu6500 iic mode enumeration definition
uint8_t mpu6500_get_iic_data_out(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, uint8_t *data)
get the iic data out
mpu6500_pin_level_t
mpu6500 pin level enumeration definition
uint8_t mpu6500_set_iic_bypass(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic bypass
uint8_t mpu6500_get_gyroscope_choice(mpu6500_handle_t *handle, uint8_t *choice)
get the gyroscope choice
uint8_t mpu6500_get_interrupt_read_clear(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the interrupt reading clear status
uint8_t mpu6500_force_fifo_reset(mpu6500_handle_t *handle)
force reset the fifo
uint8_t mpu6500_set_iic4_data_out(mpu6500_handle_t *handle, uint8_t data)
set the iic4 data out
mpu6500_interrupt_t
mpu6500 interrupt enumeration definition
uint8_t mpu6500_set_accel_compare_with_previous_sample(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable accel compare with previous sample
uint8_t mpu6500_get_accelerometer_z_test(mpu6500_handle_t *handle, uint8_t *data)
get the accelerometer z test
uint8_t mpu6500_set_iic_group_order(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_iic_group_order_t order)
set the iic group order
uint8_t mpu6500_get_iic_register(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, uint8_t *reg)
get the iic register
uint8_t mpu6500_get_accelerometer_range(mpu6500_handle_t *handle, mpu6500_accelerometer_range_t *range)
get the accelerometer range
mpu6500_iic_transaction_mode_t
mpu6500 iic transaction mode enumeration definition
mpu6500_iic_read_mode_t
mpu6500 iic read mode enumeration definition
uint8_t mpu6500_get_iic_bypass(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the iic bypass status
uint8_t mpu6500_set_accelerometer_y_offset(mpu6500_handle_t *handle, int16_t offset)
set the accelerometer y offset
uint8_t mpu6500_set_accelerometer_z_offset(mpu6500_handle_t *handle, int16_t offset)
set the accelerometer z offset
uint8_t mpu6500_accelerometer_offset_convert_to_register(mpu6500_handle_t *handle, float mg, int16_t *reg)
convert the accelerometer offset to the register raw data
uint8_t mpu6500_set_iic_transaction_mode(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_iic_transaction_mode_t mode)
set the iic transaction mode
uint8_t mpu6500_get_accelerometer_test(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t *enable)
get the accelerometer test
uint8_t mpu6500_set_fifo(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable fifo
uint8_t mpu6500_get_fifo(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the fifo status
uint8_t mpu6500_get_sleep(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the sleep status
uint8_t mpu6500_get_sample_rate_divider(mpu6500_handle_t *handle, uint8_t *d)
get the sample rate divider
uint8_t mpu6500_get_device_reset(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the device reset status
uint8_t mpu6500_set_interrupt_level(mpu6500_handle_t *handle, mpu6500_pin_level_t level)
set the interrupt level
uint8_t mpu6500_set_iic4_data_in(mpu6500_handle_t *handle, uint8_t data)
set the iic4 data in
uint8_t mpu6500_get_fifo_enable(mpu6500_handle_t *handle, mpu6500_fifo_t fifo, mpu6500_bool_t *enable)
get the fifo function status
uint8_t mpu6500_get_disable_iic_slave(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the iic slave status
uint8_t mpu6500_get_gyroscope_test(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t *enable)
get the gyroscope test
mpu6500_clock_source_t
mpu6500 clock source enumeration definition
uint8_t mpu6500_set_fsync_interrupt_level(mpu6500_handle_t *handle, mpu6500_pin_level_t level)
set the fsync interrupt level
uint8_t mpu6500_get_accelerometer_low_pass_filter(mpu6500_handle_t *handle, mpu6500_accelerometer_low_pass_filter_t *filter)
get the accelerometer low pass filter
uint8_t mpu6500_read(mpu6500_handle_t *handle, int16_t(*accel_raw)[3], float(*accel_g)[3], int16_t(*gyro_raw)[3], float(*gyro_dps)[3], uint16_t *len)
read the data
mpu6500_iic_group_order_t
mpu6500 iic group order enumeration definition
uint8_t mpu6500_get_iic_master_reset(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the iic master reset status
uint8_t mpu6500_get_iic4_data_out(mpu6500_handle_t *handle, uint8_t *data)
get the iic4 data out
uint8_t mpu6500_set_iic_clock(mpu6500_handle_t *handle, mpu6500_iic_clock_t clk)
set the iic clock
uint8_t mpu6500_get_clock_source(mpu6500_handle_t *handle, mpu6500_clock_source_t *clock_source)
get the chip clock source
mpu6500_gyroscope_range_t
mpu6500 gyroscope range enumeration definition
uint8_t mpu6500_get_wake_on_motion(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the wake on motion status
uint8_t mpu6500_gyro_offset_convert_to_data(mpu6500_handle_t *handle, int16_t reg, float *dps)
convert the register raw data to the gyro offset
uint8_t mpu6500_get_iic_master(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the iic master status
uint8_t mpu6500_get_accelerometer_y_test(mpu6500_handle_t *handle, uint8_t *data)
get the accelerometer y test
uint8_t mpu6500_get_addr_pin(mpu6500_handle_t *handle, mpu6500_address_t *addr_pin)
get the chip address pin
struct mpu6500_handle_s mpu6500_handle_t
mpu6500 handle structure definition
mpu6500_source_t
mpu6500 source enumeration definition
uint8_t mpu6500_get_iic4_enable(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the iic4 status
uint8_t mpu6500_set_gyroscope_choice(mpu6500_handle_t *handle, uint8_t choice)
set the gyroscope choice
mpu6500_iic_clock_t
mpu6500 iic clock enumeration definition
uint8_t mpu6500_get_fsync_interrupt(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the fsync interrupt status
uint8_t mpu6500_set_iic_read_mode(mpu6500_handle_t *handle, mpu6500_iic_read_mode_t mode)
set the iic read mode
uint8_t mpu6500_get_cycle_wake_up(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the cycle wake up mode status
uint8_t mpu6500_set_iic_delay(mpu6500_handle_t *handle, uint8_t delay)
set the iic delay
uint8_t mpu6500_get_fifo_count(mpu6500_handle_t *handle, uint16_t *count)
get the fifo counter value
uint8_t mpu6500_get_gyro_x_offset(mpu6500_handle_t *handle, int16_t *offset)
get the gyro x offset
uint8_t mpu6500_set_fsync_interrupt(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the fsync interrupt
uint8_t mpu6500_get_interrupt(mpu6500_handle_t *handle, mpu6500_interrupt_t type, mpu6500_bool_t *enable)
get the interrupt status
uint8_t mpu6500_get_iic4_data_in(mpu6500_handle_t *handle, uint8_t *data)
get the iic4 data in
uint8_t mpu6500_get_gyroscope_z_test(mpu6500_handle_t *handle, uint8_t *data)
get the gyroscope z test
uint8_t mpu6500_get_accelerometer_z_offset(mpu6500_handle_t *handle, int16_t *offset)
get the accelerometer z offset
uint8_t mpu6500_get_iic_delay_enable(mpu6500_handle_t *handle, mpu6500_iic_delay_t delay, mpu6500_bool_t *enable)
get the iic delay status
mpu6500_iic_delay_t
mpu6500 iic delay enumeration definition
uint8_t mpu6500_get_ptat(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the temperature sensor status
uint8_t mpu6500_get_iic_byte_swap(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_bool_t *enable)
get the iic byte swap status
uint8_t mpu6500_set_sleep(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the sleep mode
uint8_t mpu6500_set_gyroscope_x_test(mpu6500_handle_t *handle, uint8_t data)
set the gyroscope x test
uint8_t mpu6500_motion_threshold_convert_to_data(mpu6500_handle_t *handle, uint8_t reg, float *mg)
convert the register raw data to the motion threshold
uint8_t mpu6500_sensor_reset(mpu6500_handle_t *handle)
reset all sensors
uint8_t mpu6500_read_temperature(mpu6500_handle_t *handle, int16_t(*raw), float *degrees)
read the temperature
uint8_t mpu6500_set_interrupt_latch(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the interrupt latch
uint8_t mpu6500_get_interrupt_level(mpu6500_handle_t *handle, mpu6500_pin_level_t *level)
get the interrupt level
mpu6500_axis_t
mpu6500 axis enumeration definition
uint8_t mpu6500_get_iic_read_mode(mpu6500_handle_t *handle, mpu6500_iic_read_mode_t *mode)
get the iic read mode
uint8_t mpu6500_get_interface(mpu6500_handle_t *handle, mpu6500_interface_t *interface)
get the chip interface
mpu6500_iic_slave_t
mpu6500 iic slave enumeration definition
uint8_t mpu6500_gyro_offset_convert_to_register(mpu6500_handle_t *handle, float dps, int16_t *reg)
convert the gyro offset to the register raw data
uint8_t mpu6500_get_iic_transaction_mode(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_iic_transaction_mode_t *mode)
get the iic transaction mode
uint8_t mpu6500_get_iic_status(mpu6500_handle_t *handle, uint8_t *status)
get the iic status
uint8_t mpu6500_set_gyroscope_range(mpu6500_handle_t *handle, mpu6500_gyroscope_range_t range)
set the gyroscope range
uint8_t mpu6500_get_iic_enable(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_bool_t *enable)
get the iic status
uint8_t mpu6500_info(mpu6500_info_t *info)
get the chip's information
uint8_t mpu6500_set_clock_source(mpu6500_handle_t *handle, mpu6500_clock_source_t clock_source)
set the chip clock source
uint8_t mpu6500_get_iic_transferred_len(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, uint8_t *len)
get the iic transferred length
uint8_t mpu6500_get_iic_wait_for_external_sensor(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the iic wait for external sensor status
uint8_t mpu6500_set_wake_on_motion(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable wake on motion
uint8_t mpu6500_set_signal_path_reset(mpu6500_handle_t *handle, mpu6500_signal_path_reset_t path)
set the signal path reset
uint8_t mpu6500_set_gyro_x_offset(mpu6500_handle_t *handle, int16_t offset)
set the gyro x offset
uint8_t mpu6500_get_fifo_reset(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the fifo reset status
uint8_t mpu6500_set_interrupt_read_clear(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the interrupt reading clear
uint8_t mpu6500_get_accel_compare_with_previous_sample(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the accel compare with previous sample status
mpu6500_iic4_transaction_mode_t
mpu6500 iic4 transaction mode enumeration definition
uint8_t mpu6500_set_gyro_z_offset(mpu6500_handle_t *handle, int16_t offset)
set the gyro z offset
uint8_t mpu6500_set_gyroscope_z_test(mpu6500_handle_t *handle, uint8_t data)
set the gyroscope z test
mpu6500_fifo_mode
mpu6500 fifo mode enumeration definition
uint8_t mpu6500_set_accelerometer_y_test(mpu6500_handle_t *handle, uint8_t data)
set the accelerometer y test
uint8_t mpu6500_set_iic_byte_swap(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_bool_t enable)
enable or disable the iic byte swap
uint8_t mpu6500_get_gyroscope_range(mpu6500_handle_t *handle, mpu6500_gyroscope_range_t *range)
get the gyroscope range
uint8_t mpu6500_set_interrupt(mpu6500_handle_t *handle, mpu6500_interrupt_t type, mpu6500_bool_t enable)
enable or disable the interrupt
mpu6500_signal_path_reset_t
mpu6500 signal path reset enumeration definition
uint8_t mpu6500_set_gyro_y_offset(mpu6500_handle_t *handle, int16_t offset)
set the gyro y offset
uint8_t mpu6500_set_iic_transferred_len(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, uint8_t len)
set the iic transferred length
uint8_t mpu6500_set_fifo_enable(mpu6500_handle_t *handle, mpu6500_fifo_t fifo, mpu6500_bool_t enable)
enable or disable the fifo function
uint8_t mpu6500_set_accelerometer_x_test(mpu6500_handle_t *handle, uint8_t data)
set the accelerometer x test
uint8_t mpu6500_set_iic4_transaction_mode(mpu6500_handle_t *handle, mpu6500_iic4_transaction_mode_t mode)
set the iic4 transaction mode
uint8_t mpu6500_deinit(mpu6500_handle_t *handle)
close the chip
uint8_t mpu6500_iic_master_reset(mpu6500_handle_t *handle)
reset the iic master controller
uint8_t mpu6500_get_accelerometer_y_offset(mpu6500_handle_t *handle, int16_t *offset)
get the accelerometer y offset
uint8_t mpu6500_set_low_pass_filter(mpu6500_handle_t *handle, mpu6500_low_pass_filter_t filter)
set the low pass filter
uint8_t mpu6500_irq_handler(mpu6500_handle_t *handle)
irq handler
uint8_t mpu6500_get_accelerometer_x_test(mpu6500_handle_t *handle, uint8_t *data)
get the accelerometer x test
uint8_t mpu6500_get_motion_threshold(mpu6500_handle_t *handle, uint8_t *threshold)
get the motion_threshold
mpu6500_extern_sync_t
mpu6500 extern sync enumeration definition
uint8_t mpu6500_get_iic_address(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, uint8_t *addr_7bit)
get the iic address
uint8_t mpu6500_set_extern_sync(mpu6500_handle_t *handle, mpu6500_extern_sync_t sync)
set the extern sync type
uint8_t mpu6500_set_low_power_accel_output_rate(mpu6500_handle_t *handle, mpu6500_low_power_accel_output_rate_t rate)
set the low power accel output rate
uint8_t mpu6500_get_low_power_accel_output_rate(mpu6500_handle_t *handle, mpu6500_low_power_accel_output_rate_t *rate)
get the low power accel output rate
uint8_t mpu6500_set_iic_mode(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_iic_mode_t mode)
set the iic mode
uint8_t mpu6500_get_iic_fifo_enable(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_bool_t *enable)
get the iic fifo status
uint8_t mpu6500_get_iic4_transaction_mode(mpu6500_handle_t *handle, mpu6500_iic4_transaction_mode_t *mode)
get the iic4 transaction mode
uint8_t mpu6500_set_iic4_enable(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic4
uint8_t mpu6500_get_iic_delay(mpu6500_handle_t *handle, uint8_t *delay)
get the iic delay
mpu6500_low_power_accel_output_rate_t
mpu6500 low power accel output rate enumeration definition
uint8_t mpu6500_get_sensor_reset(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the sensor reset status
uint8_t mpu6500_set_iic4_interrupt(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic4 interrupt
uint8_t mpu6500_set_iic_register(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, uint8_t reg)
set the iic register
uint8_t mpu6500_set_fifo_mode(mpu6500_handle_t *handle, mpu6500_fifo_mode mode)
set the fifo mode
uint8_t mpu6500_set_disable_iic_slave(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic slave mode
uint8_t mpu6500_get_gyro_standby(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the gyro standby status
mpu6500_fifo_t
mpu6500 fifo enumeration definition
uint8_t mpu6500_set_iic_master(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic master mode
uint8_t mpu6500_set_cycle_wake_up(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the cycle wake up mode
uint8_t mpu6500_get_fifo_mode(mpu6500_handle_t *handle, mpu6500_fifo_mode *mode)
get the fifo mode
mpu6500_accelerometer_range_t
mpu6500 accelerometer range enumeration definition
uint8_t mpu6500_motion_threshold_convert_to_register(mpu6500_handle_t *handle, float mg, uint8_t *reg)
convert the motion threshold to the register raw data
uint8_t mpu6500_init(mpu6500_handle_t *handle)
initialize the chip
uint8_t mpu6500_set_accelerometer_range(mpu6500_handle_t *handle, mpu6500_accelerometer_range_t range)
set the accelerometer range
uint8_t mpu6500_set_accelerometer_test(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t enable)
set the accelerometer test
uint8_t mpu6500_set_iic_fifo_enable(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_bool_t enable)
enable or disable the iic fifo
uint8_t mpu6500_fifo_reset(mpu6500_handle_t *handle)
reset the fifo
uint8_t mpu6500_get_interrupt_latch(mpu6500_handle_t *handle, mpu6500_bool_t *enable)
get the interrupt latch status
uint8_t mpu6500_get_extern_sync(mpu6500_handle_t *handle, mpu6500_extern_sync_t *sync)
get the extern sync type
uint8_t mpu6500_get_gyro_y_offset(mpu6500_handle_t *handle, int16_t *offset)
get the gyro y offset
uint8_t mpu6500_device_reset(mpu6500_handle_t *handle)
reset the chip
uint8_t mpu6500_set_gyroscope_y_test(mpu6500_handle_t *handle, uint8_t data)
set the gyroscope y test
uint8_t mpu6500_get_iic_clock(mpu6500_handle_t *handle, mpu6500_iic_clock_t *clk)
get the iic clock
uint8_t mpu6500_get_interrupt_pin_type(mpu6500_handle_t *handle, mpu6500_pin_type_t *type)
get the interrupt pin type
uint8_t mpu6500_get_standby_mode(mpu6500_handle_t *handle, mpu6500_source_t source, mpu6500_bool_t *enable)
get the source mode
uint8_t mpu6500_set_accelerometer_z_test(mpu6500_handle_t *handle, uint8_t data)
set the accelerometer z test
mpu6500_pin_type_t
mpu6500 pin type enumeration definition
uint8_t mpu6500_set_iic_data_out(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, uint8_t data)
set the iic data out
mpu6500_interface_t
mpu6500 interface enumeration definition
uint8_t mpu6500_get_accelerometer_choice(mpu6500_handle_t *handle, uint8_t *choice)
get the accelerometer choice
uint8_t mpu6500_set_iic_delay_enable(mpu6500_handle_t *handle, mpu6500_iic_delay_t delay, mpu6500_bool_t enable)
enable or disable the iic delay
uint8_t mpu6500_set_fifo_1024kb(mpu6500_handle_t *handle)
set fifo 1024kb
uint8_t mpu6500_set_standby_mode(mpu6500_handle_t *handle, mpu6500_source_t source, mpu6500_bool_t enable)
set source into standby mode
uint8_t mpu6500_get_iic_mode(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_iic_mode_t *mode)
get the iic mode
uint8_t mpu6500_fifo_set(mpu6500_handle_t *handle, uint8_t *buf, uint16_t len)
fifo write bytes
uint8_t mpu6500_set_accelerometer_low_pass_filter(mpu6500_handle_t *handle, mpu6500_accelerometer_low_pass_filter_t filter)
set the accelerometer low pass filter
uint8_t mpu6500_get_interrupt_status(mpu6500_handle_t *handle, uint8_t *status)
get the interrupt status
mpu6500_low_pass_filter_t
mpu6500 low pass filter enumeration definition
uint8_t mpu6500_set_interrupt_pin_type(mpu6500_handle_t *handle, mpu6500_pin_type_t type)
set the interrupt pin type
uint8_t mpu6500_set_gyroscope_test(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t enable)
set the gyroscope test
uint8_t mpu6500_set_iic_enable(mpu6500_handle_t *handle, mpu6500_iic_slave_t slave, mpu6500_bool_t enable)
enable or disable the iic
uint8_t mpu6500_self_test(mpu6500_handle_t *handle, int32_t gyro_offset_raw[3], int32_t accel_offset_raw[3])
run the self test
uint8_t mpu6500_set_sample_rate_divider(mpu6500_handle_t *handle, uint8_t d)
set the sample rate divider
@ MPU6500_INTERRUPT_DATA_READY
@ MPU6500_INTERRUPT_FIFO_OVERFLOW
@ MPU6500_INTERRUPT_MOTION
@ MPU6500_INTERRUPT_FSYNC_INT
#define MPU6500_DMP_CODE_SIZE
mpu6500 dmp code definition
uint8_t mpu6500_dmp_set_tap_time(mpu6500_handle_t *handle, uint16_t ms)
dmp set the tap time
uint8_t mpu6500_dmp_get_shake_reject_thresh(mpu6500_handle_t *handle, uint16_t *dps)
dmp get the shake reject thresh
uint8_t mpu6500_dmp_get_tap_time(mpu6500_handle_t *handle, uint16_t *ms)
dmp get the tap time
uint8_t mpu6500_dmp_get_fifo_rate(mpu6500_handle_t *handle, uint16_t *rate)
dmp get the fifo rate
uint8_t mpu6500_dmp_set_accel_bias(mpu6500_handle_t *handle, int32_t bias[3])
dmp set the accel bias
uint8_t mpu6500_dmp_get_min_tap_count(mpu6500_handle_t *handle, uint8_t *cnt)
dmp get the min tap count
uint8_t mpu6500_dmp_set_gyro_bias(mpu6500_handle_t *handle, int32_t bias[3])
dmp set the gyro bias
uint8_t mpu6500_dmp_gyro_accel_raw_offset_convert(mpu6500_handle_t *handle, int32_t gyro_offset_raw[3], int32_t accel_offset_raw[3], int32_t gyro_offset[3], int32_t accel_offset[3])
dmp gyro accel raw offset convert
uint8_t mpu6500_dmp_set_tap_thresh(mpu6500_handle_t *handle, mpu6500_axis_t axis, uint16_t mg_ms)
dmp set the tap thresh
uint8_t mpu6500_dmp_set_shake_reject_time(mpu6500_handle_t *handle, uint16_t ms)
dmp set the shake reject time
uint8_t mpu6500_dmp_set_min_tap_count(mpu6500_handle_t *handle, uint8_t cnt)
dmp set the min tap count
uint8_t mpu6500_dmp_set_fifo_rate(mpu6500_handle_t *handle, uint16_t rate)
dmp set the fifo rate
uint8_t mpu6500_dmp_set_orient_callback(mpu6500_handle_t *handle, void(*callback)(uint8_t orientation))
dmp set the orient callback
uint8_t mpu6500_dmp_read(mpu6500_handle_t *handle, int16_t(*accel_raw)[3], float(*accel_g)[3], int16_t(*gyro_raw)[3], float(*gyro_dps)[3], int32_t(*quat)[4], float *pitch, float *roll, float *yaw, uint16_t *l)
dmp read the data
uint8_t mpu6500_dmp_set_shake_reject_timeout(mpu6500_handle_t *handle, uint16_t ms)
dmp set the shake reject timeout
mpu6500_dmp_interrupt_mode_t
mpu6500 dmp interrupt mode enumeration definition
uint8_t mpu6500_dmp_get_shake_reject_timeout(mpu6500_handle_t *handle, uint16_t *ms)
dmp get the shake reject timeout
uint8_t mpu6500_dmp_set_tap_callback(mpu6500_handle_t *handle, void(*callback)(uint8_t count, uint8_t direction))
dmp set the tap callback
uint8_t mpu6500_dmp_get_tap_axes(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t *enable)
dmp get the tap axes status
uint8_t mpu6500_dmp_set_pedometer_step_count(mpu6500_handle_t *handle, uint32_t count)
dmp set the pedometer step count
uint8_t mpu6500_dmp_set_tap_axes(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t enable)
dmp enable or disable the tap axes
uint8_t mpu6500_dmp_get_shake_reject_time(mpu6500_handle_t *handle, uint16_t *ms)
dmp get the shake reject time
uint8_t mpu6500_dmp_load_firmware(mpu6500_handle_t *handle)
load the dmp firmware
uint8_t mpu6500_dmp_get_pedometer_walk_time(mpu6500_handle_t *handle, uint32_t *ms)
dmp get the pedometer walk time
uint8_t mpu6500_dmp_set_feature(mpu6500_handle_t *handle, uint16_t mask)
dmp enable or disable the dmp feature
uint8_t mpu6500_dmp_set_gyro_calibrate(mpu6500_handle_t *handle, mpu6500_bool_t enable)
dmp enable or disable gyro calibrate
uint8_t mpu6500_dmp_get_tap_time_multi(mpu6500_handle_t *handle, uint16_t *ms)
dmp get max time between taps to register as a multi tap
uint8_t mpu6500_dmp_get_tap_thresh(mpu6500_handle_t *handle, mpu6500_axis_t axis, uint16_t *mg_ms)
dmp get the tap thresh
uint8_t mpu6500_dmp_set_orientation(mpu6500_handle_t *handle, int8_t mat[9])
dmp set the orientation
uint8_t mpu6500_dmp_set_pedometer_walk_time(mpu6500_handle_t *handle, uint32_t ms)
dmp set the pedometer walk time
uint8_t mpu6500_dmp_set_interrupt_mode(mpu6500_handle_t *handle, mpu6500_dmp_interrupt_mode_t mode)
dmp set the interrupt mode
uint8_t mpu6500_dmp_set_tap_time_multi(mpu6500_handle_t *handle, uint16_t ms)
dmp set max time between taps to register as a multi tap
uint8_t mpu6500_dmp_set_shake_reject_thresh(mpu6500_handle_t *handle, uint16_t dps)
dmp set the shake reject thresh
uint8_t mpu6500_dmp_set_enable(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the dmp
uint8_t mpu6500_dmp_set_6x_quaternion(mpu6500_handle_t *handle, mpu6500_bool_t enable)
dmp enable or disable generate 6 axis quaternions from dmp
uint8_t mpu6500_dmp_set_3x_quaternion(mpu6500_handle_t *handle, mpu6500_bool_t enable)
dmp enable or disable generate 3 axis quaternions from dmp
uint8_t mpu6500_dmp_get_pedometer_step_count(mpu6500_handle_t *handle, uint32_t *count)
dmp get the pedometer step count
@ MPU6500_DMP_FEATURE_GYRO_CAL
@ MPU6500_DMP_FEATURE_PEDOMETER
@ MPU6500_DMP_FEATURE_SEND_CAL_GYRO
@ MPU6500_DMP_FEATURE_TAP
@ MPU6500_DMP_FEATURE_ORIENT
@ MPU6500_DMP_FEATURE_SEND_RAW_ACCEL
@ MPU6500_DMP_FEATURE_6X_QUAT
@ MPU6500_DMP_FEATURE_3X_QUAT
@ MPU6500_DMP_INTERRUPT_MODE_CONTINUOUS
uint8_t mpu6500_get_reg(mpu6500_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
get the chip register
uint8_t mpu6500_set_reg(mpu6500_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
set the chip register
void(* dmp_tap_callback)(uint8_t count, uint8_t direction)
uint8_t(* spi_init)(void)
void(* delay_ms)(uint32_t ms)
uint8_t(* spi_read)(uint8_t reg, uint8_t *buf, uint16_t len)
void(* receive_callback)(uint8_t type)
uint8_t(* spi_write)(uint8_t reg, uint8_t *buf, uint16_t len)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint8_t(* spi_deinit)(void)
void(* dmp_orient_callback)(uint8_t orientation)
uint8_t(* iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v