InvenSense Motion Driver v5.1.2 ported
Diff: inv_mpu_dmp_motion_driver.h
- Revision:
- 0:4dd021344a6b
- Child:
- 3:8ac73f9099ab
--- /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