InvenSense Motion Driver v5.1.2 ported

Dependents:   Sensorv2

Revision:
0:4dd021344a6b
Child:
3:8ac73f9099ab
diff -r 000000000000 -r 4dd021344a6b inv_mpu_dmp_motion_driver.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inv_mpu_dmp_motion_driver.h	Tue Jun 03 07:54:12 2014 +0000
@@ -0,0 +1,100 @@
+#ifndef _INV_MPU_DMP_MOTION_DRIVER_H_
+#define _INV_MPU_DMP_MOTION_DRIVER_H_
+
+#define TAP_X               (0x01)
+#define TAP_Y               (0x02)
+#define TAP_Z               (0x04)
+#define TAP_XYZ             (0x07)
+
+#define TAP_X_UP            (0x01)
+#define TAP_X_DOWN          (0x02)
+#define TAP_Y_UP            (0x03)
+#define TAP_Y_DOWN          (0x04)
+#define TAP_Z_UP            (0x05)
+#define TAP_Z_DOWN          (0x06)
+
+#define ANDROID_ORIENT_PORTRAIT             (0x00)
+#define ANDROID_ORIENT_LANDSCAPE            (0x01)
+#define ANDROID_ORIENT_REVERSE_PORTRAIT     (0x02)
+#define ANDROID_ORIENT_REVERSE_LANDSCAPE    (0x03)
+
+#define DMP_INT_GESTURE     (0x01)
+#define DMP_INT_CONTINUOUS  (0x02)
+
+#define DMP_FEATURE_TAP             (0x001)
+#define DMP_FEATURE_ANDROID_ORIENT  (0x002)
+#define DMP_FEATURE_LP_QUAT         (0x004)
+#define DMP_FEATURE_PEDOMETER       (0x008)
+#define DMP_FEATURE_6X_LP_QUAT      (0x010)
+#define DMP_FEATURE_GYRO_CAL        (0x020)
+#define DMP_FEATURE_SEND_RAW_ACCEL  (0x040)
+#define DMP_FEATURE_SEND_RAW_GYRO   (0x080)
+#define DMP_FEATURE_SEND_CAL_GYRO   (0x100)
+
+#define INV_WXYZ_QUAT       (0x100)
+
+#include "inv_mpu.h"
+#include "helper_3dmath.h"
+
+class DMP_Motion_Driver : public InvMpu
+{
+    public:
+    DMP_Motion_Driver();
+    
+    unsigned short inv_orientation_matrix_to_scalar(const signed char *mtx);
+    int dmp_get_packet_length();
+    int dmpGetGravity(VectorFloat *v, Quaternion *q) ;
+    int dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity) ;
+    
+//    static
+    int decode_gesture(unsigned char *gesture);
+    
+    /* Set up functions. */
+    int dmp_load_motion_driver_firmware(void);
+    int dmp_set_fifo_rate(unsigned short rate);
+    int dmp_get_fifo_rate(unsigned short *rate);
+    int dmp_enable_feature(unsigned short mask);
+    int dmp_get_enabled_features(unsigned short *mask);
+    int dmp_set_interrupt_mode(unsigned char mode);
+    int dmp_set_orientation(unsigned short orient);
+    int dmp_set_gyro_bias(long *bias);
+    int dmp_set_accel_bias(long *bias);
+    
+    /* Tap functions. */
+    int dmp_register_tap_cb(void (*func)(unsigned char, unsigned char));
+    int dmp_set_tap_thresh(unsigned char axis, unsigned short thresh);
+    int dmp_set_tap_axes(unsigned char axis);
+    int dmp_set_tap_count(unsigned char min_taps);
+    int dmp_set_tap_time(unsigned short time);
+    int dmp_set_tap_time_multi(unsigned short time);
+    int dmp_set_shake_reject_thresh(long sf, unsigned short thresh);
+    int dmp_set_shake_reject_time(unsigned short time);
+    int dmp_set_shake_reject_timeout(unsigned short time);
+    
+    /* Android orientation functions. */
+    int dmp_register_android_orient_cb(void (*func)(unsigned char));
+    
+    
+    /* Pedometer functions. */
+    int dmp_get_pedometer_step_count(unsigned long *count);
+    int dmp_set_pedometer_step_count(unsigned long count);
+    int dmp_get_pedometer_walk_time(unsigned long *time);
+    int dmp_set_pedometer_walk_time(unsigned long time);
+    
+    
+    /* Read function. This function should be called whenever the MPU interrupt is
+     * detected.
+     */
+    int dmp_read_fifo(short *gyro, short *accel, long *quat,
+        unsigned long *timestamp, short *sensors, unsigned char *more);
+        
+    private:
+    /* DMP gyro calibration functions. */
+    int dmp_enable_gyro_cal(unsigned char enable);
+    
+    /* LP quaternion functions. */
+    int dmp_enable_lp_quat(unsigned char enable);
+    int dmp_enable_6x_lp_quat(unsigned char enable);
+};
+
+#endif
\ No newline at end of file