LibDriver MPU6500
Loading...
Searching...
No Matches
driver_mpu6500_dmp_read_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static mpu6500_handle_t gs_handle;
41static int16_t gs_accel_raw[128][3];
42static float gs_accel_g[128][3];
43static int16_t gs_gyro_raw[128][3];
44static float gs_gyro_dps[128][3];
45static int32_t gs_quat[128][4];
46static float gs_pitch[128];
47static float gs_roll[128];
48static float gs_yaw[128];
49
58{
59 if (mpu6500_irq_handler(&gs_handle) != 0)
60 {
61 return 1;
62 }
63
64 return 0;
65}
66
77uint8_t mpu6500_dmp_read_test(mpu6500_interface_t interface, mpu6500_address_t addr, uint32_t times)
78{
79 uint8_t res;
80 uint32_t ms;
81 uint32_t ms_check;
82 uint32_t cnt;
83 uint32_t cnt_check;
84 uint32_t i;
85 uint16_t m;
86 uint16_t m_check;
87 uint8_t c;
88 uint8_t c_check;
89 int32_t gyro_offset_raw[3];
90 int32_t accel_offset_raw[3];
91 int32_t gyro_offset[3];
92 int32_t accel_offset[3];
93 mpu6500_bool_t enable;
94 mpu6500_info_t info;
95 int8_t gyro_orientation[9] = {1, 0, 0,
96 0, 1, 0,
97 0, 0, 1};
98
99 /* link interface function */
112
113 /* get information */
114 res = mpu6500_info(&info);
115 if (res != 0)
116 {
117 mpu6500_interface_debug_print("mpu6500: get info failed.\n");
118
119 return 1;
120 }
121 else
122 {
123 /* print chip info */
124 mpu6500_interface_debug_print("mpu6500: chip is %s.\n", info.chip_name);
125 mpu6500_interface_debug_print("mpu6500: manufacturer is %s.\n", info.manufacturer_name);
126 mpu6500_interface_debug_print("mpu6500: interface is %s.\n", info.interface);
127 mpu6500_interface_debug_print("mpu6500: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
128 mpu6500_interface_debug_print("mpu6500: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
129 mpu6500_interface_debug_print("mpu6500: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
130 mpu6500_interface_debug_print("mpu6500: max current is %0.2fmA.\n", info.max_current_ma);
131 mpu6500_interface_debug_print("mpu6500: max temperature is %0.1fC.\n", info.temperature_max);
132 mpu6500_interface_debug_print("mpu6500: min temperature is %0.1fC.\n", info.temperature_min);
133 }
134
135 /* start dmp read test */
136 mpu6500_interface_debug_print("mpu6500: start dmp read test.\n");
137
138 /* set the interface */
139 res = mpu6500_set_interface(&gs_handle, interface);
140 if (res != 0)
141 {
142 mpu6500_interface_debug_print("mpu6500: set interface failed.\n");
143
144 return 1;
145 }
146
147 /* set the addr pin */
148 res = mpu6500_set_addr_pin(&gs_handle, addr);
149 if (res != 0)
150 {
151 mpu6500_interface_debug_print("mpu6500: set addr pin failed.\n");
152
153 return 1;
154 }
155
156 /* init */
157 res = mpu6500_init(&gs_handle);
158 if (res != 0)
159 {
160 mpu6500_interface_debug_print("mpu6500: init failed.\n");
161
162 return 1;
163 }
164
165 /* delay 100 ms */
167
168 /* disable sleep */
169 res = mpu6500_set_sleep(&gs_handle, MPU6500_BOOL_FALSE);
170 if (res != 0)
171 {
172 mpu6500_interface_debug_print("mpu6500: set sleep failed.\n");
173 (void)mpu6500_deinit(&gs_handle);
174
175 return 1;
176 }
177
178 /* if spi interface, disable iic interface */
179 if (interface == MPU6500_INTERFACE_SPI)
180 {
181 /* disable iic */
183 if (res != 0)
184 {
185 mpu6500_interface_debug_print("mpu6500: set disable iic slave failed.\n");
186 (void)mpu6500_deinit(&gs_handle);
187
188 return 1;
189 }
190 }
191
192 /* set fifo 1024kb */
193 res = mpu6500_set_fifo_1024kb(&gs_handle);
194 if (res != 0)
195 {
196 mpu6500_interface_debug_print("mpu6500: set fifo 1024kb failed.\n");
197 (void)mpu6500_deinit(&gs_handle);
198
199 return 1;
200 }
201
202 /* run the self test */
203 res = mpu6500_self_test(&gs_handle, gyro_offset_raw, accel_offset_raw);
204 if (res != 0)
205 {
206 mpu6500_interface_debug_print("mpu6500: self test failed.\n");
207 (void)mpu6500_deinit(&gs_handle);
208
209 return 1;
210 }
211
212 /* set fifo 1024kb */
213 res = mpu6500_set_fifo_1024kb(&gs_handle);
214 if (res != 0)
215 {
216 mpu6500_interface_debug_print("mpu6500: set fifo 1024kb failed.\n");
217 (void)mpu6500_deinit(&gs_handle);
218
219 return 1;
220 }
221
222 /* set pll */
224 if (res != 0)
225 {
226 mpu6500_interface_debug_print("mpu6500: set clock source failed.\n");
227 (void)mpu6500_deinit(&gs_handle);
228
229 return 1;
230 }
231
232 /* set 50Hz */
233 res = mpu6500_set_sample_rate_divider(&gs_handle, (1000 / 50) - 1);
234 if (res != 0)
235 {
236 mpu6500_interface_debug_print("mpu6500: set sample rate divider failed.\n");
237 (void)mpu6500_deinit(&gs_handle);
238
239 return 1;
240 }
241
242 /* ±2g */
244 if (res != 0)
245 {
246 mpu6500_interface_debug_print("mpu6500: set accelerometer range failed.\n");
247 (void)mpu6500_deinit(&gs_handle);
248
249 return 1;
250 }
251
252 /* ±2000dps */
254 if (res != 0)
255 {
256 mpu6500_interface_debug_print("mpu6500: set gyroscope range failed.\n");
257 (void)mpu6500_deinit(&gs_handle);
258
259 return 1;
260 }
261
262 /* set low pass filter 3 */
264 if (res != 0)
265 {
266 mpu6500_interface_debug_print("mpu6500: set low pass filter failed.\n");
267 (void)mpu6500_deinit(&gs_handle);
268
269 return 1;
270 }
271
272 /* enable temperature sensor */
273 res = mpu6500_set_ptat(&gs_handle, MPU6500_BOOL_TRUE);
274 if (res != 0)
275 {
276 mpu6500_interface_debug_print("mpu6500: set ptat failed.\n");
277 (void)mpu6500_deinit(&gs_handle);
278
279 return 1;
280 }
281
282 /* disable cycle wake up */
284 if (res != 0)
285 {
286 mpu6500_interface_debug_print("mpu6500: set cycle wake up failed.\n");
287 (void)mpu6500_deinit(&gs_handle);
288
289 return 1;
290 }
291
292 /* enable acc x */
294 if (res != 0)
295 {
296 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
297 (void)mpu6500_deinit(&gs_handle);
298
299 return 1;
300 }
301
302 /* enable acc y */
304 if (res != 0)
305 {
306 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
307 (void)mpu6500_deinit(&gs_handle);
308
309 return 1;
310 }
311
312 /* enable acc z */
314 if (res != 0)
315 {
316 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
317 (void)mpu6500_deinit(&gs_handle);
318
319 return 1;
320 }
321
322 /* enable gyro x */
324 if (res != 0)
325 {
326 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
327 (void)mpu6500_deinit(&gs_handle);
328
329 return 1;
330 }
331
332 /* enable gyro y */
334 if (res != 0)
335 {
336 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
337 (void)mpu6500_deinit(&gs_handle);
338
339 return 1;
340 }
341
342 /* enable gyro z */
344 if (res != 0)
345 {
346 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
347 (void)mpu6500_deinit(&gs_handle);
348
349 return 1;
350 }
351
352 /* disable gyroscope x test */
354 if (res != 0)
355 {
356 mpu6500_interface_debug_print("mpu6500: set gyroscope test failed.\n");
357 (void)mpu6500_deinit(&gs_handle);
358
359 return 1;
360 }
361
362 /* disable gyroscope y test */
364 if (res != 0)
365 {
366 mpu6500_interface_debug_print("mpu6500: set gyroscope test failed.\n");
367 (void)mpu6500_deinit(&gs_handle);
368
369 return 1;
370 }
371
372 /* disable gyroscope z test */
374 if (res != 0)
375 {
376 mpu6500_interface_debug_print("mpu6500: set gyroscope test failed.\n");
377 (void)mpu6500_deinit(&gs_handle);
378
379 return 1;
380 }
381
382 /* disable accelerometer x test */
384 if (res != 0)
385 {
386 mpu6500_interface_debug_print("mpu6500: set accelerometer test failed.\n");
387 (void)mpu6500_deinit(&gs_handle);
388
389 return 1;
390 }
391
392 /* disable accelerometer y test */
394 if (res != 0)
395 {
396 mpu6500_interface_debug_print("mpu6500: set accelerometer test failed.\n");
397 (void)mpu6500_deinit(&gs_handle);
398
399 return 1;
400 }
401
402 /* disable accelerometer z test */
404 if (res != 0)
405 {
406 mpu6500_interface_debug_print("mpu6500: set accelerometer test failed.\n");
407 (void)mpu6500_deinit(&gs_handle);
408
409 return 1;
410 }
411
412 /* disable temp fifo */
414 if (res != 0)
415 {
416 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
417 (void)mpu6500_deinit(&gs_handle);
418
419 return 1;
420 }
421
422 /* disable xg fifo */
424 if (res != 0)
425 {
426 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
427 (void)mpu6500_deinit(&gs_handle);
428
429 return 1;
430 }
431
432 /* disable yg fifo */
434 if (res != 0)
435 {
436 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
437 (void)mpu6500_deinit(&gs_handle);
438
439 return 1;
440 }
441
442 /* disable zg fifo */
444 if (res != 0)
445 {
446 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
447 (void)mpu6500_deinit(&gs_handle);
448
449 return 1;
450 }
451
452 /* disable accel fifo */
454 if (res != 0)
455 {
456 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
457 (void)mpu6500_deinit(&gs_handle);
458
459 return 1;
460 }
461
462 /* enable fifo */
463 res = mpu6500_set_fifo(&gs_handle, MPU6500_BOOL_TRUE);
464 if (res != 0)
465 {
466 mpu6500_interface_debug_print("mpu6500: set fifo failed.\n");
467 (void)mpu6500_deinit(&gs_handle);
468
469 return 1;
470 }
471
472 /* set interrupt level low */
474 if (res != 0)
475 {
476 mpu6500_interface_debug_print("mpu6500: set interrupt level failed.\n");
477 (void)mpu6500_deinit(&gs_handle);
478
479 return 1;
480 }
481
482 /* push-pull */
484 if (res != 0)
485 {
486 mpu6500_interface_debug_print("mpu6500: set interrupt pin type failed.\n");
487 (void)mpu6500_deinit(&gs_handle);
488
489 return 1;
490 }
491
492 /* disable motion */
494 if (res != 0)
495 {
496 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
497 (void)mpu6500_deinit(&gs_handle);
498
499 return 1;
500 }
501
502 /* enable fifo overflow */
504 if (res != 0)
505 {
506 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
507 (void)mpu6500_deinit(&gs_handle);
508
509 return 1;
510 }
511
512 /* disable dmp interrupt */
514 if (res != 0)
515 {
516 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
517 (void)mpu6500_deinit(&gs_handle);
518
519 return 1;
520 }
521
522 /* disable fsync int */
524 if (res != 0)
525 {
526 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
527 (void)mpu6500_deinit(&gs_handle);
528
529 return 1;
530 }
531
532 /* disable data ready */
534 if (res != 0)
535 {
536 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
537 (void)mpu6500_deinit(&gs_handle);
538
539 return 1;
540 }
541
542 /* enable latch */
544 if (res != 0)
545 {
546 mpu6500_interface_debug_print("mpu6500: set interrupt latch failed.\n");
547 (void)mpu6500_deinit(&gs_handle);
548
549 return 1;
550 }
551
552 /* enable interrupt read clear */
554 if (res != 0)
555 {
556 mpu6500_interface_debug_print("mpu6500: set interrupt read clear failed.\n");
557 (void)mpu6500_deinit(&gs_handle);
558
559 return 1;
560 }
561
562 /* disable sync input */
564 if (res != 0)
565 {
566 mpu6500_interface_debug_print("mpu6500: set extern sync failed.\n");
567 (void)mpu6500_deinit(&gs_handle);
568
569 return 1;
570 }
571
572 /* disable fsync interrupt */
574 if (res != 0)
575 {
576 mpu6500_interface_debug_print("mpu6500: set fsync interrupt failed.\n");
577 (void)mpu6500_deinit(&gs_handle);
578
579 return 1;
580 }
581
582 /* fsync interrupt level low */
584 if (res != 0)
585 {
586 mpu6500_interface_debug_print("mpu6500: set fsync interrupt level failed.\n");
587 (void)mpu6500_deinit(&gs_handle);
588
589 return 1;
590 }
591
592 /* disable iic master */
594 if (res != 0)
595 {
596 mpu6500_interface_debug_print("mpu6500: set iic master failed.\n");
597 (void)mpu6500_deinit(&gs_handle);
598
599 return 1;
600 }
601
602 /* disable iic bypass */
604 if (res != 0)
605 {
606 mpu6500_interface_debug_print("mpu6500: set iic bypass failed.\n");
607 (void)mpu6500_deinit(&gs_handle);
608
609 return 1;
610 }
611
612 /* disable gyro standby */
614 if (res != 0)
615 {
616 mpu6500_interface_debug_print("mpu6500: set gyro standby failed.\n");
617 (void)mpu6500_deinit(&gs_handle);
618
619 return 1;
620 }
621
622 /* set the fifo normal mode */
624 if (res != 0)
625 {
626 mpu6500_interface_debug_print("mpu6500: set fifo mode failed.\n");
627 (void)mpu6500_deinit(&gs_handle);
628
629 return 1;
630 }
631
632 /* set gyroscope choice 0 */
633 res = mpu6500_set_gyroscope_choice(&gs_handle, 0);
634 if (res != 0)
635 {
636 mpu6500_interface_debug_print("mpu6500: set gyroscope choice failed.\n");
637 (void)mpu6500_deinit(&gs_handle);
638
639 return 1;
640 }
641
642 /* set low pass filter 3 */
644 if (res != 0)
645 {
646 mpu6500_interface_debug_print("mpu6500: set low pass filter failed.\n");
647 (void)mpu6500_deinit(&gs_handle);
648
649 return 1;
650 }
651
652 /* set accelerometer choice 0 */
653 res = mpu6500_set_accelerometer_choice(&gs_handle, 0);
654 if (res != 0)
655 {
656 mpu6500_interface_debug_print("mpu6500: set accelerometer choice failed.\n");
657 (void)mpu6500_deinit(&gs_handle);
658
659 return 1;
660 }
661
662 /* set accelerometer low pass filter 3 */
664 if (res != 0)
665 {
666 mpu6500_interface_debug_print("mpu6500: set accelerometer low pass filter failed.\n");
667 (void)mpu6500_deinit(&gs_handle);
668
669 return 1;
670 }
671
672 /* set low power accel output rate 62.5Hz */
674 if (res != 0)
675 {
676 mpu6500_interface_debug_print("mpu6500: set low power accel output rate failed.\n");
677 (void)mpu6500_deinit(&gs_handle);
678
679 return 1;
680 }
681
682 /* disable wake on motion */
684 if (res != 0)
685 {
686 mpu6500_interface_debug_print("mpu6500: set wake on motion failed.\n");
687 (void)mpu6500_deinit(&gs_handle);
688
689 return 1;
690 }
691
692 /* enable accel compare with previous sample */
694 if (res != 0)
695 {
696 mpu6500_interface_debug_print("mpu6500: set accel compare with previous sample failed.\n");
697 (void)mpu6500_deinit(&gs_handle);
698
699 return 1;
700 }
701
702 /* load dmp firmware */
703 mpu6500_interface_debug_print("mpu6500: load dmp firmware.\n");
704
705 /* dmp load firmware */
706 res = mpu6500_dmp_load_firmware(&gs_handle);
707 if (res != 0)
708 {
709 mpu6500_interface_debug_print("mpu6500: dmp load firmware failed.\n");
710 (void)mpu6500_deinit(&gs_handle);
711
712 return 1;
713 }
714
715 /* load dmp firmware successful */
716 mpu6500_interface_debug_print("mpu6500: load dmp firmware successful .\n");
717
718 /* mpu6500_dmp_set_pedometer_walk_time/mpu6500_dmp_get_pedometer_walk_time test */
719 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_pedometer_walk_time/mpu6500_dmp_get_pedometer_walk_time test.\n");
720
721 ms = 200;
722 res = mpu6500_dmp_set_pedometer_walk_time(&gs_handle, ms);
723 if (res != 0)
724 {
725 mpu6500_interface_debug_print("mpu6500: dmp set pedometer walk time failed.\n");
726 (void)mpu6500_deinit(&gs_handle);
727
728 return 1;
729 }
730 mpu6500_interface_debug_print("mpu6500: dmp set pedometer walk time %d ms.\n", ms);
731 res = mpu6500_dmp_get_pedometer_walk_time(&gs_handle, &ms_check);
732 if (res != 0)
733 {
734 mpu6500_interface_debug_print("mpu6500: dmp get pedometer walk time failed.\n");
735 (void)mpu6500_deinit(&gs_handle);
736
737 return 1;
738 }
739 mpu6500_interface_debug_print("mpu6500: check pedometer walk time %s.\n", ms_check == ms ? "ok" : "error");
740
741 /* mpu6500_dmp_set_pedometer_step_count/mpu6500_dmp_get_pedometer_step_count test */
742 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_pedometer_step_count/mpu6500_dmp_get_pedometer_step_count test.\n");
743
744 cnt = rand() % 1000;
745 res = mpu6500_dmp_set_pedometer_step_count(&gs_handle, cnt);
746 if (res != 0)
747 {
748 mpu6500_interface_debug_print("mpu6500: dmp set pedometer step count failed.\n");
749 (void)mpu6500_deinit(&gs_handle);
750
751 return 1;
752 }
753 mpu6500_interface_debug_print("mpu6500: dmp set pedometer step count %d.\n", cnt);
754 res = mpu6500_dmp_get_pedometer_step_count(&gs_handle, &cnt_check);
755 if (res != 0)
756 {
757 mpu6500_interface_debug_print("mpu6500: dmp get pedometer step count failed.\n");
758 (void)mpu6500_deinit(&gs_handle);
759
760 return 1;
761 }
762 mpu6500_interface_debug_print("mpu6500: check pedometer step count %s.\n", cnt_check == cnt ? "ok" : "error");
763
764 /* mpu6500_dmp_set_shake_reject_timeout/mpu6500_dmp_get_shake_reject_timeout test */
765 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_shake_reject_timeout/mpu6500_dmp_get_shake_reject_timeout test.\n");
766
767 m = 10;
768 res = mpu6500_dmp_set_shake_reject_timeout(&gs_handle, m);
769 if (res != 0)
770 {
771 mpu6500_interface_debug_print("mpu6500: dmp set shake reject timeout failed.\n");
772 (void)mpu6500_deinit(&gs_handle);
773
774 return 1;
775 }
776 mpu6500_interface_debug_print("mpu6500: dmp set shake reject timeout %d ms.\n", m);
777 res = mpu6500_dmp_get_shake_reject_timeout(&gs_handle, &m_check);
778 if (res != 0)
779 {
780 mpu6500_interface_debug_print("mpu6500: dmp get shake reject timeout failed.\n");
781 (void)mpu6500_deinit(&gs_handle);
782
783 return 1;
784 }
785 mpu6500_interface_debug_print("mpu6500: check shake reject timeout %s.\n", m_check == m ? "ok" : "error");
786
787 /* mpu6500_dmp_set_shake_reject_time/mpu6500_dmp_get_shake_reject_time test */
788 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_shake_reject_time/mpu6500_dmp_get_shake_reject_time test.\n");
789
790 m = 40;
791 res = mpu6500_dmp_set_shake_reject_time(&gs_handle, m);
792 if (res != 0)
793 {
794 mpu6500_interface_debug_print("mpu6500: dmp set shake reject time failed.\n");
795 (void)mpu6500_deinit(&gs_handle);
796
797 return 1;
798 }
799 mpu6500_interface_debug_print("mpu6500: dmp set shake reject time %d ms.\n", m);
800 res = mpu6500_dmp_get_shake_reject_time(&gs_handle, &m_check);
801 if (res != 0)
802 {
803 mpu6500_interface_debug_print("mpu6500: dmp get shake reject time failed.\n");
804 (void)mpu6500_deinit(&gs_handle);
805
806 return 1;
807 }
808 mpu6500_interface_debug_print("mpu6500: check shake reject time %s.\n", m_check == m ? "ok" : "error");
809
810 /* mpu6500_dmp_set_shake_reject_thresh/mpu6500_dmp_get_shake_reject_thresh test */
811 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_shake_reject_thresh/mpu6500_dmp_get_shake_reject_thresh test.\n");
812
813 m = 0;
814 res = mpu6500_dmp_set_shake_reject_thresh(&gs_handle, m);
815 if (res != 0)
816 {
817 mpu6500_interface_debug_print("mpu6500: dmp set shake reject thresh failed.\n");
818 (void)mpu6500_deinit(&gs_handle);
819
820 return 1;
821 }
822 mpu6500_interface_debug_print("mpu6500: set shake reject thresh %d dps.\n", m);
823 res = mpu6500_dmp_get_shake_reject_thresh(&gs_handle, &m_check);
824 if (res != 0)
825 {
826 mpu6500_interface_debug_print("mpu6500: dmp get shake reject thresh failed.\n");
827 (void)mpu6500_deinit(&gs_handle);
828
829 return 1;
830 }
831 mpu6500_interface_debug_print("mpu6500: check shake reject thresh %s.\n", m_check == m ? "ok" : "error");
832
833 /* mpu6500_dmp_set_tap_time_multi/mpu6500_dmp_get_tap_time_multi test */
834 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_tap_time_multi/mpu6500_dmp_get_tap_time_multi test.\n");
835
836 m = 500;
837 res = mpu6500_dmp_set_tap_time_multi(&gs_handle, m);
838 if (res != 0)
839 {
840 mpu6500_interface_debug_print("mpu6500: dmp set tap time multi failed.\n");
841 (void)mpu6500_deinit(&gs_handle);
842
843 return 1;
844 }
845 mpu6500_interface_debug_print("mpu6500: dmp set tap time multi %d ms.\n", m);
846 res = mpu6500_dmp_get_tap_time_multi(&gs_handle, &m_check);
847 if (res != 0)
848 {
849 mpu6500_interface_debug_print("mpu6500: dmp get tap time multi failed.\n");
850 (void)mpu6500_deinit(&gs_handle);
851
852 return 1;
853 }
854 mpu6500_interface_debug_print("mpu6500: check tap time multi %s.\n", m_check == m ? "ok" : "error");
855
856 /* mpu6500_dmp_set_tap_time/mpu6500_dmp_get_tap_time test */
857 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_tap_time/mpu6500_dmp_get_tap_time test.\n");
858
859 m = 100;
860 res = mpu6500_dmp_set_tap_time(&gs_handle, m);
861 if (res != 0)
862 {
863 mpu6500_interface_debug_print("mpu6500: dmp set tap time failed.\n");
864 (void)mpu6500_deinit(&gs_handle);
865
866 return 1;
867 }
868 mpu6500_interface_debug_print("mpu6500: dmp set tap time %d ms.\n", m);
869 res = mpu6500_dmp_get_tap_time(&gs_handle, &m_check);
870 if (res != 0)
871 {
872 mpu6500_interface_debug_print("mpu6500: dmp get tap time failed.\n");
873 (void)mpu6500_deinit(&gs_handle);
874
875 return 1;
876 }
877 mpu6500_interface_debug_print("mpu6500: check tap time %s.\n", m_check == m ? "ok" : "error");
878
879 /* mpu6500_dmp_set_min_tap_count/mpu6500_dmp_get_min_tap_count test */
880 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_min_tap_count/mpu6500_dmp_get_min_tap_count test.\n");
881
882 c = 1;
883 res = mpu6500_dmp_set_min_tap_count(&gs_handle, c);
884 if (res != 0)
885 {
886 mpu6500_interface_debug_print("mpu6500: dmp set min tap count failed.\n");
887 (void)mpu6500_deinit(&gs_handle);
888
889 return 1;
890 }
891 mpu6500_interface_debug_print("mpu6500: dmp set min tap count %d.\n", c);
892 res = mpu6500_dmp_get_min_tap_count(&gs_handle, &c_check);
893 if (res != 0)
894 {
895 mpu6500_interface_debug_print("mpu6500: dmp get min tap count failed.\n");
896 (void)mpu6500_deinit(&gs_handle);
897
898 return 1;
899 }
900 mpu6500_interface_debug_print("mpu6500: check min tap count %s.\n", c_check == c ? "ok" : "error");
901
902 /* mpu6500_dmp_set_tap_axes/mpu6500_dmp_get_tap_axes test */
903 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_tap_axes/mpu6500_dmp_get_tap_axes test.\n");
904
905 /* disable axis x */
907 if (res != 0)
908 {
909 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
910 (void)mpu6500_deinit(&gs_handle);
911
912 return 1;
913 }
914 mpu6500_interface_debug_print("mpu6500: disable tap axes x.\n");
915 res = mpu6500_dmp_get_tap_axes(&gs_handle, MPU6500_AXIS_X, &enable);
916 if (res != 0)
917 {
918 mpu6500_interface_debug_print("mpu6500: dmp get tap axes failed.\n");
919 (void)mpu6500_deinit(&gs_handle);
920
921 return 1;
922 }
923 mpu6500_interface_debug_print("mpu6500: check tap axes %s.\n", enable == MPU6500_BOOL_FALSE ? "ok" : "error");
924
925 /* enable axis x */
927 if (res != 0)
928 {
929 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
930 (void)mpu6500_deinit(&gs_handle);
931
932 return 1;
933 }
934 mpu6500_interface_debug_print("mpu6500: enable tap axes x.\n");
935 res = mpu6500_dmp_get_tap_axes(&gs_handle, MPU6500_AXIS_X, &enable);
936 if (res != 0)
937 {
938 mpu6500_interface_debug_print("mpu6500: dmp get tap axes failed.\n");
939 (void)mpu6500_deinit(&gs_handle);
940
941 return 1;
942 }
943 mpu6500_interface_debug_print("mpu6500: check tap axes %s.\n", enable == MPU6500_BOOL_TRUE ? "ok" : "error");
944
945 /* disable axis y */
947 if (res != 0)
948 {
949 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
950 (void)mpu6500_deinit(&gs_handle);
951
952 return 1;
953 }
954 mpu6500_interface_debug_print("mpu6500: disable tap axes y.\n");
955 res = mpu6500_dmp_get_tap_axes(&gs_handle, MPU6500_AXIS_Y, &enable);
956 if (res != 0)
957 {
958 mpu6500_interface_debug_print("mpu6500: dmp get tap axes failed.\n");
959 (void)mpu6500_deinit(&gs_handle);
960
961 return 1;
962 }
963 mpu6500_interface_debug_print("mpu6500: check tap axes %s.\n", enable == MPU6500_BOOL_FALSE ? "ok" : "error");
964
965 /* enable axis y */
967 if (res != 0)
968 {
969 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
970 (void)mpu6500_deinit(&gs_handle);
971
972 return 1;
973 }
974 mpu6500_interface_debug_print("mpu6500: enable tap axes y.\n");
975 res = mpu6500_dmp_get_tap_axes(&gs_handle, MPU6500_AXIS_Y, &enable);
976 if (res != 0)
977 {
978 mpu6500_interface_debug_print("mpu6500: dmp get tap axes failed.\n");
979 (void)mpu6500_deinit(&gs_handle);
980
981 return 1;
982 }
983 mpu6500_interface_debug_print("mpu6500: check tap axes %s.\n", enable == MPU6500_BOOL_TRUE ? "ok" : "error");
984
985 /* disable axis z */
987 if (res != 0)
988 {
989 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
990 (void)mpu6500_deinit(&gs_handle);
991
992 return 1;
993 }
994 mpu6500_interface_debug_print("mpu6500: disable tap axes z.\n");
995 res = mpu6500_dmp_get_tap_axes(&gs_handle, MPU6500_AXIS_Z, &enable);
996 if (res != 0)
997 {
998 mpu6500_interface_debug_print("mpu6500: dmp get tap axes failed.\n");
999 (void)mpu6500_deinit(&gs_handle);
1000
1001 return 1;
1002 }
1003 mpu6500_interface_debug_print("mpu6500: check tap axes %s.\n", enable == MPU6500_BOOL_FALSE ? "ok" : "error");
1004
1005 /* enable axis z */
1007 if (res != 0)
1008 {
1009 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
1010 (void)mpu6500_deinit(&gs_handle);
1011
1012 return 1;
1013 }
1014 mpu6500_interface_debug_print("mpu6500: enable tap axes z.\n");
1015 res = mpu6500_dmp_get_tap_axes(&gs_handle, MPU6500_AXIS_Z, &enable);
1016 if (res != 0)
1017 {
1018 mpu6500_interface_debug_print("mpu6500: dmp get tap axes failed.\n");
1019 (void)mpu6500_deinit(&gs_handle);
1020
1021 return 1;
1022 }
1023 mpu6500_interface_debug_print("mpu6500: check tap axes %s.\n", enable == MPU6500_BOOL_TRUE ? "ok" : "error");
1024
1025 /* mpu6500_dmp_set_tap_thresh/mpu6500_dmp_get_tap_thresh test */
1026 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_tap_thresh/mpu6500_dmp_get_tap_thresh test.\n");
1027
1028 /* set tap thresh x */
1029 m = 250;
1030 res = mpu6500_dmp_set_tap_thresh(&gs_handle, MPU6500_AXIS_X, m);
1031 if (res != 0)
1032 {
1033 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh failed.\n");
1034 (void)mpu6500_deinit(&gs_handle);
1035
1036 return 1;
1037 }
1038 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh x %d mg/ms.\n", m);
1039 res = mpu6500_dmp_get_tap_thresh(&gs_handle, MPU6500_AXIS_X, &m_check);
1040 if (res != 0)
1041 {
1042 mpu6500_interface_debug_print("mpu6500: dmp get tap thresh failed.\n");
1043 (void)mpu6500_deinit(&gs_handle);
1044
1045 return 1;
1046 }
1047 mpu6500_interface_debug_print("mpu6500: check tap thresh %s.\n", m_check == m ? "ok" : "error");
1048
1049 /* set tap thresh y */
1050 m = 250;
1051 res = mpu6500_dmp_set_tap_thresh(&gs_handle, MPU6500_AXIS_Y, m);
1052 if (res != 0)
1053 {
1054 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh failed.\n");
1055 (void)mpu6500_deinit(&gs_handle);
1056
1057 return 1;
1058 }
1059 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh y %d mg/ms.\n", m);
1060 res = mpu6500_dmp_get_tap_thresh(&gs_handle, MPU6500_AXIS_Y, &m_check);
1061 if (res != 0)
1062 {
1063 mpu6500_interface_debug_print("mpu6500: dmp get tap thresh failed.\n");
1064 (void)mpu6500_deinit(&gs_handle);
1065
1066 return 1;
1067 }
1068 mpu6500_interface_debug_print("mpu6500: check tap thresh %s.\n", m_check == m ? "ok" : "error");
1069
1070 /* set tap thresh z */
1071 m = 250;
1072 res = mpu6500_dmp_set_tap_thresh(&gs_handle, MPU6500_AXIS_Z, m);
1073 if (res != 0)
1074 {
1075 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh failed.\n");
1076 (void)mpu6500_deinit(&gs_handle);
1077
1078 return 1;
1079 }
1080 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh z %d mg/ms.\n", m);
1081 res = mpu6500_dmp_get_tap_thresh(&gs_handle, MPU6500_AXIS_Z, &m_check);
1082 if (res != 0)
1083 {
1084 mpu6500_interface_debug_print("mpu6500: dmp get tap thresh failed.\n");
1085 (void)mpu6500_deinit(&gs_handle);
1086
1087 return 1;
1088 }
1089 mpu6500_interface_debug_print("mpu6500: check tap thresh %s.\n", m_check == m ? "ok" : "error");
1090
1091 /* mpu6500_dmp_set_fifo_rate/mpu6500_dmp_get_fifo_rate test */
1092 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_fifo_rate/mpu6500_dmp_get_fifo_rate test.\n");
1093
1094 m = 200;
1095 res = mpu6500_dmp_set_fifo_rate(&gs_handle, m);
1096 if (res != 0)
1097 {
1098 mpu6500_interface_debug_print("mpu6500: dmp set fifo rate failed.\n");
1099 (void)mpu6500_deinit(&gs_handle);
1100
1101 return 1;
1102 }
1103 mpu6500_interface_debug_print("mpu6500: dmp set fifo rate %dHz.\n", m);
1104 res = mpu6500_dmp_get_fifo_rate(&gs_handle, &m_check);
1105 if (res != 0)
1106 {
1107 mpu6500_interface_debug_print("mpu6500: dmp get fifo rate failed.\n");
1108 (void)mpu6500_deinit(&gs_handle);
1109
1110 return 1;
1111 }
1112 mpu6500_interface_debug_print("mpu6500: check fifo rate %s.\n", m_check == m ? "ok" : "error");
1113
1114 /* mpu6500_dmp_set_gyro_calibrate test */
1115 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_gyro_calibrate test.\n");
1116
1117 /* enable gyro calibrate */
1119 if (res != 0)
1120 {
1121 mpu6500_interface_debug_print("mpu6500: dmp set gyro calibrate failed.\n");
1122 (void)mpu6500_deinit(&gs_handle);
1123
1124 return 1;
1125 }
1126 mpu6500_interface_debug_print("mpu6500: enable gyro calibrate.\n");
1127
1128 /* disable gyro calibrate */
1130 if (res != 0)
1131 {
1132 mpu6500_interface_debug_print("mpu6500: dmp set gyro calibrate failed.\n");
1133 (void)mpu6500_deinit(&gs_handle);
1134
1135 return 1;
1136 }
1137 mpu6500_interface_debug_print("mpu6500: disable gyro calibrate.\n");
1138
1139 /* mpu6500_dmp_set_3x_quaternion test */
1140 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_3x_quaternion test.\n");
1141
1142 /* enable 3x quaternion */
1144 if (res != 0)
1145 {
1146 mpu6500_interface_debug_print("mpu6500: dmp set 3x quaternion failed.\n");
1147 (void)mpu6500_deinit(&gs_handle);
1148
1149 return 1;
1150 }
1151 mpu6500_interface_debug_print("mpu6500: enable 3x quaternion.\n");
1152
1153 /* disable 3x quaternion */
1155 if (res != 0)
1156 {
1157 mpu6500_interface_debug_print("mpu6500: dmp set 3x quaternion failed.\n");
1158 (void)mpu6500_deinit(&gs_handle);
1159
1160 return 1;
1161 }
1162 mpu6500_interface_debug_print("mpu6500: disable 3x quaternion.\n");
1163
1164 /* mpu6500_dmp_set_6x_quaternion test */
1165 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_6x_quaternion test.\n");
1166
1167 /* enable 6x quaternion */
1169 if (res != 0)
1170 {
1171 mpu6500_interface_debug_print("mpu6500: dmp set 6x quaternion failed.\n");
1172 (void)mpu6500_deinit(&gs_handle);
1173
1174 return 1;
1175 }
1176 mpu6500_interface_debug_print("mpu6500: enable 6x quaternion.\n");
1177
1178 /* disable 6x quaternion */
1180 if (res != 0)
1181 {
1182 mpu6500_interface_debug_print("mpu6500: dmp set 6x quaternion failed.\n");
1183 (void)mpu6500_deinit(&gs_handle);
1184
1185 return 1;
1186 }
1187 mpu6500_interface_debug_print("mpu6500: disable 6x quaternion.\n");
1188
1189 /* mpu6500_dmp_set_interrupt_mode test */
1190 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_interrupt_mode test.\n");
1191
1192 /* gesture mode */
1194 if (res != 0)
1195 {
1196 mpu6500_interface_debug_print("mpu6500: dmp set interrupt mode failed.\n");
1197 (void)mpu6500_deinit(&gs_handle);
1198
1199 return 1;
1200 }
1201 mpu6500_interface_debug_print("mpu6500: dmp set gesture interrupt mode.\n");
1202
1203 /* continuous mode */
1205 if (res != 0)
1206 {
1207 mpu6500_interface_debug_print("mpu6500: dmp set interrupt mode failed.\n");
1208 (void)mpu6500_deinit(&gs_handle);
1209
1210 return 1;
1211 }
1212 mpu6500_interface_debug_print("mpu6500: dmp set gesture continuous mode.\n");
1213
1214 /* mpu6500_dmp_set_orientation test */
1215 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_orientation test.\n");
1216
1217 /* set the dmp orientation */
1218 res = mpu6500_dmp_set_orientation(&gs_handle, gyro_orientation);
1219 if (res != 0)
1220 {
1221 mpu6500_interface_debug_print("mpu6500: dmp set orientation failed.\n");
1222 (void)mpu6500_deinit(&gs_handle);
1223
1224 return 1;
1225 }
1226 mpu6500_interface_debug_print("mpu6500: set the dmp orientation.\n");
1227
1228 /* mpu6500_dmp_set_feature test */
1229 mpu6500_interface_debug_print("mpu6500: mpu6500_dmp_set_feature test.\n");
1230
1231 /* enable feature */
1235 if (res != 0)
1236 {
1237 mpu6500_interface_debug_print("mpu6500: dmp set feature failed.\n");
1238 (void)mpu6500_deinit(&gs_handle);
1239
1240 return 1;
1241 }
1242 mpu6500_interface_debug_print("mpu6500: enable feature 6x quat.\n");
1243 mpu6500_interface_debug_print("mpu6500: enable feature tap.\n");
1244 mpu6500_interface_debug_print("mpu6500: enable feature pedometer.\n");
1245 mpu6500_interface_debug_print("mpu6500: enable feature orient.\n");
1246 mpu6500_interface_debug_print("mpu6500: enable feature send raw accel.\n");
1247 mpu6500_interface_debug_print("mpu6500: enable feature send cal gyro.\n");
1248 mpu6500_interface_debug_print("mpu6500: enable feature gyro cal.\n");
1249
1250 /* dmp set tap callback */
1252 if (res != 0)
1253 {
1254 mpu6500_interface_debug_print("mpu6500: dmp set tap callback failed.\n");
1255 (void)mpu6500_deinit(&gs_handle);
1256
1257 return 1;
1258 }
1259
1260 /* dmp set orient callback */
1262 if (res != 0)
1263 {
1264 mpu6500_interface_debug_print("mpu6500: dmp set orient callback failed.\n");
1265 (void)mpu6500_deinit(&gs_handle);
1266
1267 return 1;
1268 }
1269
1270 /* dmp gyro accel raw offset convert */
1271 res = mpu6500_dmp_gyro_accel_raw_offset_convert(&gs_handle, gyro_offset_raw, accel_offset_raw,
1272 gyro_offset, accel_offset);
1273 if (res != 0)
1274 {
1275 mpu6500_interface_debug_print("mpu6500: dmp gyro accel raw offset convert failed.\n");
1276 (void)mpu6500_deinit(&gs_handle);
1277
1278 return 1;
1279 }
1280
1281 /* dmp set accel bias */
1282 res = mpu6500_dmp_set_accel_bias(&gs_handle, accel_offset);
1283 if (res != 0)
1284 {
1285 mpu6500_interface_debug_print("mpu6500: dmp set accel bias failed.\n");
1286 (void)mpu6500_deinit(&gs_handle);
1287
1288 return 1;
1289 }
1290
1291 /* dmp set gyro bias */
1292 res = mpu6500_dmp_set_gyro_bias(&gs_handle, gyro_offset);
1293 if (res != 0)
1294 {
1295 mpu6500_interface_debug_print("mpu6500: dmp set gyro bias failed.\n");
1296 (void)mpu6500_deinit(&gs_handle);
1297
1298 return 1;
1299 }
1300
1301 /* enable the dmp */
1302 res = mpu6500_dmp_set_enable(&gs_handle, MPU6500_BOOL_TRUE);
1303 if (res != 0)
1304 {
1305 mpu6500_interface_debug_print("mpu6500: dmp set enable failed.\n");
1306 (void)mpu6500_deinit(&gs_handle);
1307
1308 return 1;
1309 }
1310
1311 /* force reset the fifo */
1312 res = mpu6500_force_fifo_reset(&gs_handle);
1313 if (res != 0)
1314 {
1315 mpu6500_interface_debug_print("mpu6500: force fifo reset failed.\n");
1316 (void)mpu6500_deinit(&gs_handle);
1317
1318 return 1;
1319 }
1320
1321 /* delay 50 ms */
1323
1324 for (i = 0; i < times; i++)
1325 {
1326 uint16_t l;
1327
1328 /* read the data */
1329 l = 128;
1330 res = mpu6500_dmp_read(&gs_handle,
1331 gs_accel_raw, gs_accel_g,
1332 gs_gyro_raw, gs_gyro_dps,
1333 gs_quat,
1334 gs_pitch, gs_roll, gs_yaw,
1335 &l
1336 );
1337 if (res == 0)
1338 {
1339 /* output data */
1340 mpu6500_interface_debug_print("mpu6500: fifo %d.\n", l);
1341 mpu6500_interface_debug_print("mpu6500: pitch[0] is %0.2fdeg.\n", gs_pitch[0]);
1342 mpu6500_interface_debug_print("mpu6500: roll[0] is %0.2fdeg.\n", gs_roll[0]);
1343 mpu6500_interface_debug_print("mpu6500: yaw[0] is %0.2fdeg.\n", gs_yaw[0]);
1344 mpu6500_interface_debug_print("mpu6500: acc x[0] is %0.2fg.\n", gs_accel_g[0][0]);
1345 mpu6500_interface_debug_print("mpu6500: acc y[0] is %0.2fg.\n", gs_accel_g[0][1]);
1346 mpu6500_interface_debug_print("mpu6500: acc z[0] is %0.2fg.\n", gs_accel_g[0][2]);
1347 mpu6500_interface_debug_print("mpu6500: gyro x[0] is %0.2fdps.\n", gs_gyro_dps[0][0]);
1348 mpu6500_interface_debug_print("mpu6500: gyro y[0] is %0.2fdps.\n", gs_gyro_dps[0][1]);
1349 mpu6500_interface_debug_print("mpu6500: gyro z[0] is %0.2fdps.\n", gs_gyro_dps[0][2]);
1350 }
1351
1352 /* delay 50 ms */
1354 }
1355
1356 /* finish dmp read test */
1357 mpu6500_interface_debug_print("mpu6500: finish dmp read test.\n");
1358 (void)mpu6500_deinit(&gs_handle);
1359
1360 return 0;
1361}
driver mpu6500 dmp read test header file
uint8_t mpu6500_set_ptat(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the temperature sensor
uint8_t mpu6500_set_accelerometer_choice(mpu6500_handle_t *handle, uint8_t choice)
set the accelerometer choice
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_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_addr_pin(mpu6500_handle_t *handle, mpu6500_address_t addr_pin)
set the chip address pin
uint8_t mpu6500_set_iic_bypass(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic bypass
uint8_t mpu6500_force_fifo_reset(mpu6500_handle_t *handle)
force reset the fifo
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_set_fifo(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable fifo
uint8_t mpu6500_set_interrupt_level(mpu6500_handle_t *handle, mpu6500_pin_level_t level)
set the interrupt level
uint8_t mpu6500_set_fsync_interrupt_level(mpu6500_handle_t *handle, mpu6500_pin_level_t level)
set the fsync interrupt level
struct mpu6500_handle_s mpu6500_handle_t
mpu6500 handle structure definition
uint8_t mpu6500_set_gyroscope_choice(mpu6500_handle_t *handle, uint8_t choice)
set the gyroscope choice
uint8_t mpu6500_set_fsync_interrupt(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the fsync interrupt
uint8_t mpu6500_set_sleep(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the sleep mode
uint8_t mpu6500_set_interrupt_latch(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the interrupt latch
uint8_t mpu6500_set_gyroscope_range(mpu6500_handle_t *handle, mpu6500_gyroscope_range_t range)
set the gyroscope range
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_set_wake_on_motion(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable wake on motion
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_set_interrupt(mpu6500_handle_t *handle, mpu6500_interrupt_t type, mpu6500_bool_t enable)
enable or disable the interrupt
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_deinit(mpu6500_handle_t *handle)
close the chip
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_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_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_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_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
mpu6500_interface_t
mpu6500 interface enumeration definition
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_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_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_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_ACCELEROMETER_LOW_PASS_FILTER_3
@ MPU6500_BOOL_FALSE
@ MPU6500_BOOL_TRUE
@ MPU6500_PIN_LEVEL_LOW
@ MPU6500_INTERRUPT_DATA_READY
@ MPU6500_INTERRUPT_FIFO_OVERFLOW
@ MPU6500_INTERRUPT_MOTION
@ MPU6500_INTERRUPT_FSYNC_INT
@ MPU6500_INTERRUPT_DMP
@ MPU6500_CLOCK_SOURCE_PLL
@ MPU6500_GYROSCOPE_RANGE_2000DPS
@ MPU6500_SOURCE_ACC_Y
@ MPU6500_SOURCE_GYRO_X
@ MPU6500_SOURCE_GYRO_Y
@ MPU6500_SOURCE_ACC_X
@ MPU6500_SOURCE_ACC_Z
@ MPU6500_SOURCE_GYRO_Z
@ MPU6500_AXIS_Y
@ MPU6500_AXIS_Z
@ MPU6500_AXIS_X
@ MPU6500_FIFO_MODE_NORMAL
@ MPU6500_EXTERN_SYNC_INPUT_DISABLED
@ MPU6500_LOW_POWER_ACCEL_OUTPUT_RATE_62P50
@ MPU6500_FIFO_TEMP
@ MPU6500_FIFO_YG
@ MPU6500_FIFO_ZG
@ MPU6500_FIFO_ACCEL
@ MPU6500_FIFO_XG
@ MPU6500_ACCELEROMETER_RANGE_2G
@ MPU6500_PIN_TYPE_PUSH_PULL
@ MPU6500_INTERFACE_SPI
@ MPU6500_LOW_PASS_FILTER_3
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
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_INTERRUPT_MODE_GESTURE
@ MPU6500_DMP_INTERRUPT_MODE_CONTINUOUS
void mpu6500_interface_dmp_tap_callback(uint8_t count, uint8_t direction)
interface dmp tap callback
uint8_t mpu6500_interface_spi_deinit(void)
interface spi bus deinit
void mpu6500_interface_delay_ms(uint32_t ms)
interface delay ms
void mpu6500_interface_dmp_orient_callback(uint8_t orientation)
interface dmp orient callback
void mpu6500_interface_receive_callback(uint8_t type)
interface receive callback
uint8_t mpu6500_interface_iic_init(void)
interface iic bus init
uint8_t mpu6500_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t mpu6500_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mpu6500_interface_spi_init(void)
interface spi bus init
uint8_t mpu6500_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
void mpu6500_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mpu6500_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t mpu6500_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t mpu6500_dmp_read_test(mpu6500_interface_t interface, mpu6500_address_t addr, uint32_t times)
dmp read test
uint8_t mpu6500_dmp_read_test_irq_handler(void)
dmp read test irq
uint32_t driver_version
char manufacturer_name[32]