LibDriver MPU9250
Loading...
Searching...
No Matches
driver_mpu9250_dmp_tap_orient_motion_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static mpu9250_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];
49static volatile uint8_t gs_flag;
50
59{
60 if (mpu9250_irq_handler(&gs_handle) != 0)
61 {
62 return 1;
63 }
64 else
65 {
66 return 0;
67 }
68}
69
75static void a_receive_callback(uint8_t type)
76{
77 switch (type)
78 {
80 {
81 gs_flag |= 1 << 0;
82 mpu9250_interface_debug_print("mpu9250: irq motion.\n");
83
84 break;
85 }
87 {
88 mpu9250_interface_debug_print("mpu9250: irq fifo overflow.\n");
89
90 break;
91 }
93 {
94 mpu9250_interface_debug_print("mpu9250: irq fsync int.\n");
95
96 break;
97 }
99 {
100 break;
101 }
103 {
104 break;
105 }
106 default :
107 {
108 mpu9250_interface_debug_print("mpu9250: irq unknown code.\n");
109
110 break;
111 }
112 }
113}
114
121static void a_dmp_tap_callback(uint8_t count, uint8_t direction)
122{
123 switch (direction)
124 {
126 {
127 gs_flag |= 1 << 1;
128 mpu9250_interface_debug_print("mpu9250: tap irq x up with %d.\n", count);
129
130 break;
131 }
133 {
134 gs_flag |= 1 << 1;
135 mpu9250_interface_debug_print("mpu9250: tap irq x down with %d.\n", count);
136
137 break;
138 }
140 {
141 gs_flag |= 1 << 1;
142 mpu9250_interface_debug_print("mpu9250: tap irq y up with %d.\n", count);
143
144 break;
145 }
147 {
148 gs_flag |= 1 << 1;
149 mpu9250_interface_debug_print("mpu9250: tap irq y down with %d.\n", count);
150
151 break;
152 }
154 {
155 gs_flag |= 1 << 1;
156 mpu9250_interface_debug_print("mpu9250: tap irq z up with %d.\n", count);
157
158 break;
159 }
161 {
162 gs_flag |= 1 << 1;
163 mpu9250_interface_debug_print("mpu9250: tap irq z down with %d.\n", count);
164
165 break;
166 }
167 default :
168 {
169 mpu9250_interface_debug_print("mpu9250: tap irq unknown code.\n");
170
171 break;
172 }
173 }
174}
175
181static void a_dmp_orient_callback(uint8_t orientation)
182{
183 switch (orientation)
184 {
186 {
187 gs_flag |= 1 << 2;
188 mpu9250_interface_debug_print("mpu9250: orient irq portrait.\n");
189
190 break;
191 }
193 {
194 gs_flag |= 1 << 2;
195 mpu9250_interface_debug_print("mpu9250: orient irq landscape.\n");
196
197 break;
198 }
200 {
201 gs_flag |= 1 << 2;
202 mpu9250_interface_debug_print("mpu9250: orient irq reverse portrait.\n");
203
204 break;
205 }
207 {
208 gs_flag |= 1 << 2;
209 mpu9250_interface_debug_print("mpu9250: orient irq reverse landscape.\n");
210
211 break;
212 }
213 default :
214 {
215 mpu9250_interface_debug_print("mpu9250: orient irq unknown code.\n");
216
217 break;
218 }
219 }
220}
221
232{
233 uint8_t res;
234 uint8_t reg;
235 uint32_t ms;
236 uint32_t ms_check;
237 uint32_t cnt;
238 uint32_t cnt_check;
239 uint32_t i;
240 uint16_t m;
241 uint16_t m_check;
242 uint8_t c;
243 uint8_t c_check;
244 int32_t gyro_offset_raw[3];
245 int32_t accel_offset_raw[3];
246 int32_t gyro_offset[3];
247 int32_t accel_offset[3];
248 mpu9250_bool_t enable;
249 mpu9250_info_t info;
250 int8_t gyro_orientation[9] = {1, 0, 0,
251 0, 1, 0,
252 0, 0, 1};
253
254 /* link interface function */
266 DRIVER_MPU9250_LINK_RECEIVE_CALLBACK(&gs_handle, a_receive_callback);
267
268 /* get information */
269 res = mpu9250_info(&info);
270 if (res != 0)
271 {
272 mpu9250_interface_debug_print("mpu9250: get info failed.\n");
273
274 return 1;
275 }
276 else
277 {
278 /* print chip info */
279 mpu9250_interface_debug_print("mpu9250: chip is %s.\n", info.chip_name);
280 mpu9250_interface_debug_print("mpu9250: manufacturer is %s.\n", info.manufacturer_name);
281 mpu9250_interface_debug_print("mpu9250: interface is %s.\n", info.interface);
282 mpu9250_interface_debug_print("mpu9250: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
283 mpu9250_interface_debug_print("mpu9250: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
284 mpu9250_interface_debug_print("mpu9250: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
285 mpu9250_interface_debug_print("mpu9250: max current is %0.2fmA.\n", info.max_current_ma);
286 mpu9250_interface_debug_print("mpu9250: max temperature is %0.1fC.\n", info.temperature_max);
287 mpu9250_interface_debug_print("mpu9250: min temperature is %0.1fC.\n", info.temperature_min);
288 }
289
290 /* start dmp tap orient motion test */
291 mpu9250_interface_debug_print("mpu9250: start dmp tap orient motion test.\n");
292
293 /* set the interface */
294 res = mpu9250_set_interface(&gs_handle, interface);
295 if (res != 0)
296 {
297 mpu9250_interface_debug_print("mpu9250: set interface failed.\n");
298
299 return 1;
300 }
301
302 /* set the addr pin */
303 res = mpu9250_set_addr_pin(&gs_handle, addr);
304 if (res != 0)
305 {
306 mpu9250_interface_debug_print("mpu9250: set addr pin failed.\n");
307
308 return 1;
309 }
310
311 /* init */
312 res = mpu9250_init(&gs_handle);
313 if (res != 0)
314 {
315 mpu9250_interface_debug_print("mpu9250: init failed.\n");
316
317 return 1;
318 }
319
320 /* delay 100 ms */
322
323 /* disable sleep */
324 res = mpu9250_set_sleep(&gs_handle, MPU9250_BOOL_FALSE);
325 if (res != 0)
326 {
327 mpu9250_interface_debug_print("mpu9250: set sleep failed.\n");
328 (void)mpu9250_deinit(&gs_handle);
329
330 return 1;
331 }
332
333 /* if spi interface, disable iic interface */
334 if (interface == MPU9250_INTERFACE_SPI)
335 {
336 /* disable iic */
338 if (res != 0)
339 {
340 mpu9250_interface_debug_print("mpu9250: set disable iic slave failed.\n");
341 (void)mpu9250_deinit(&gs_handle);
342
343 return 1;
344 }
345 }
346
347 /* set fifo 1024kb */
348 res = mpu9250_set_fifo_1024kb(&gs_handle);
349 if (res != 0)
350 {
351 mpu9250_interface_debug_print("mpu9250: set fifo 1024kb failed.\n");
352 (void)mpu9250_deinit(&gs_handle);
353
354 return 1;
355 }
356
357 /* run the self test */
358 res = mpu9250_self_test(&gs_handle, gyro_offset_raw, accel_offset_raw);
359 if (res != 0)
360 {
361 mpu9250_interface_debug_print("mpu9250: self test failed.\n");
362 (void)mpu9250_deinit(&gs_handle);
363
364 return 1;
365 }
366
367 /* set pll */
369 if (res != 0)
370 {
371 mpu9250_interface_debug_print("mpu9250: set clock source failed.\n");
372 (void)mpu9250_deinit(&gs_handle);
373
374 return 1;
375 }
376
377 /* set 50Hz */
378 res = mpu9250_set_sample_rate_divider(&gs_handle, (1000 / 50) - 1);
379 if (res != 0)
380 {
381 mpu9250_interface_debug_print("mpu9250: set sample rate divider failed.\n");
382 (void)mpu9250_deinit(&gs_handle);
383
384 return 1;
385 }
386
387 /* ±2g */
389 if (res != 0)
390 {
391 mpu9250_interface_debug_print("mpu9250: set accelerometer range failed.\n");
392 (void)mpu9250_deinit(&gs_handle);
393
394 return 1;
395 }
396
397 /* ±2000dps */
399 if (res != 0)
400 {
401 mpu9250_interface_debug_print("mpu9250: set gyroscope range failed.\n");
402 (void)mpu9250_deinit(&gs_handle);
403
404 return 1;
405 }
406
407 /* set low pass filter 3 */
409 if (res != 0)
410 {
411 mpu9250_interface_debug_print("mpu9250: set low pass filter failed.\n");
412 (void)mpu9250_deinit(&gs_handle);
413
414 return 1;
415 }
416
417 /* enable temperature sensor */
418 res = mpu9250_set_ptat(&gs_handle, MPU9250_BOOL_TRUE);
419 if (res != 0)
420 {
421 mpu9250_interface_debug_print("mpu9250: set ptat failed.\n");
422 (void)mpu9250_deinit(&gs_handle);
423
424 return 1;
425 }
426
427 /* disable cycle wake up */
429 if (res != 0)
430 {
431 mpu9250_interface_debug_print("mpu9250: set cycle wake up failed.\n");
432 (void)mpu9250_deinit(&gs_handle);
433
434 return 1;
435 }
436
437 /* enable acc x */
439 if (res != 0)
440 {
441 mpu9250_interface_debug_print("mpu9250: set standby mode failed.\n");
442 (void)mpu9250_deinit(&gs_handle);
443
444 return 1;
445 }
446
447 /* enable acc y */
449 if (res != 0)
450 {
451 mpu9250_interface_debug_print("mpu9250: set standby mode failed.\n");
452 (void)mpu9250_deinit(&gs_handle);
453
454 return 1;
455 }
456
457 /* enable acc z */
459 if (res != 0)
460 {
461 mpu9250_interface_debug_print("mpu9250: set standby mode failed.\n");
462 (void)mpu9250_deinit(&gs_handle);
463
464 return 1;
465 }
466
467 /* enable gyro x */
469 if (res != 0)
470 {
471 mpu9250_interface_debug_print("mpu9250: set standby mode failed.\n");
472 (void)mpu9250_deinit(&gs_handle);
473
474 return 1;
475 }
476
477 /* enable gyro y */
479 if (res != 0)
480 {
481 mpu9250_interface_debug_print("mpu9250: set standby mode failed.\n");
482 (void)mpu9250_deinit(&gs_handle);
483
484 return 1;
485 }
486
487 /* enable gyro z */
489 if (res != 0)
490 {
491 mpu9250_interface_debug_print("mpu9250: set standby mode failed.\n");
492 (void)mpu9250_deinit(&gs_handle);
493
494 return 1;
495 }
496
497 /* disable gyroscope x test */
499 if (res != 0)
500 {
501 mpu9250_interface_debug_print("mpu9250: set gyroscope test failed.\n");
502 (void)mpu9250_deinit(&gs_handle);
503
504 return 1;
505 }
506
507 /* disable gyroscope y test */
509 if (res != 0)
510 {
511 mpu9250_interface_debug_print("mpu9250: set gyroscope test failed.\n");
512 (void)mpu9250_deinit(&gs_handle);
513
514 return 1;
515 }
516
517 /* disable gyroscope z test */
519 if (res != 0)
520 {
521 mpu9250_interface_debug_print("mpu9250: set gyroscope test failed.\n");
522 (void)mpu9250_deinit(&gs_handle);
523
524 return 1;
525 }
526
527 /* disable accelerometer x test */
529 if (res != 0)
530 {
531 mpu9250_interface_debug_print("mpu9250: set accelerometer test failed.\n");
532 (void)mpu9250_deinit(&gs_handle);
533
534 return 1;
535 }
536
537 /* disable accelerometer y test */
539 if (res != 0)
540 {
541 mpu9250_interface_debug_print("mpu9250: set accelerometer test failed.\n");
542 (void)mpu9250_deinit(&gs_handle);
543
544 return 1;
545 }
546
547 /* disable accelerometer z test */
549 if (res != 0)
550 {
551 mpu9250_interface_debug_print("mpu9250: set accelerometer test failed.\n");
552 (void)mpu9250_deinit(&gs_handle);
553
554 return 1;
555 }
556
557 /* disable temp fifo */
559 if (res != 0)
560 {
561 mpu9250_interface_debug_print("mpu9250: set fifo enable failed.\n");
562 (void)mpu9250_deinit(&gs_handle);
563
564 return 1;
565 }
566
567 /* disable xg fifo */
569 if (res != 0)
570 {
571 mpu9250_interface_debug_print("mpu9250: set fifo enable failed.\n");
572 (void)mpu9250_deinit(&gs_handle);
573
574 return 1;
575 }
576
577 /* disable yg fifo */
579 if (res != 0)
580 {
581 mpu9250_interface_debug_print("mpu9250: set fifo enable failed.\n");
582 (void)mpu9250_deinit(&gs_handle);
583
584 return 1;
585 }
586
587 /* disable zg fifo */
589 if (res != 0)
590 {
591 mpu9250_interface_debug_print("mpu9250: set fifo enable failed.\n");
592 (void)mpu9250_deinit(&gs_handle);
593
594 return 1;
595 }
596
597 /* disable accel fifo */
599 if (res != 0)
600 {
601 mpu9250_interface_debug_print("mpu9250: set fifo enable failed.\n");
602 (void)mpu9250_deinit(&gs_handle);
603
604 return 1;
605 }
606
607 /* enable fifo */
608 res = mpu9250_set_fifo(&gs_handle, MPU9250_BOOL_TRUE);
609 if (res != 0)
610 {
611 mpu9250_interface_debug_print("mpu9250: set fifo failed.\n");
612 (void)mpu9250_deinit(&gs_handle);
613
614 return 1;
615 }
616
617 /* set interrupt level low */
619 if (res != 0)
620 {
621 mpu9250_interface_debug_print("mpu9250: set interrupt level failed.\n");
622 (void)mpu9250_deinit(&gs_handle);
623
624 return 1;
625 }
626
627 /* push-pull */
629 if (res != 0)
630 {
631 mpu9250_interface_debug_print("mpu9250: set interrupt pin type failed.\n");
632 (void)mpu9250_deinit(&gs_handle);
633
634 return 1;
635 }
636
637 /* set 200mg */
638 res = mpu9250_motion_threshold_convert_to_register(&gs_handle, 200.0f, &reg);
639 if (res != 0)
640 {
641 mpu9250_interface_debug_print("mpu9250: motion threshold convert to register failed.\n");
642 (void)mpu9250_deinit(&gs_handle);
643
644 return 1;
645 }
646
647 /* set the motion threshold */
648 res = mpu9250_set_motion_threshold(&gs_handle, reg);
649 if (res != 0)
650 {
651 mpu9250_interface_debug_print("mpu9250: set motion threshold failed.\n");
652 (void)mpu9250_deinit(&gs_handle);
653
654 return 1;
655 }
656
657 /* enable motion */
659 if (res != 0)
660 {
661 mpu9250_interface_debug_print("mpu9250: set interrupt failed.\n");
662 (void)mpu9250_deinit(&gs_handle);
663
664 return 1;
665 }
666
667 /* enable fifo overflow */
669 if (res != 0)
670 {
671 mpu9250_interface_debug_print("mpu9250: set interrupt failed.\n");
672 (void)mpu9250_deinit(&gs_handle);
673
674 return 1;
675 }
676
677 /* disable dmp interrupt */
679 if (res != 0)
680 {
681 mpu9250_interface_debug_print("mpu9250: set interrupt failed.\n");
682 (void)mpu9250_deinit(&gs_handle);
683
684 return 1;
685 }
686
687 /* disable fsync int */
689 if (res != 0)
690 {
691 mpu9250_interface_debug_print("mpu9250: set interrupt failed.\n");
692 (void)mpu9250_deinit(&gs_handle);
693
694 return 1;
695 }
696
697 /* disable data ready */
699 if (res != 0)
700 {
701 mpu9250_interface_debug_print("mpu9250: set interrupt failed.\n");
702 (void)mpu9250_deinit(&gs_handle);
703
704 return 1;
705 }
706
707 /* enable latch */
709 if (res != 0)
710 {
711 mpu9250_interface_debug_print("mpu9250: set interrupt latch failed.\n");
712 (void)mpu9250_deinit(&gs_handle);
713
714 return 1;
715 }
716
717 /* enable interrupt read clear */
719 if (res != 0)
720 {
721 mpu9250_interface_debug_print("mpu9250: set interrupt read clear failed.\n");
722 (void)mpu9250_deinit(&gs_handle);
723
724 return 1;
725 }
726
727 /* disable sync input */
729 if (res != 0)
730 {
731 mpu9250_interface_debug_print("mpu9250: set extern sync failed.\n");
732 (void)mpu9250_deinit(&gs_handle);
733
734 return 1;
735 }
736
737 /* disable fsync interrupt */
739 if (res != 0)
740 {
741 mpu9250_interface_debug_print("mpu9250: set fsync interrupt failed.\n");
742 (void)mpu9250_deinit(&gs_handle);
743
744 return 1;
745 }
746
747 /* fsync interrupt level low */
749 if (res != 0)
750 {
751 mpu9250_interface_debug_print("mpu9250: set fsync interrupt level failed.\n");
752 (void)mpu9250_deinit(&gs_handle);
753
754 return 1;
755 }
756
757 /* disable iic master */
759 if (res != 0)
760 {
761 mpu9250_interface_debug_print("mpu9250: set iic master failed.\n");
762 (void)mpu9250_deinit(&gs_handle);
763
764 return 1;
765 }
766
767 /* disable iic bypass */
769 if (res != 0)
770 {
771 mpu9250_interface_debug_print("mpu9250: set iic bypass failed.\n");
772 (void)mpu9250_deinit(&gs_handle);
773
774 return 1;
775 }
776
777 /* disable gyro standby */
779 if (res != 0)
780 {
781 mpu9250_interface_debug_print("mpu9250: set gyro standby failed.\n");
782 (void)mpu9250_deinit(&gs_handle);
783
784 return 1;
785 }
786
787 /* set the fifo normal mode */
789 if (res != 0)
790 {
791 mpu9250_interface_debug_print("mpu9250: set fifo mode failed.\n");
792 (void)mpu9250_deinit(&gs_handle);
793
794 return 1;
795 }
796
797 /* set gyroscope choice 0 */
798 res = mpu9250_set_gyroscope_choice(&gs_handle, 0);
799 if (res != 0)
800 {
801 mpu9250_interface_debug_print("mpu9250: set gyroscope choice failed.\n");
802 (void)mpu9250_deinit(&gs_handle);
803
804 return 1;
805 }
806
807 /* set low pass filter 3 */
809 if (res != 0)
810 {
811 mpu9250_interface_debug_print("mpu9250: set low pass filter failed.\n");
812 (void)mpu9250_deinit(&gs_handle);
813
814 return 1;
815 }
816
817 /* set accelerometer choice 0 */
818 res = mpu9250_set_accelerometer_choice(&gs_handle, 0);
819 if (res != 0)
820 {
821 mpu9250_interface_debug_print("mpu9250: set accelerometer choice failed.\n");
822 (void)mpu9250_deinit(&gs_handle);
823
824 return 1;
825 }
826
827 /* set accelerometer low pass filter 3 */
829 if (res != 0)
830 {
831 mpu9250_interface_debug_print("mpu9250: set accelerometer low pass filter failed.\n");
832 (void)mpu9250_deinit(&gs_handle);
833
834 return 1;
835 }
836
837 /* set low power accel output rate 62.5Hz */
839 if (res != 0)
840 {
841 mpu9250_interface_debug_print("mpu9250: set low power accel output rate failed.\n");
842 (void)mpu9250_deinit(&gs_handle);
843
844 return 1;
845 }
846
847 /* enable wake on motion */
849 if (res != 0)
850 {
851 mpu9250_interface_debug_print("mpu9250: set wake on motion failed.\n");
852 (void)mpu9250_deinit(&gs_handle);
853
854 return 1;
855 }
856
857 /* enable accel compare with previous sample */
859 if (res != 0)
860 {
861 mpu9250_interface_debug_print("mpu9250: set accel compare with previous sample failed.\n");
862 (void)mpu9250_deinit(&gs_handle);
863
864 return 1;
865 }
866
867 /* load dmp firmware */
868 mpu9250_interface_debug_print("mpu9250: load dmp firmware.\n");
869
870 /* dmp load firmware */
871 res = mpu9250_dmp_load_firmware(&gs_handle);
872 if (res != 0)
873 {
874 mpu9250_interface_debug_print("mpu9250: dmp load firmware failed.\n");
875 (void)mpu9250_deinit(&gs_handle);
876
877 return 1;
878 }
879
880 /* load dmp firmware successful */
881 mpu9250_interface_debug_print("mpu9250: load dmp firmware successful .\n");
882
883 /* mpu9250_dmp_set_pedometer_walk_time/mpu9250_dmp_get_pedometer_walk_time test */
884 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_pedometer_walk_time/mpu9250_dmp_get_pedometer_walk_time test.\n");
885
886 ms = 200;
887 res = mpu9250_dmp_set_pedometer_walk_time(&gs_handle, ms);
888 if (res != 0)
889 {
890 mpu9250_interface_debug_print("mpu9250: dmp set pedometer walk time failed.\n");
891 (void)mpu9250_deinit(&gs_handle);
892
893 return 1;
894 }
895 mpu9250_interface_debug_print("mpu9250: dmp set pedometer walk time %d ms.\n", ms);
896 res = mpu9250_dmp_get_pedometer_walk_time(&gs_handle, &ms_check);
897 if (res != 0)
898 {
899 mpu9250_interface_debug_print("mpu9250: dmp get pedometer walk time failed.\n");
900 (void)mpu9250_deinit(&gs_handle);
901
902 return 1;
903 }
904 mpu9250_interface_debug_print("mpu9250: check pedometer walk time %s.\n", ms_check == ms ? "ok" : "error");
905
906 /* mpu9250_dmp_set_pedometer_step_count/mpu9250_dmp_get_pedometer_step_count test */
907 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_pedometer_step_count/mpu9250_dmp_get_pedometer_step_count test.\n");
908
909 cnt = rand() % 1000;
910 res = mpu9250_dmp_set_pedometer_step_count(&gs_handle, cnt);
911 if (res != 0)
912 {
913 mpu9250_interface_debug_print("mpu9250: dmp set pedometer step count failed.\n");
914 (void)mpu9250_deinit(&gs_handle);
915
916 return 1;
917 }
918 mpu9250_interface_debug_print("mpu9250: dmp set pedometer step count %d.\n", cnt);
919 res = mpu9250_dmp_get_pedometer_step_count(&gs_handle, &cnt_check);
920 if (res != 0)
921 {
922 mpu9250_interface_debug_print("mpu9250: dmp get pedometer step count failed.\n");
923 (void)mpu9250_deinit(&gs_handle);
924
925 return 1;
926 }
927 mpu9250_interface_debug_print("mpu9250: check pedometer step count %s.\n", cnt_check == cnt ? "ok" : "error");
928
929 /* mpu9250_dmp_set_shake_reject_timeout/mpu9250_dmp_get_shake_reject_timeout test */
930 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_shake_reject_timeout/mpu9250_dmp_get_shake_reject_timeout test.\n");
931
932 m = 10;
933 res = mpu9250_dmp_set_shake_reject_timeout(&gs_handle, m);
934 if (res != 0)
935 {
936 mpu9250_interface_debug_print("mpu9250: dmp set shake reject timeout failed.\n");
937 (void)mpu9250_deinit(&gs_handle);
938
939 return 1;
940 }
941 mpu9250_interface_debug_print("mpu9250: dmp set shake reject timeout %d ms.\n", m);
942 res = mpu9250_dmp_get_shake_reject_timeout(&gs_handle, &m_check);
943 if (res != 0)
944 {
945 mpu9250_interface_debug_print("mpu9250: dmp get shake reject timeout failed.\n");
946 (void)mpu9250_deinit(&gs_handle);
947
948 return 1;
949 }
950 mpu9250_interface_debug_print("mpu9250: check shake reject timeout %s.\n", m_check == m ? "ok" : "error");
951
952 /* mpu9250_dmp_set_shake_reject_time/mpu9250_dmp_get_shake_reject_time test */
953 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_shake_reject_time/mpu9250_dmp_get_shake_reject_time test.\n");
954
955 m = 40;
956 res = mpu9250_dmp_set_shake_reject_time(&gs_handle, m);
957 if (res != 0)
958 {
959 mpu9250_interface_debug_print("mpu9250: dmp set shake reject time failed.\n");
960 (void)mpu9250_deinit(&gs_handle);
961
962 return 1;
963 }
964 mpu9250_interface_debug_print("mpu9250: dmp set shake reject time %d ms.\n", m);
965 res = mpu9250_dmp_get_shake_reject_time(&gs_handle, &m_check);
966 if (res != 0)
967 {
968 mpu9250_interface_debug_print("mpu9250: dmp get shake reject time failed.\n");
969 (void)mpu9250_deinit(&gs_handle);
970
971 return 1;
972 }
973 mpu9250_interface_debug_print("mpu9250: check shake reject time %s.\n", m_check == m ? "ok" : "error");
974
975 /* mpu9250_dmp_set_shake_reject_thresh/mpu9250_dmp_get_shake_reject_thresh test */
976 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_shake_reject_thresh/mpu9250_dmp_get_shake_reject_thresh test.\n");
977
978 m = 200;
979 res = mpu9250_dmp_set_shake_reject_thresh(&gs_handle, m);
980 if (res != 0)
981 {
982 mpu9250_interface_debug_print("mpu9250: dmp set shake reject thresh failed.\n");
983 (void)mpu9250_deinit(&gs_handle);
984
985 return 1;
986 }
987 mpu9250_interface_debug_print("mpu9250: set shake reject thresh %d dps.\n", m);
988 res = mpu9250_dmp_get_shake_reject_thresh(&gs_handle, &m_check);
989 if (res != 0)
990 {
991 mpu9250_interface_debug_print("mpu9250: dmp get shake reject thresh failed.\n");
992 (void)mpu9250_deinit(&gs_handle);
993
994 return 1;
995 }
996 mpu9250_interface_debug_print("mpu9250: check shake reject thresh %s.\n", m_check == m ? "ok" : "error");
997
998 /* mpu9250_dmp_set_tap_time_multi/mpu9250_dmp_get_tap_time_multi test */
999 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_tap_time_multi/mpu9250_dmp_get_tap_time_multi test.\n");
1000
1001 m = 200;
1002 res = mpu9250_dmp_set_tap_time_multi(&gs_handle, m);
1003 if (res != 0)
1004 {
1005 mpu9250_interface_debug_print("mpu9250: dmp set tap time multi failed.\n");
1006 (void)mpu9250_deinit(&gs_handle);
1007
1008 return 1;
1009 }
1010 mpu9250_interface_debug_print("mpu9250: dmp set tap time multi %d ms.\n", m);
1011 res = mpu9250_dmp_get_tap_time_multi(&gs_handle, &m_check);
1012 if (res != 0)
1013 {
1014 mpu9250_interface_debug_print("mpu9250: dmp get tap time multi failed.\n");
1015 (void)mpu9250_deinit(&gs_handle);
1016
1017 return 1;
1018 }
1019 mpu9250_interface_debug_print("mpu9250: check tap time multi %s.\n", m_check == m ? "ok" : "error");
1020
1021 /* mpu9250_dmp_set_tap_time/mpu9250_dmp_get_tap_time test */
1022 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_tap_time/mpu9250_dmp_get_tap_time test.\n");
1023
1024 m = 100;
1025 res = mpu9250_dmp_set_tap_time(&gs_handle, m);
1026 if (res != 0)
1027 {
1028 mpu9250_interface_debug_print("mpu9250: dmp set tap time failed.\n");
1029 (void)mpu9250_deinit(&gs_handle);
1030
1031 return 1;
1032 }
1033 mpu9250_interface_debug_print("mpu9250: dmp set tap time %d ms.\n", m);
1034 res = mpu9250_dmp_get_tap_time(&gs_handle, &m_check);
1035 if (res != 0)
1036 {
1037 mpu9250_interface_debug_print("mpu9250: dmp get tap time failed.\n");
1038 (void)mpu9250_deinit(&gs_handle);
1039
1040 return 1;
1041 }
1042 mpu9250_interface_debug_print("mpu9250: check tap time %s.\n", m_check == m ? "ok" : "error");
1043
1044 /* mpu9250_dmp_set_min_tap_count/mpu9250_dmp_get_min_tap_count test */
1045 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_min_tap_count/mpu9250_dmp_get_min_tap_count test.\n");
1046
1047 c = 1;
1048 res = mpu9250_dmp_set_min_tap_count(&gs_handle, c);
1049 if (res != 0)
1050 {
1051 mpu9250_interface_debug_print("mpu9250: dmp set min tap count failed.\n");
1052 (void)mpu9250_deinit(&gs_handle);
1053
1054 return 1;
1055 }
1056 mpu9250_interface_debug_print("mpu9250: dmp set min tap count %d.\n", c);
1057 res = mpu9250_dmp_get_min_tap_count(&gs_handle, &c_check);
1058 if (res != 0)
1059 {
1060 mpu9250_interface_debug_print("mpu9250: dmp get min tap count failed.\n");
1061 (void)mpu9250_deinit(&gs_handle);
1062
1063 return 1;
1064 }
1065 mpu9250_interface_debug_print("mpu9250: check min tap count %s.\n", c_check == c ? "ok" : "error");
1066
1067 /* mpu9250_dmp_set_tap_axes/mpu9250_dmp_get_tap_axes test */
1068 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_tap_axes/mpu9250_dmp_get_tap_axes test.\n");
1069
1070 /* disable axis x */
1072 if (res != 0)
1073 {
1074 mpu9250_interface_debug_print("mpu9250: dmp set tap axes failed.\n");
1075 (void)mpu9250_deinit(&gs_handle);
1076
1077 return 1;
1078 }
1079 mpu9250_interface_debug_print("mpu9250: disable tap axes x.\n");
1080 res = mpu9250_dmp_get_tap_axes(&gs_handle, MPU9250_AXIS_X, &enable);
1081 if (res != 0)
1082 {
1083 mpu9250_interface_debug_print("mpu9250: dmp get tap axes failed.\n");
1084 (void)mpu9250_deinit(&gs_handle);
1085
1086 return 1;
1087 }
1088 mpu9250_interface_debug_print("mpu9250: check tap axes %s.\n", enable == MPU9250_BOOL_FALSE ? "ok" : "error");
1089
1090 /* enable axis x */
1092 if (res != 0)
1093 {
1094 mpu9250_interface_debug_print("mpu9250: dmp set tap axes failed.\n");
1095 (void)mpu9250_deinit(&gs_handle);
1096
1097 return 1;
1098 }
1099 mpu9250_interface_debug_print("mpu9250: enable tap axes x.\n");
1100 res = mpu9250_dmp_get_tap_axes(&gs_handle, MPU9250_AXIS_X, &enable);
1101 if (res != 0)
1102 {
1103 mpu9250_interface_debug_print("mpu9250: dmp get tap axes failed.\n");
1104 (void)mpu9250_deinit(&gs_handle);
1105
1106 return 1;
1107 }
1108 mpu9250_interface_debug_print("mpu9250: check tap axes %s.\n", enable == MPU9250_BOOL_TRUE ? "ok" : "error");
1109
1110 /* disable axis y */
1112 if (res != 0)
1113 {
1114 mpu9250_interface_debug_print("mpu9250: dmp set tap axes failed.\n");
1115 (void)mpu9250_deinit(&gs_handle);
1116
1117 return 1;
1118 }
1119 mpu9250_interface_debug_print("mpu9250: disable tap axes y.\n");
1120 res = mpu9250_dmp_get_tap_axes(&gs_handle, MPU9250_AXIS_Y, &enable);
1121 if (res != 0)
1122 {
1123 mpu9250_interface_debug_print("mpu9250: dmp get tap axes failed.\n");
1124 (void)mpu9250_deinit(&gs_handle);
1125
1126 return 1;
1127 }
1128 mpu9250_interface_debug_print("mpu9250: check tap axes %s.\n", enable == MPU9250_BOOL_FALSE ? "ok" : "error");
1129
1130 /* enable axis y */
1132 if (res != 0)
1133 {
1134 mpu9250_interface_debug_print("mpu9250: dmp set tap axes failed.\n");
1135 (void)mpu9250_deinit(&gs_handle);
1136
1137 return 1;
1138 }
1139 mpu9250_interface_debug_print("mpu9250: enable tap axes y.\n");
1140 res = mpu9250_dmp_get_tap_axes(&gs_handle, MPU9250_AXIS_Y, &enable);
1141 if (res != 0)
1142 {
1143 mpu9250_interface_debug_print("mpu9250: dmp get tap axes failed.\n");
1144 (void)mpu9250_deinit(&gs_handle);
1145
1146 return 1;
1147 }
1148 mpu9250_interface_debug_print("mpu9250: check tap axes %s.\n", enable == MPU9250_BOOL_TRUE ? "ok" : "error");
1149
1150 /* disable axis z */
1152 if (res != 0)
1153 {
1154 mpu9250_interface_debug_print("mpu9250: dmp set tap axes failed.\n");
1155 (void)mpu9250_deinit(&gs_handle);
1156
1157 return 1;
1158 }
1159 mpu9250_interface_debug_print("mpu9250: disable tap axes z.\n");
1160 res = mpu9250_dmp_get_tap_axes(&gs_handle, MPU9250_AXIS_Z, &enable);
1161 if (res != 0)
1162 {
1163 mpu9250_interface_debug_print("mpu9250: dmp get tap axes failed.\n");
1164 (void)mpu9250_deinit(&gs_handle);
1165
1166 return 1;
1167 }
1168 mpu9250_interface_debug_print("mpu9250: check tap axes %s.\n", enable == MPU9250_BOOL_FALSE ? "ok" : "error");
1169
1170 /* enable axis z */
1172 if (res != 0)
1173 {
1174 mpu9250_interface_debug_print("mpu9250: dmp set tap axes failed.\n");
1175 (void)mpu9250_deinit(&gs_handle);
1176
1177 return 1;
1178 }
1179 mpu9250_interface_debug_print("mpu9250: enable tap axes z.\n");
1180 res = mpu9250_dmp_get_tap_axes(&gs_handle, MPU9250_AXIS_Z, &enable);
1181 if (res != 0)
1182 {
1183 mpu9250_interface_debug_print("mpu9250: dmp get tap axes failed.\n");
1184 (void)mpu9250_deinit(&gs_handle);
1185
1186 return 1;
1187 }
1188 mpu9250_interface_debug_print("mpu9250: check tap axes %s.\n", enable == MPU9250_BOOL_TRUE ? "ok" : "error");
1189
1190 /* mpu9250_dmp_set_tap_thresh/mpu9250_dmp_get_tap_thresh test */
1191 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_tap_thresh/mpu9250_dmp_get_tap_thresh test.\n");
1192
1193 /* set tap thresh x */
1194 m = 250;
1195 res = mpu9250_dmp_set_tap_thresh(&gs_handle, MPU9250_AXIS_X, m);
1196 if (res != 0)
1197 {
1198 mpu9250_interface_debug_print("mpu9250: dmp set tap thresh failed.\n");
1199 (void)mpu9250_deinit(&gs_handle);
1200
1201 return 1;
1202 }
1203 mpu9250_interface_debug_print("mpu9250: dmp set tap thresh x %d mg/ms.\n", m);
1204 res = mpu9250_dmp_get_tap_thresh(&gs_handle, MPU9250_AXIS_X, &m_check);
1205 if (res != 0)
1206 {
1207 mpu9250_interface_debug_print("mpu9250: dmp get tap thresh failed.\n");
1208 (void)mpu9250_deinit(&gs_handle);
1209
1210 return 1;
1211 }
1212 mpu9250_interface_debug_print("mpu9250: check tap thresh %s.\n", m_check == m ? "ok" : "error");
1213
1214 /* set tap thresh y */
1215 m = 250;
1216 res = mpu9250_dmp_set_tap_thresh(&gs_handle, MPU9250_AXIS_Y, m);
1217 if (res != 0)
1218 {
1219 mpu9250_interface_debug_print("mpu9250: dmp set tap thresh failed.\n");
1220 (void)mpu9250_deinit(&gs_handle);
1221
1222 return 1;
1223 }
1224 mpu9250_interface_debug_print("mpu9250: dmp set tap thresh y %d mg/ms.\n", m);
1225 res = mpu9250_dmp_get_tap_thresh(&gs_handle, MPU9250_AXIS_Y, &m_check);
1226 if (res != 0)
1227 {
1228 mpu9250_interface_debug_print("mpu9250: dmp get tap thresh failed.\n");
1229 (void)mpu9250_deinit(&gs_handle);
1230
1231 return 1;
1232 }
1233 mpu9250_interface_debug_print("mpu9250: check tap thresh %s.\n", m_check == m ? "ok" : "error");
1234
1235 /* set tap thresh z */
1236 m = 250;
1237 res = mpu9250_dmp_set_tap_thresh(&gs_handle, MPU9250_AXIS_Z, m);
1238 if (res != 0)
1239 {
1240 mpu9250_interface_debug_print("mpu9250: dmp set tap thresh failed.\n");
1241 (void)mpu9250_deinit(&gs_handle);
1242
1243 return 1;
1244 }
1245 mpu9250_interface_debug_print("mpu9250: dmp set tap thresh z %d mg/ms.\n", m);
1246 res = mpu9250_dmp_get_tap_thresh(&gs_handle, MPU9250_AXIS_Z, &m_check);
1247 if (res != 0)
1248 {
1249 mpu9250_interface_debug_print("mpu9250: dmp get tap thresh failed.\n");
1250 (void)mpu9250_deinit(&gs_handle);
1251
1252 return 1;
1253 }
1254 mpu9250_interface_debug_print("mpu9250: check tap thresh %s.\n", m_check == m ? "ok" : "error");
1255
1256 /* mpu9250_dmp_set_fifo_rate/mpu9250_dmp_get_fifo_rate test */
1257 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_fifo_rate/mpu9250_dmp_get_fifo_rate test.\n");
1258
1259 m = 50;
1260 res = mpu9250_dmp_set_fifo_rate(&gs_handle, m);
1261 if (res != 0)
1262 {
1263 mpu9250_interface_debug_print("mpu9250: dmp set fifo rate failed.\n");
1264 (void)mpu9250_deinit(&gs_handle);
1265
1266 return 1;
1267 }
1268 mpu9250_interface_debug_print("mpu9250: dmp set fifo rate %dHz.\n", m);
1269 res = mpu9250_dmp_get_fifo_rate(&gs_handle, &m_check);
1270 if (res != 0)
1271 {
1272 mpu9250_interface_debug_print("mpu9250: dmp get fifo rate failed.\n");
1273 (void)mpu9250_deinit(&gs_handle);
1274
1275 return 1;
1276 }
1277 mpu9250_interface_debug_print("mpu9250: check fifo rate %s.\n", m_check == m ? "ok" : "error");
1278
1279 /* mpu9250_dmp_set_gyro_calibrate test */
1280 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_gyro_calibrate test.\n");
1281
1282 /* enable gyro calibrate */
1284 if (res != 0)
1285 {
1286 mpu9250_interface_debug_print("mpu9250: dmp set gyro calibrate failed.\n");
1287 (void)mpu9250_deinit(&gs_handle);
1288
1289 return 1;
1290 }
1291 mpu9250_interface_debug_print("mpu9250: enable gyro calibrate.\n");
1292
1293 /* disable gyro calibrate */
1295 if (res != 0)
1296 {
1297 mpu9250_interface_debug_print("mpu9250: dmp set gyro calibrate failed.\n");
1298 (void)mpu9250_deinit(&gs_handle);
1299
1300 return 1;
1301 }
1302 mpu9250_interface_debug_print("mpu9250: disable gyro calibrate.\n");
1303
1304 /* mpu9250_dmp_set_3x_quaternion test */
1305 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_3x_quaternion test.\n");
1306
1307 /* enable 3x quaternion */
1309 if (res != 0)
1310 {
1311 mpu9250_interface_debug_print("mpu9250: dmp set 3x quaternion failed.\n");
1312 (void)mpu9250_deinit(&gs_handle);
1313
1314 return 1;
1315 }
1316 mpu9250_interface_debug_print("mpu9250: enable 3x quaternion.\n");
1317
1318 /* disable 3x quaternion */
1320 if (res != 0)
1321 {
1322 mpu9250_interface_debug_print("mpu9250: dmp set 3x quaternion failed.\n");
1323 (void)mpu9250_deinit(&gs_handle);
1324
1325 return 1;
1326 }
1327 mpu9250_interface_debug_print("mpu9250: disable 3x quaternion.\n");
1328
1329 /* mpu9250_dmp_set_6x_quaternion test */
1330 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_6x_quaternion test.\n");
1331
1332 /* enable 6x quaternion */
1334 if (res != 0)
1335 {
1336 mpu9250_interface_debug_print("mpu9250: dmp set 6x quaternion failed.\n");
1337 (void)mpu9250_deinit(&gs_handle);
1338
1339 return 1;
1340 }
1341 mpu9250_interface_debug_print("mpu9250: enable 6x quaternion.\n");
1342
1343 /* disable 6x quaternion */
1345 if (res != 0)
1346 {
1347 mpu9250_interface_debug_print("mpu9250: dmp set 6x quaternion failed.\n");
1348 (void)mpu9250_deinit(&gs_handle);
1349
1350 return 1;
1351 }
1352 mpu9250_interface_debug_print("mpu9250: disable 6x quaternion.\n");
1353
1354 /* mpu9250_dmp_set_interrupt_mode test */
1355 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_interrupt_mode test.\n");
1356
1357 /* gesture mode */
1359 if (res != 0)
1360 {
1361 mpu9250_interface_debug_print("mpu9250: dmp set interrupt mode failed.\n");
1362 (void)mpu9250_deinit(&gs_handle);
1363
1364 return 1;
1365 }
1366 mpu9250_interface_debug_print("mpu9250: dmp set gesture interrupt mode.\n");
1367
1368 /* continuous mode */
1370 if (res != 0)
1371 {
1372 mpu9250_interface_debug_print("mpu9250: dmp set interrupt mode failed.\n");
1373 (void)mpu9250_deinit(&gs_handle);
1374
1375 return 1;
1376 }
1377 mpu9250_interface_debug_print("mpu9250: dmp set gesture continuous mode.\n");
1378
1379 /* mpu9250_dmp_set_orientation test */
1380 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_orientation test.\n");
1381
1382 /* set the dmp orientation */
1383 res = mpu9250_dmp_set_orientation(&gs_handle, gyro_orientation);
1384 if (res != 0)
1385 {
1386 mpu9250_interface_debug_print("mpu9250: dmp set orientation failed.\n");
1387 (void)mpu9250_deinit(&gs_handle);
1388
1389 return 1;
1390 }
1391 mpu9250_interface_debug_print("mpu9250: set the dmp orientation.\n");
1392
1393 /* mpu9250_dmp_set_feature test */
1394 mpu9250_interface_debug_print("mpu9250: mpu9250_dmp_set_feature test.\n");
1395
1396 /* enable feature */
1400 if (res != 0)
1401 {
1402 mpu9250_interface_debug_print("mpu9250: dmp set feature failed.\n");
1403 (void)mpu9250_deinit(&gs_handle);
1404
1405 return 1;
1406 }
1407 mpu9250_interface_debug_print("mpu9250: enable feature 6x quat.\n");
1408 mpu9250_interface_debug_print("mpu9250: enable feature tap.\n");
1409 mpu9250_interface_debug_print("mpu9250: enable feature pedometer.\n");
1410 mpu9250_interface_debug_print("mpu9250: enable feature orient.\n");
1411 mpu9250_interface_debug_print("mpu9250: enable feature send raw accel.\n");
1412 mpu9250_interface_debug_print("mpu9250: enable feature send cal gyro.\n");
1413 mpu9250_interface_debug_print("mpu9250: enable feature gyro cal.\n");
1414
1415 /* dmp set tap callback */
1416 res = mpu9250_dmp_set_tap_callback(&gs_handle, a_dmp_tap_callback);
1417 if (res != 0)
1418 {
1419 mpu9250_interface_debug_print("mpu9250: dmp set tap callback failed.\n");
1420 (void)mpu9250_deinit(&gs_handle);
1421
1422 return 1;
1423 }
1424
1425 /* dmp set orient callback */
1426 res = mpu9250_dmp_set_orient_callback(&gs_handle, a_dmp_orient_callback);
1427 if (res != 0)
1428 {
1429 mpu9250_interface_debug_print("mpu9250: dmp set orient callback failed.\n");
1430 (void)mpu9250_deinit(&gs_handle);
1431
1432 return 1;
1433 }
1434
1435 /* dmp gyro accel raw offset convert */
1436 res = mpu9250_dmp_gyro_accel_raw_offset_convert(&gs_handle, gyro_offset_raw, accel_offset_raw,
1437 gyro_offset, accel_offset);
1438 if (res != 0)
1439 {
1440 mpu9250_interface_debug_print("mpu9250: dmp gyro accel raw offset convert failed.\n");
1441 (void)mpu9250_deinit(&gs_handle);
1442
1443 return 1;
1444 }
1445
1446 /* dmp set accel bias */
1447 res = mpu9250_dmp_set_accel_bias(&gs_handle, accel_offset);
1448 if (res != 0)
1449 {
1450 mpu9250_interface_debug_print("mpu9250: dmp set accel bias failed.\n");
1451 (void)mpu9250_deinit(&gs_handle);
1452
1453 return 1;
1454 }
1455
1456 /* dmp set gyro bias */
1457 res = mpu9250_dmp_set_gyro_bias(&gs_handle, gyro_offset);
1458 if (res != 0)
1459 {
1460 mpu9250_interface_debug_print("mpu9250: dmp set gyro bias failed.\n");
1461 (void)mpu9250_deinit(&gs_handle);
1462
1463 return 1;
1464 }
1465
1466 /* enable the dmp */
1467 res = mpu9250_dmp_set_enable(&gs_handle, MPU9250_BOOL_TRUE);
1468 if (res != 0)
1469 {
1470 mpu9250_interface_debug_print("mpu9250: dmp set enable failed.\n");
1471 (void)mpu9250_deinit(&gs_handle);
1472
1473 return 1;
1474 }
1475
1476 /* force reset the fifo */
1477 res = mpu9250_force_fifo_reset(&gs_handle);
1478 if (res != 0)
1479 {
1480 mpu9250_interface_debug_print("mpu9250: force fifo reset failed.\n");
1481 (void)mpu9250_deinit(&gs_handle);
1482
1483 return 1;
1484 }
1485
1486 /* delay 200 ms */
1488
1489 /* set 0 */
1490 gs_flag = 0;
1491
1492 for (i = 0; i < 1000; i++)
1493 {
1494 uint16_t l;
1495
1496 /* read the data */
1497 l = 128;
1498 res = mpu9250_dmp_read(&gs_handle,
1499 gs_accel_raw, gs_accel_g,
1500 gs_gyro_raw, gs_gyro_dps,
1501 gs_quat,
1502 gs_pitch, gs_roll, gs_yaw,
1503 &l
1504 );
1505 if (res != 0)
1506 {
1507 /* output data */
1508 mpu9250_interface_debug_print("mpu9250: dmp read failed.\n");
1509 }
1511
1512 /* check the flag */
1513 if ((gs_flag & 0x7) == 0x7)
1514 {
1515 break;
1516 }
1517 }
1518
1519 /* finish dmp tap orient motion test */
1520 mpu9250_interface_debug_print("mpu9250: finish dmp tap orient motion test.\n");
1521 (void)mpu9250_deinit(&gs_handle);
1522
1523 return 0;
1524}
driver mpu9250 dmp tap orient motion test header file
uint8_t mpu9250_set_accelerometer_low_pass_filter(mpu9250_handle_t *handle, mpu9250_accelerometer_low_pass_filter_t filter)
set the accelerometer low pass filter
uint8_t mpu9250_set_wake_on_motion(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable wake on motion
uint8_t mpu9250_set_accel_compare_with_previous_sample(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable accel compare with previous sample
uint8_t mpu9250_set_fifo_mode(mpu9250_handle_t *handle, mpu9250_fifo_mode mode)
set the fifo mode
uint8_t mpu9250_self_test(mpu9250_handle_t *handle, int32_t gyro_offset_raw[3], int32_t accel_offset_raw[3])
run the self test
uint8_t mpu9250_set_addr_pin(mpu9250_handle_t *handle, mpu9250_address_t addr_pin)
set the chip address pin
uint8_t mpu9250_set_ptat(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the temperature sensor
uint8_t mpu9250_set_fifo_enable(mpu9250_handle_t *handle, mpu9250_fifo_t fifo, mpu9250_bool_t enable)
enable or disable the fifo function
uint8_t mpu9250_set_standby_mode(mpu9250_handle_t *handle, mpu9250_source_t source, mpu9250_bool_t enable)
set source into standby mode
uint8_t mpu9250_set_cycle_wake_up(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the cycle wake up mode
uint8_t mpu9250_set_interrupt_latch(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the interrupt latch
uint8_t mpu9250_set_extern_sync(mpu9250_handle_t *handle, mpu9250_extern_sync_t sync)
set the extern sync type
uint8_t mpu9250_set_gyro_standby(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the gyro standby
mpu9250_address_t
mpu9250 address enumeration definition
uint8_t mpu9250_set_fsync_interrupt(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the fsync interrupt
uint8_t mpu9250_set_iic_bypass(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the iic bypass
uint8_t mpu9250_info(mpu9250_info_t *info)
get the chip's information
uint8_t mpu9250_set_accelerometer_test(mpu9250_handle_t *handle, mpu9250_axis_t axis, mpu9250_bool_t enable)
set the accelerometer test
uint8_t mpu9250_set_interrupt_level(mpu9250_handle_t *handle, mpu9250_pin_level_t level)
set the interrupt level
uint8_t mpu9250_set_interrupt_read_clear(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the interrupt reading clear
uint8_t mpu9250_set_interface(mpu9250_handle_t *handle, mpu9250_interface_t interface)
set the chip interface
uint8_t mpu9250_irq_handler(mpu9250_handle_t *handle)
irq handler
struct mpu9250_info_s mpu9250_info_t
mpu9250 information structure definition
mpu9250_interface_t
mpu9250 interface enumeration definition
mpu9250_bool_t
mpu9250 bool enumeration definition
uint8_t mpu9250_set_interrupt(mpu9250_handle_t *handle, mpu9250_interrupt_t type, mpu9250_bool_t enable)
enable or disable the interrupt
uint8_t mpu9250_set_motion_threshold(mpu9250_handle_t *handle, uint8_t threshold)
set the motion_threshold
uint8_t mpu9250_set_fsync_interrupt_level(mpu9250_handle_t *handle, mpu9250_pin_level_t level)
set the fsync interrupt level
uint8_t mpu9250_set_gyroscope_choice(mpu9250_handle_t *handle, uint8_t choice)
set the gyroscope choice
uint8_t mpu9250_deinit(mpu9250_handle_t *handle)
close the chip
struct mpu9250_handle_s mpu9250_handle_t
mpu9250 handle structure definition
uint8_t mpu9250_set_fifo_1024kb(mpu9250_handle_t *handle)
set fifo 1024kb
uint8_t mpu9250_motion_threshold_convert_to_register(mpu9250_handle_t *handle, float mg, uint8_t *reg)
convert the motion threshold to the register raw data
uint8_t mpu9250_set_low_pass_filter(mpu9250_handle_t *handle, mpu9250_low_pass_filter_t filter)
set the low pass filter
uint8_t mpu9250_set_gyroscope_test(mpu9250_handle_t *handle, mpu9250_axis_t axis, mpu9250_bool_t enable)
set the gyroscope test
uint8_t mpu9250_set_clock_source(mpu9250_handle_t *handle, mpu9250_clock_source_t clock_source)
set the chip clock source
uint8_t mpu9250_set_low_power_accel_output_rate(mpu9250_handle_t *handle, mpu9250_low_power_accel_output_rate_t rate)
set the low power accel output rate
uint8_t mpu9250_set_disable_iic_slave(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the iic slave mode
uint8_t mpu9250_set_sample_rate_divider(mpu9250_handle_t *handle, uint8_t d)
set the sample rate divider
uint8_t mpu9250_set_fifo(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable fifo
uint8_t mpu9250_init(mpu9250_handle_t *handle)
initialize the chip
uint8_t mpu9250_set_accelerometer_choice(mpu9250_handle_t *handle, uint8_t choice)
set the accelerometer choice
uint8_t mpu9250_set_gyroscope_range(mpu9250_handle_t *handle, mpu9250_gyroscope_range_t range)
set the gyroscope range
uint8_t mpu9250_set_interrupt_pin_type(mpu9250_handle_t *handle, mpu9250_pin_type_t type)
set the interrupt pin type
uint8_t mpu9250_set_iic_master(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the iic master mode
uint8_t mpu9250_set_accelerometer_range(mpu9250_handle_t *handle, mpu9250_accelerometer_range_t range)
set the accelerometer range
uint8_t mpu9250_set_sleep(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the sleep mode
uint8_t mpu9250_force_fifo_reset(mpu9250_handle_t *handle)
force reset the fifo
@ MPU9250_ACCELEROMETER_RANGE_2G
@ MPU9250_PIN_TYPE_PUSH_PULL
@ MPU9250_GYROSCOPE_RANGE_2000DPS
@ MPU9250_INTERRUPT_MOTION
@ MPU9250_INTERRUPT_DATA_READY
@ MPU9250_INTERRUPT_FSYNC_INT
@ MPU9250_INTERRUPT_DMP
@ MPU9250_INTERRUPT_FIFO_OVERFLOW
@ MPU9250_EXTERN_SYNC_INPUT_DISABLED
@ MPU9250_SOURCE_GYRO_X
@ MPU9250_SOURCE_ACC_Z
@ MPU9250_SOURCE_GYRO_Y
@ MPU9250_SOURCE_GYRO_Z
@ MPU9250_SOURCE_ACC_X
@ MPU9250_SOURCE_ACC_Y
@ MPU9250_INTERFACE_SPI
@ MPU9250_BOOL_TRUE
@ MPU9250_BOOL_FALSE
@ MPU9250_LOW_PASS_FILTER_3
@ MPU9250_FIFO_MODE_NORMAL
@ MPU9250_LOW_POWER_ACCEL_OUTPUT_RATE_62P50
@ MPU9250_AXIS_X
@ MPU9250_AXIS_Z
@ MPU9250_AXIS_Y
@ MPU9250_ACCELEROMETER_LOW_PASS_FILTER_3
@ MPU9250_PIN_LEVEL_LOW
@ MPU9250_FIFO_XG
@ MPU9250_FIFO_YG
@ MPU9250_FIFO_ZG
@ MPU9250_FIFO_ACCEL
@ MPU9250_FIFO_TEMP
@ MPU9250_CLOCK_SOURCE_PLL
uint8_t mpu9250_dmp_set_accel_bias(mpu9250_handle_t *handle, int32_t bias[3])
dmp set the accel bias
uint8_t mpu9250_dmp_set_tap_callback(mpu9250_handle_t *handle, void(*callback)(uint8_t count, uint8_t direction))
dmp set the tap callback
uint8_t mpu9250_dmp_get_fifo_rate(mpu9250_handle_t *handle, uint16_t *rate)
dmp get the fifo rate
uint8_t mpu9250_dmp_set_gyro_bias(mpu9250_handle_t *handle, int32_t bias[3])
dmp set the gyro bias
uint8_t mpu9250_dmp_set_shake_reject_timeout(mpu9250_handle_t *handle, uint16_t ms)
dmp set the shake reject timeout
uint8_t mpu9250_dmp_get_pedometer_walk_time(mpu9250_handle_t *handle, uint32_t *ms)
dmp get the pedometer walk time
uint8_t mpu9250_dmp_get_tap_time_multi(mpu9250_handle_t *handle, uint16_t *ms)
dmp get max time between taps to register as a multi tap
uint8_t mpu9250_dmp_set_6x_quaternion(mpu9250_handle_t *handle, mpu9250_bool_t enable)
dmp enable or disable generate 6 axis quaternions from dmp
uint8_t mpu9250_dmp_set_orientation(mpu9250_handle_t *handle, int8_t mat[9])
dmp set the orientation
uint8_t mpu9250_dmp_set_fifo_rate(mpu9250_handle_t *handle, uint16_t rate)
dmp set the fifo rate
uint8_t mpu9250_dmp_load_firmware(mpu9250_handle_t *handle)
load the dmp firmware
uint8_t mpu9250_dmp_set_3x_quaternion(mpu9250_handle_t *handle, mpu9250_bool_t enable)
dmp enable or disable generate 3 axis quaternions from dmp
uint8_t mpu9250_dmp_set_tap_axes(mpu9250_handle_t *handle, mpu9250_axis_t axis, mpu9250_bool_t enable)
dmp enable or disable the tap axes
uint8_t mpu9250_dmp_get_tap_axes(mpu9250_handle_t *handle, mpu9250_axis_t axis, mpu9250_bool_t *enable)
dmp get the tap axes status
uint8_t mpu9250_dmp_set_enable(mpu9250_handle_t *handle, mpu9250_bool_t enable)
enable or disable the dmp
uint8_t mpu9250_dmp_set_feature(mpu9250_handle_t *handle, uint16_t mask)
dmp enable or disable the dmp feature
uint8_t mpu9250_dmp_set_shake_reject_thresh(mpu9250_handle_t *handle, uint16_t dps)
dmp set the shake reject thresh
uint8_t mpu9250_dmp_set_orient_callback(mpu9250_handle_t *handle, void(*callback)(uint8_t orientation))
dmp set the orient callback
uint8_t mpu9250_dmp_set_interrupt_mode(mpu9250_handle_t *handle, mpu9250_dmp_interrupt_mode_t mode)
dmp set the interrupt mode
uint8_t mpu9250_dmp_get_shake_reject_time(mpu9250_handle_t *handle, uint16_t *ms)
dmp get the shake reject time
uint8_t mpu9250_dmp_get_pedometer_step_count(mpu9250_handle_t *handle, uint32_t *count)
dmp get the pedometer step count
uint8_t mpu9250_dmp_set_pedometer_step_count(mpu9250_handle_t *handle, uint32_t count)
dmp set the pedometer step count
uint8_t mpu9250_dmp_get_tap_thresh(mpu9250_handle_t *handle, mpu9250_axis_t axis, uint16_t *mg_ms)
dmp get the tap thresh
uint8_t mpu9250_dmp_set_shake_reject_time(mpu9250_handle_t *handle, uint16_t ms)
dmp set the shake reject time
uint8_t mpu9250_dmp_get_min_tap_count(mpu9250_handle_t *handle, uint8_t *cnt)
dmp get the min tap count
uint8_t mpu9250_dmp_get_tap_time(mpu9250_handle_t *handle, uint16_t *ms)
dmp get the tap time
uint8_t mpu9250_dmp_set_gyro_calibrate(mpu9250_handle_t *handle, mpu9250_bool_t enable)
dmp enable or disable gyro calibrate
uint8_t mpu9250_dmp_get_shake_reject_timeout(mpu9250_handle_t *handle, uint16_t *ms)
dmp get the shake reject timeout
uint8_t mpu9250_dmp_gyro_accel_raw_offset_convert(mpu9250_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 mpu9250_dmp_set_tap_time(mpu9250_handle_t *handle, uint16_t ms)
dmp set the tap time
uint8_t mpu9250_dmp_set_tap_thresh(mpu9250_handle_t *handle, mpu9250_axis_t axis, uint16_t mg_ms)
dmp set the tap thresh
uint8_t mpu9250_dmp_set_min_tap_count(mpu9250_handle_t *handle, uint8_t cnt)
dmp set the min tap count
uint8_t mpu9250_dmp_set_pedometer_walk_time(mpu9250_handle_t *handle, uint32_t ms)
dmp set the pedometer walk time
uint8_t mpu9250_dmp_read(mpu9250_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 mpu9250_dmp_set_tap_time_multi(mpu9250_handle_t *handle, uint16_t ms)
dmp set max time between taps to register as a multi tap
uint8_t mpu9250_dmp_get_shake_reject_thresh(mpu9250_handle_t *handle, uint16_t *dps)
dmp get the shake reject thresh
@ MPU9250_DMP_FEATURE_6X_QUAT
@ MPU9250_DMP_FEATURE_GYRO_CAL
@ MPU9250_DMP_FEATURE_PEDOMETER
@ MPU9250_DMP_FEATURE_SEND_CAL_GYRO
@ MPU9250_DMP_FEATURE_SEND_RAW_ACCEL
@ MPU9250_DMP_FEATURE_TAP
@ MPU9250_DMP_FEATURE_ORIENT
@ MPU9250_DMP_ORIENT_REVERSE_PORTRAIT
@ MPU9250_DMP_ORIENT_REVERSE_LANDSCAPE
@ MPU9250_DMP_ORIENT_PORTRAIT
@ MPU9250_DMP_ORIENT_LANDSCAPE
@ MPU9250_DMP_INTERRUPT_MODE_CONTINUOUS
@ MPU9250_DMP_INTERRUPT_MODE_GESTURE
@ MPU9250_DMP_TAP_X_DOWN
@ MPU9250_DMP_TAP_X_UP
@ MPU9250_DMP_TAP_Y_DOWN
@ MPU9250_DMP_TAP_Z_UP
@ MPU9250_DMP_TAP_Z_DOWN
@ MPU9250_DMP_TAP_Y_UP
void mpu9250_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mpu9250_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t mpu9250_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mpu9250_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t mpu9250_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t mpu9250_interface_iic_init(void)
interface iic bus init
uint8_t mpu9250_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
uint8_t mpu9250_interface_spi_init(void)
interface spi bus init
void mpu9250_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t mpu9250_interface_spi_deinit(void)
interface spi bus deinit
uint8_t mpu9250_dmp_tap_orient_motion_test_irq_handler(void)
dmp tap orient motion test irq
uint8_t mpu9250_dmp_tap_orient_motion_test(mpu9250_interface_t interface, mpu9250_address_t addr)
dmp test
uint32_t driver_version
char manufacturer_name[32]