LibDriver MPU6050
Loading...
Searching...
No Matches
driver_mpu6050_dmp.c
Go to the documentation of this file.
1
36
37#include "driver_mpu6050_dmp.h"
38
39static mpu6050_handle_t gs_handle;
40
49{
50 if (mpu6050_irq_handler(&gs_handle) != 0)
51 {
52 return 1;
53 }
54 else
55 {
56 return 0;
57 }
58}
59
72 void (*receive_callback)(uint8_t type),
73 void (*tap_callback)(uint8_t count, uint8_t direction),
74 void (*orient_callback)(uint8_t orientation)
75 )
76{
77 uint8_t res;
78 uint8_t reg;
79 int32_t gyro_offset_raw[3];
80 int32_t accel_offset_raw[3];
81 int32_t gyro_offset[3];
82 int32_t accel_offset[3];
83 int8_t gyro_orientation[9] = {1, 0, 0,
84 0, 1, 0,
85 0, 0, 1};
86
87 /* link interface function */
95 DRIVER_MPU6050_LINK_RECEIVE_CALLBACK(&gs_handle, receive_callback);
96
97 /* set the addr pin */
98 res = mpu6050_set_addr_pin(&gs_handle, addr_pin);
99 if (res != 0)
100 {
101 mpu6050_interface_debug_print("mpu6050: set addr pin failed.\n");
102
103 return 1;
104 }
105
106 /* init */
107 res = mpu6050_init(&gs_handle);
108 if (res != 0)
109 {
110 mpu6050_interface_debug_print("mpu6050: init failed.\n");
111
112 return 1;
113 }
114
115 /* delay 100 ms */
117
118 /* disable sleep */
119 res = mpu6050_set_sleep(&gs_handle, MPU6050_BOOL_FALSE);
120 if (res != 0)
121 {
122 mpu6050_interface_debug_print("mpu6050: set sleep failed.\n");
123 (void)mpu6050_deinit(&gs_handle);
124
125 return 1;
126 }
127
128 /* run the self test */
129 res = mpu6050_self_test(&gs_handle, gyro_offset_raw, accel_offset_raw);
130 if (res != 0)
131 {
132 mpu6050_interface_debug_print("mpu6050: self test failed.\n");
133 (void)mpu6050_deinit(&gs_handle);
134
135 return 1;
136 }
137
138 /* set the default clock source */
140 if (res != 0)
141 {
142 mpu6050_interface_debug_print("mpu6050: set clock source failed.\n");
143 (void)mpu6050_deinit(&gs_handle);
144
145 return 1;
146 }
147
148 /* set the default rate */
149 res = mpu6050_set_sample_rate_divider(&gs_handle, (1000 / MPU6050_DMP_DEFAULT_RATE) - 1);
150 if (res != 0)
151 {
152 mpu6050_interface_debug_print("mpu6050: set sample rate divider failed.\n");
153 (void)mpu6050_deinit(&gs_handle);
154
155 return 1;
156 }
157
158 /* set the default accelerometer range */
160 if (res != 0)
161 {
162 mpu6050_interface_debug_print("mpu6050: set accelerometer range failed.\n");
163 (void)mpu6050_deinit(&gs_handle);
164
165 return 1;
166 }
167
168 /* set the default gyroscope_range */
170 if (res != 0)
171 {
172 mpu6050_interface_debug_print("mpu6050: set gyroscope range failed.\n");
173 (void)mpu6050_deinit(&gs_handle);
174
175 return 1;
176 }
177
178 /* set the default low pass filter */
180 if (res != 0)
181 {
182 mpu6050_interface_debug_print("mpu6050: set low pass filter failed.\n");
183 (void)mpu6050_deinit(&gs_handle);
184
185 return 1;
186 }
187
188 /* enable temperature sensor */
190 if (res != 0)
191 {
192 mpu6050_interface_debug_print("mpu6050: set temperature sensor failed.\n");
193 (void)mpu6050_deinit(&gs_handle);
194
195 return 1;
196 }
197
198 /* set the default cycle wake up */
200 if (res != 0)
201 {
202 mpu6050_interface_debug_print("mpu6050: set cycle wake up failed.\n");
203 (void)mpu6050_deinit(&gs_handle);
204
205 return 1;
206 }
207
208 /* set the default wake up frequency */
210 if (res != 0)
211 {
212 mpu6050_interface_debug_print("mpu6050: set wake up frequency failed.\n");
213 (void)mpu6050_deinit(&gs_handle);
214
215 return 1;
216 }
217
218 /* enable acc x */
220 if (res != 0)
221 {
222 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
223 (void)mpu6050_deinit(&gs_handle);
224
225 return 1;
226 }
227
228 /* enable acc y */
230 if (res != 0)
231 {
232 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
233 (void)mpu6050_deinit(&gs_handle);
234
235 return 1;
236 }
237
238 /* enable acc z */
240 if (res != 0)
241 {
242 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
243 (void)mpu6050_deinit(&gs_handle);
244
245 return 1;
246 }
247
248 /* enable gyro x */
250 if (res != 0)
251 {
252 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
253 (void)mpu6050_deinit(&gs_handle);
254
255 return 1;
256 }
257
258 /* enable gyro y */
260 if (res != 0)
261 {
262 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
263 (void)mpu6050_deinit(&gs_handle);
264
265 return 1;
266 }
267
268 /* enable gyro z */
270 if (res != 0)
271 {
272 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
273 (void)mpu6050_deinit(&gs_handle);
274
275 return 1;
276 }
277
278 /* disable gyroscope x test */
280 if (res != 0)
281 {
282 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
283 (void)mpu6050_deinit(&gs_handle);
284
285 return 1;
286 }
287
288 /* disable gyroscope y test */
290 if (res != 0)
291 {
292 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
293 (void)mpu6050_deinit(&gs_handle);
294
295 return 1;
296 }
297
298 /* disable gyroscope z test */
300 if (res != 0)
301 {
302 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
303 (void)mpu6050_deinit(&gs_handle);
304
305 return 1;
306 }
307
308 /* disable accelerometer x test */
310 if (res != 0)
311 {
312 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
313 (void)mpu6050_deinit(&gs_handle);
314
315 return 1;
316 }
317
318 /* disable accelerometer y test */
320 if (res != 0)
321 {
322 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
323 (void)mpu6050_deinit(&gs_handle);
324
325 return 1;
326 }
327
328 /* disable accelerometer z test */
330 if (res != 0)
331 {
332 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
333 (void)mpu6050_deinit(&gs_handle);
334
335 return 1;
336 }
337
338 /* disable temp fifo */
340 if (res != 0)
341 {
342 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
343 (void)mpu6050_deinit(&gs_handle);
344
345 return 1;
346 }
347
348 /* disable xg fifo */
350 if (res != 0)
351 {
352 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
353 (void)mpu6050_deinit(&gs_handle);
354
355 return 1;
356 }
357
358 /* disable yg fifo */
360 if (res != 0)
361 {
362 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
363 (void)mpu6050_deinit(&gs_handle);
364
365 return 1;
366 }
367
368 /* disable zg fifo */
370 if (res != 0)
371 {
372 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
373 (void)mpu6050_deinit(&gs_handle);
374
375 return 1;
376 }
377
378 /* disable accel fifo */
380 if (res != 0)
381 {
382 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
383 (void)mpu6050_deinit(&gs_handle);
384
385 return 1;
386 }
387
388 /* enable fifo */
389 res = mpu6050_set_fifo(&gs_handle, MPU6050_BOOL_TRUE);
390 if (res != 0)
391 {
392 mpu6050_interface_debug_print("mpu6050: set fifo failed.\n");
393 (void)mpu6050_deinit(&gs_handle);
394
395 return 1;
396 }
397
398 /* set the default interrupt level */
400 if (res != 0)
401 {
402 mpu6050_interface_debug_print("mpu6050: set interrupt level failed.\n");
403 (void)mpu6050_deinit(&gs_handle);
404
405 return 1;
406 }
407
408 /* set the default interrupt pin type */
410 if (res != 0)
411 {
412 mpu6050_interface_debug_print("mpu6050: set interrupt pin type failed.\n");
413 (void)mpu6050_deinit(&gs_handle);
414
415 return 1;
416 }
417
418 if (tap_callback != NULL)
419 {
420 /* set the default motion threshold */
422 if (res != 0)
423 {
424 mpu6050_interface_debug_print("mpu6050: motion threshold convert to register failed.\n");
425 (void)mpu6050_deinit(&gs_handle);
426
427 return 1;
428 }
429
430 /* set the motion threshold */
431 res = mpu6050_set_motion_threshold(&gs_handle, reg);
432 if (res != 0)
433 {
434 mpu6050_interface_debug_print("mpu6050: set motion threshold failed.\n");
435 (void)mpu6050_deinit(&gs_handle);
436
437 return 1;
438 }
439
440 /* set the default motion duration */
442 if (res != 0)
443 {
444 mpu6050_interface_debug_print("mpu6050: motion duration convert to register failed.\n");
445 (void)mpu6050_deinit(&gs_handle);
446
447 return 1;
448 }
449
450 /* set the motion duration */
451 res = mpu6050_set_motion_duration(&gs_handle, reg);
452 if (res != 0)
453 {
454 mpu6050_interface_debug_print("mpu6050: set motion duration failed.\n");
455 (void)mpu6050_deinit(&gs_handle);
456
457 return 1;
458 }
459
460 /* enable the force accel sample */
462 if (res != 0)
463 {
464 mpu6050_interface_debug_print("mpu6050: set force accel sample failed.\n");
465 (void)mpu6050_deinit(&gs_handle);
466
467 return 1;
468 }
469 }
470
471 /* set the default motion interrupt */
473 if (res != 0)
474 {
475 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
476 (void)mpu6050_deinit(&gs_handle);
477
478 return 1;
479 }
480
481 /* set the default fifo overflow interrupt */
483 if (res != 0)
484 {
485 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
486 (void)mpu6050_deinit(&gs_handle);
487
488 return 1;
489 }
490
491 /* set the default dmp interrupt */
493 if (res != 0)
494 {
495 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
496 (void)mpu6050_deinit(&gs_handle);
497
498 return 1;
499 }
500
501 /* set the default i2c master interrupt */
503 if (res != 0)
504 {
505 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
506 (void)mpu6050_deinit(&gs_handle);
507
508 return 1;
509 }
510
511 /* set the default data ready interrupt */
513 if (res != 0)
514 {
515 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
516 (void)mpu6050_deinit(&gs_handle);
517
518 return 1;
519 }
520
521 /* set the default latch */
523 if (res != 0)
524 {
525 mpu6050_interface_debug_print("mpu6050: set interrupt latch failed.\n");
526 (void)mpu6050_deinit(&gs_handle);
527
528 return 1;
529 }
530
531 /* set the default interrupt read clear */
533 if (res != 0)
534 {
535 mpu6050_interface_debug_print("mpu6050: set interrupt read clear failed.\n");
536 (void)mpu6050_deinit(&gs_handle);
537
538 return 1;
539 }
540
541 /* set the default extern sync */
543 if (res != 0)
544 {
545 mpu6050_interface_debug_print("mpu6050: set extern sync failed.\n");
546 (void)mpu6050_deinit(&gs_handle);
547
548 return 1;
549 }
550
551 /* set the default fsync interrupt */
553 if (res != 0)
554 {
555 mpu6050_interface_debug_print("mpu6050: set fsync interrupt failed.\n");
556 (void)mpu6050_deinit(&gs_handle);
557
558 return 1;
559 }
560
561 /* set the default fsync interrupt level */
563 if (res != 0)
564 {
565 mpu6050_interface_debug_print("mpu6050: set fsync interrupt level failed.\n");
566 (void)mpu6050_deinit(&gs_handle);
567
568 return 1;
569 }
570
571 /* set the default iic master */
573 if (res != 0)
574 {
575 mpu6050_interface_debug_print("mpu6050: set iic master failed.\n");
576 (void)mpu6050_deinit(&gs_handle);
577
578 return 1;
579 }
580
581 /* set the default iic bypass */
583 if (res != 0)
584 {
585 mpu6050_interface_debug_print("mpu6050: set iic bypass failed.\n");
586 (void)mpu6050_deinit(&gs_handle);
587
588 return 1;
589 }
590
591 /* dmp load firmware */
592 res = mpu6050_dmp_load_firmware(&gs_handle);
593 if (res != 0)
594 {
595 mpu6050_interface_debug_print("mpu6050: dmp load firmware failed.\n");
596 (void)mpu6050_deinit(&gs_handle);
597
598 return 1;
599 }
600
601 /* enable axis x */
603 if (res != 0)
604 {
605 mpu6050_interface_debug_print("mpu6050: dmp set tap axes failed.\n");
606 (void)mpu6050_deinit(&gs_handle);
607
608 return 1;
609 }
610
611 /* enable axis y */
613 if (res != 0)
614 {
615 mpu6050_interface_debug_print("mpu6050: dmp set tap axes failed.\n");
616 (void)mpu6050_deinit(&gs_handle);
617
618 return 1;
619 }
620
621 /* enable axis z */
623 if (res != 0)
624 {
625 mpu6050_interface_debug_print("mpu6050: dmp set tap axes failed.\n");
626 (void)mpu6050_deinit(&gs_handle);
627
628 return 1;
629 }
630
631 /* set the default fifo rate */
633 if (res != 0)
634 {
635 mpu6050_interface_debug_print("mpu6050: dmp set fifo rate failed.\n");
636 (void)mpu6050_deinit(&gs_handle);
637
638 return 1;
639 }
640
641 /* set the default interrupt mode */
643 if (res != 0)
644 {
645 mpu6050_interface_debug_print("mpu6050: dmp set interrupt mode failed.\n");
646 (void)mpu6050_deinit(&gs_handle);
647
648 return 1;
649 }
650
651 /* set the default dmp orientation */
652 res = mpu6050_dmp_set_orientation(&gs_handle, gyro_orientation);
653 if (res != 0)
654 {
655 mpu6050_interface_debug_print("mpu6050: dmp set orientation failed.\n");
656 (void)mpu6050_deinit(&gs_handle);
657
658 return 1;
659 }
660
661 /* enable feature */
665 if (res != 0)
666 {
667 mpu6050_interface_debug_print("mpu6050: dmp set feature failed.\n");
668 (void)mpu6050_deinit(&gs_handle);
669
670 return 1;
671 }
672
673 /* dmp set tap callback */
674 res = mpu6050_dmp_set_tap_callback(&gs_handle, tap_callback);
675 if (res != 0)
676 {
677 mpu6050_interface_debug_print("mpu6050: dmp set tap callback failed.\n");
678 (void)mpu6050_deinit(&gs_handle);
679
680 return 1;
681 }
682
683 /* dmp set orient callback */
684 res = mpu6050_dmp_set_orient_callback(&gs_handle, orient_callback);
685 if (res != 0)
686 {
687 mpu6050_interface_debug_print("mpu6050: dmp set orient callback failed.\n");
688 (void)mpu6050_deinit(&gs_handle);
689
690 return 1;
691 }
692
693 /* set the default pedometer walk time */
695 if (res != 0)
696 {
697 mpu6050_interface_debug_print("mpu6050: dmp set pedometer walk time failed.\n");
698 (void)mpu6050_deinit(&gs_handle);
699
700 return 1;
701 }
702
703 /* set the default pedometer step count */
705 if (res != 0)
706 {
707 mpu6050_interface_debug_print("mpu6050: dmp set pedometer step count failed.\n");
708 (void)mpu6050_deinit(&gs_handle);
709
710 return 1;
711 }
712
713 /* set the default shake reject timeout */
715 if (res != 0)
716 {
717 mpu6050_interface_debug_print("mpu6050: dmp set shake reject timeout failed.\n");
718 (void)mpu6050_deinit(&gs_handle);
719
720 return 1;
721 }
722
723 /* set the default shake reject time */
725 if (res != 0)
726 {
727 mpu6050_interface_debug_print("mpu6050: dmp set shake reject time failed.\n");
728 (void)mpu6050_deinit(&gs_handle);
729
730 return 1;
731 }
732
733 /* set the default shake reject thresh */
735 if (res != 0)
736 {
737 mpu6050_interface_debug_print("mpu6050: dmp set shake reject thresh failed.\n");
738 (void)mpu6050_deinit(&gs_handle);
739
740 return 1;
741 }
742
743 /* set the default tap time multi */
745 if (res != 0)
746 {
747 mpu6050_interface_debug_print("mpu6050: dmp set tap time multi failed.\n");
748 (void)mpu6050_deinit(&gs_handle);
749
750 return 1;
751 }
752
753 /* set the default tap time */
755 if (res != 0)
756 {
757 mpu6050_interface_debug_print("mpu6050: dmp set tap time failed.\n");
758 (void)mpu6050_deinit(&gs_handle);
759
760 return 1;
761 }
762
763 /* set the default min tap count */
765 if (res != 0)
766 {
767 mpu6050_interface_debug_print("mpu6050: dmp set min tap count failed.\n");
768 (void)mpu6050_deinit(&gs_handle);
769
770 return 1;
771 }
772
773 /* set the default tap thresh x */
775 if (res != 0)
776 {
777 mpu6050_interface_debug_print("mpu6050: dmp set tap thresh failed.\n");
778 (void)mpu6050_deinit(&gs_handle);
779
780 return 1;
781 }
782
783 /* set the default tap thresh y */
785 if (res != 0)
786 {
787 mpu6050_interface_debug_print("mpu6050: dmp set tap thresh failed.\n");
788 (void)mpu6050_deinit(&gs_handle);
789
790 return 1;
791 }
792
793 /* set the default tap thresh z */
795 if (res != 0)
796 {
797 mpu6050_interface_debug_print("mpu6050: dmp set tap thresh failed.\n");
798 (void)mpu6050_deinit(&gs_handle);
799
800 return 1;
801 }
802
803 /* dmp gyro accel raw offset convert */
804 res = mpu6050_dmp_gyro_accel_raw_offset_convert(&gs_handle, gyro_offset_raw, accel_offset_raw,
805 gyro_offset, accel_offset);
806 if (res != 0)
807 {
808 mpu6050_interface_debug_print("mpu6050: dmp gyro accel raw offset convert failed.\n");
809 (void)mpu6050_deinit(&gs_handle);
810
811 return 1;
812 }
813
814 /* dmp set accel bias */
815 res = mpu6050_dmp_set_accel_bias(&gs_handle, accel_offset);
816 if (res != 0)
817 {
818 mpu6050_interface_debug_print("mpu6050: dmp set accel bias failed.\n");
819 (void)mpu6050_deinit(&gs_handle);
820
821 return 1;
822 }
823
824 /* dmp set gyro bias */
825 res = mpu6050_dmp_set_gyro_bias(&gs_handle, gyro_offset);
826 if (res != 0)
827 {
828 mpu6050_interface_debug_print("mpu6050: dmp set gyro bias failed.\n");
829 (void)mpu6050_deinit(&gs_handle);
830
831 return 1;
832 }
833
834 /* enable the dmp */
835 res = mpu6050_dmp_set_enable(&gs_handle, MPU6050_BOOL_TRUE);
836 if (res != 0)
837 {
838 mpu6050_interface_debug_print("mpu6050: dmp set enable failed.\n");
839 (void)mpu6050_deinit(&gs_handle);
840
841 return 1;
842 }
843
844 /* force fifo reset */
845 res = mpu6050_force_fifo_reset(&gs_handle);
846 if (res != 0)
847 {
848 mpu6050_interface_debug_print("mpu6050: force fifo reset failed.\n");
849 (void)mpu6050_deinit(&gs_handle);
850
851 return 1;
852 }
853
854 return 0;
855}
856
866{
867 /* get the pedometer counter */
868 if (mpu6050_dmp_get_pedometer_step_count(&gs_handle, cnt) != 0)
869 {
870 return 1;
871 }
872
873 return 0;
874}
875
892uint8_t mpu6050_dmp_read_all(int16_t (*accel_raw)[3], float (*accel_g)[3],
893 int16_t (*gyro_raw)[3], float (*gyro_dps)[3],
894 int32_t (*quat)[4],
895 float *pitch, float *roll, float *yaw,
896 uint16_t *l
897 )
898{
899 /* dmp read */
900 if (mpu6050_dmp_read(&gs_handle, accel_raw, accel_g,
901 gyro_raw, gyro_dps, quat,
902 pitch, roll, yaw, l) != 0
903 )
904 {
905 return 1;
906 }
907
908 return 0;
909}
910
919{
920 /* deinit */
921 if (mpu6050_deinit(&gs_handle) != 0)
922 {
923 return 1;
924 }
925
926 return 0;
927}
driver mpu6050 dmp header file
uint8_t mpu6050_set_wake_up_frequency(mpu6050_handle_t *handle, mpu6050_wake_up_frequency_t frequency)
set the wake up frequency
uint8_t mpu6050_init(mpu6050_handle_t *handle)
initialize the chip
uint8_t mpu6050_set_accelerometer_range(mpu6050_handle_t *handle, mpu6050_accelerometer_range_t range)
set the accelerometer range
mpu6050_address_t
mpu6050 address enumeration definition
uint8_t mpu6050_set_standby_mode(mpu6050_handle_t *handle, mpu6050_source_t source, mpu6050_bool_t enable)
set source into standby mode
uint8_t mpu6050_motion_threshold_convert_to_register(mpu6050_handle_t *handle, float mg, uint8_t *reg)
convert the motion threshold to the register raw data
uint8_t mpu6050_self_test(mpu6050_handle_t *handle, int32_t gyro_offset_raw[3], int32_t accel_offset_raw[3])
run the self test
uint8_t mpu6050_set_motion_threshold(mpu6050_handle_t *handle, uint8_t threshold)
set the motion_threshold
uint8_t mpu6050_set_sample_rate_divider(mpu6050_handle_t *handle, uint8_t d)
set the sample rate divider
uint8_t mpu6050_set_motion_duration(mpu6050_handle_t *handle, uint8_t duration)
set the motion duration
uint8_t mpu6050_set_gyroscope_range(mpu6050_handle_t *handle, mpu6050_gyroscope_range_t range)
set the gyroscope range
uint8_t mpu6050_set_addr_pin(mpu6050_handle_t *handle, mpu6050_address_t addr_pin)
set the chip address pin
uint8_t mpu6050_set_interrupt_read_clear(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the interrupt reading clear
uint8_t mpu6050_set_fifo_enable(mpu6050_handle_t *handle, mpu6050_fifo_t fifo, mpu6050_bool_t enable)
enable or disable the fifo function
uint8_t mpu6050_set_interrupt(mpu6050_handle_t *handle, mpu6050_interrupt_t type, mpu6050_bool_t enable)
enable or disable the interrupt
uint8_t mpu6050_set_iic_bypass(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the iic bypass
uint8_t mpu6050_set_gyroscope_test(mpu6050_handle_t *handle, mpu6050_axis_t axis, mpu6050_bool_t enable)
set the gyroscope test
uint8_t mpu6050_set_cycle_wake_up(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the cycle wake up mode
uint8_t mpu6050_set_interrupt_pin_type(mpu6050_handle_t *handle, mpu6050_pin_type_t type)
set the interrupt pin type
uint8_t mpu6050_irq_handler(mpu6050_handle_t *handle)
irq handler
uint8_t mpu6050_set_iic_master(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the iic master mode
uint8_t mpu6050_force_fifo_reset(mpu6050_handle_t *handle)
force reset the fifo
uint8_t mpu6050_set_temperature_sensor(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the temperature sensor
uint8_t mpu6050_set_interrupt_latch(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the interrupt latch
uint8_t mpu6050_set_accelerometer_test(mpu6050_handle_t *handle, mpu6050_axis_t axis, mpu6050_bool_t enable)
set the accelerometer test
uint8_t mpu6050_set_extern_sync(mpu6050_handle_t *handle, mpu6050_extern_sync_t sync)
set the extern sync type
uint8_t mpu6050_set_sleep(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the sleep mode
struct mpu6050_handle_s mpu6050_handle_t
mpu6050 handle structure definition
uint8_t mpu6050_set_fifo(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable fifo
uint8_t mpu6050_set_interrupt_level(mpu6050_handle_t *handle, mpu6050_pin_level_t level)
set the interrupt level
uint8_t mpu6050_motion_duration_convert_to_register(mpu6050_handle_t *handle, uint8_t ms, uint8_t *reg)
convert the motion duration to the register raw data
uint8_t mpu6050_set_clock_source(mpu6050_handle_t *handle, mpu6050_clock_source_t clock_source)
set the chip clock source
uint8_t mpu6050_set_fsync_interrupt(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the fsync interrupt
uint8_t mpu6050_set_low_pass_filter(mpu6050_handle_t *handle, mpu6050_low_pass_filter_t filter)
set the low pass filter
uint8_t mpu6050_deinit(mpu6050_handle_t *handle)
close the chip
uint8_t mpu6050_set_fsync_interrupt_level(mpu6050_handle_t *handle, mpu6050_pin_level_t level)
set the fsync interrupt level
uint8_t mpu6050_set_force_accel_sample(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable force accel sample
@ MPU6050_SOURCE_ACC_Y
@ MPU6050_SOURCE_GYRO_Y
@ MPU6050_SOURCE_ACC_Z
@ MPU6050_SOURCE_ACC_X
@ MPU6050_SOURCE_GYRO_Z
@ MPU6050_SOURCE_GYRO_X
@ MPU6050_FIFO_XG
@ MPU6050_FIFO_ACCEL
@ MPU6050_FIFO_TEMP
@ MPU6050_FIFO_ZG
@ MPU6050_FIFO_YG
@ MPU6050_INTERRUPT_DMP
@ MPU6050_INTERRUPT_I2C_MAST
@ MPU6050_INTERRUPT_DATA_READY
@ MPU6050_INTERRUPT_FIFO_OVERFLOW
@ MPU6050_INTERRUPT_MOTION
@ MPU6050_BOOL_TRUE
@ MPU6050_BOOL_FALSE
@ MPU6050_AXIS_X
@ MPU6050_AXIS_Z
@ MPU6050_AXIS_Y
uint8_t mpu6050_dmp_set_tap_thresh(mpu6050_handle_t *handle, mpu6050_axis_t axis, uint16_t mg_ms)
dmp set the tap thresh
uint8_t mpu6050_dmp_set_gyro_bias(mpu6050_handle_t *handle, int32_t bias[3])
dmp set the gyro bias
uint8_t mpu6050_dmp_set_orientation(mpu6050_handle_t *handle, int8_t mat[9])
dmp set the orientation
uint8_t mpu6050_dmp_set_enable(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the dmp
uint8_t mpu6050_dmp_load_firmware(mpu6050_handle_t *handle)
load the dmp firmware
uint8_t mpu6050_dmp_set_tap_callback(mpu6050_handle_t *handle, void(*callback)(uint8_t count, uint8_t direction))
dmp set the tap callback
uint8_t mpu6050_dmp_set_orient_callback(mpu6050_handle_t *handle, void(*callback)(uint8_t orientation))
dmp set the orient callback
uint8_t mpu6050_dmp_set_shake_reject_timeout(mpu6050_handle_t *handle, uint16_t ms)
dmp set the shake reject timeout
uint8_t mpu6050_dmp_read(mpu6050_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 mpu6050_dmp_set_tap_time_multi(mpu6050_handle_t *handle, uint16_t ms)
dmp set max time between taps to register as a multi tap
uint8_t mpu6050_dmp_set_accel_bias(mpu6050_handle_t *handle, int32_t bias[3])
dmp set the accel bias
uint8_t mpu6050_dmp_get_pedometer_step_count(mpu6050_handle_t *handle, uint32_t *count)
dmp get the pedometer step count
uint8_t mpu6050_dmp_set_pedometer_step_count(mpu6050_handle_t *handle, uint32_t count)
dmp set the pedometer step count
uint8_t mpu6050_dmp_set_feature(mpu6050_handle_t *handle, uint16_t mask)
dmp enable or disable the dmp feature
uint8_t mpu6050_dmp_gyro_accel_raw_offset_convert(mpu6050_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 mpu6050_dmp_set_shake_reject_thresh(mpu6050_handle_t *handle, uint16_t dps)
dmp set the shake reject thresh
uint8_t mpu6050_dmp_set_fifo_rate(mpu6050_handle_t *handle, uint16_t rate)
dmp set the fifo rate
uint8_t mpu6050_dmp_set_tap_axes(mpu6050_handle_t *handle, mpu6050_axis_t axis, mpu6050_bool_t enable)
dmp enable or disable the tap axes
uint8_t mpu6050_dmp_set_shake_reject_time(mpu6050_handle_t *handle, uint16_t ms)
dmp set the shake reject time
uint8_t mpu6050_dmp_set_min_tap_count(mpu6050_handle_t *handle, uint8_t cnt)
dmp set the min tap count
uint8_t mpu6050_dmp_set_tap_time(mpu6050_handle_t *handle, uint16_t ms)
dmp set the tap time
uint8_t mpu6050_dmp_set_interrupt_mode(mpu6050_handle_t *handle, mpu6050_dmp_interrupt_mode_t mode)
dmp set the interrupt mode
uint8_t mpu6050_dmp_set_pedometer_walk_time(mpu6050_handle_t *handle, uint32_t ms)
dmp set the pedometer walk time
@ MPU6050_DMP_FEATURE_PEDOMETER
@ MPU6050_DMP_FEATURE_TAP
@ MPU6050_DMP_FEATURE_ORIENT
@ MPU6050_DMP_FEATURE_6X_QUAT
@ MPU6050_DMP_FEATURE_GYRO_CAL
@ MPU6050_DMP_FEATURE_SEND_RAW_ACCEL
@ MPU6050_DMP_FEATURE_SEND_CAL_GYRO
#define MPU6050_DMP_DEFAULT_IIC_MASTER
#define MPU6050_DMP_DEFAULT_RATE
#define MPU6050_DMP_DEFAULT_INTERRUPT_PIN_TYPE
uint8_t mpu6050_dmp_init(mpu6050_address_t addr_pin, void(*receive_callback)(uint8_t type), void(*tap_callback)(uint8_t count, uint8_t direction), void(*orient_callback)(uint8_t orientation))
dmp example init
#define MPU6050_DMP_DEFAULT_IIC_BYPASS
uint8_t mpu6050_dmp_deinit(void)
dmp example deinit
#define MPU6050_DMP_DEFAULT_INTERRUPT_READ_CLEAR
#define MPU6050_DMP_DEFAULT_TAP_X_THRESH
#define MPU6050_DMP_DEFAULT_WAKE_UP_FREQUENCY
#define MPU6050_DMP_DEFAULT_GYROSCOPE_RANGE
#define MPU6050_DMP_DEFAULT_TAP_Y_THRESH
#define MPU6050_DMP_DEFAULT_TAP_TIME_MULTI
#define MPU6050_DMP_DEFAULT_ACCELEROMETER_RANGE
#define MPU6050_DMP_DEFAULT_CYCLE_WAKE_UP
#define MPU6050_DMP_DEFAULT_INTERRUPT_LATCH
uint8_t mpu6050_dmp_get_pedometer_counter(uint32_t *cnt)
dmp example get pedometer counter
#define MPU6050_DMP_DEFAULT_SHAKE_REJECT_TIMEOUT
#define MPU6050_DMP_DEFAULT_CLOCK_SOURCE
mpu6050 dmp example default definition
#define MPU6050_DMP_DEFAULT_TAP_Z_THRESH
#define MPU6050_DMP_DEFAULT_INTERRUPT_MODE
#define MPU6050_DMP_DEFAULT_SHAKE_REJECT_TIME
#define MPU6050_DMP_DEFAULT_INTERRUPT_DATA_READY
#define MPU6050_DMP_DEFAULT_SHAKE_REJECT_THRESH
uint8_t mpu6050_dmp_read_all(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 example read
#define MPU6050_DMP_DEFAULT_LOW_PASS_FILTER
#define MPU6050_DMP_DEFAULT_EXTERN_SYNC
#define MPU6050_DMP_DEFAULT_INTERRUPT_DMP
#define MPU6050_DMP_DEFAULT_PEOMETER_STEP_COUNT
#define MPU6050_DMP_DEFAULT_MOTION_DURATION
#define MPU6050_DMP_DEFAULT_MOTION_THRESHOLD
#define MPU6050_DMP_DEFAULT_PEOMETER_WALK_TIME
#define MPU6050_DMP_DEFAULT_INTERRUPT_MOTION
#define MPU6050_DMP_DEFAULT_FSYNC_INTERRUPT
#define MPU6050_DMP_DEFAULT_INTERRUPT_FIFO_OVERFLOW
#define MPU6050_DMP_DEFAULT_TAP_TIME
#define MPU6050_DMP_DEFAULT_INTERRUPT_I2C_MAST
#define MPU6050_DMP_DEFAULT_MIN_TAP_COUNT
#define MPU6050_DMP_DEFAULT_FSYNC_INTERRUPT_LEVEL
uint8_t mpu6050_dmp_irq_handler(void)
dmp irq
#define MPU6050_DMP_DEFAULT_INTERRUPT_PIN_LEVEL
uint8_t mpu6050_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mpu6050_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void mpu6050_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mpu6050_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t mpu6050_interface_iic_init(void)
interface iic bus init
void mpu6050_interface_delay_ms(uint32_t ms)
interface delay ms