| /* |
| $License: |
| Copyright 2011 InvenSense, Inc. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| $ |
| */ |
| /****************************************************************************** |
| * |
| * $Id: ml.h 5653 2011-06-16 21:06:55Z nroyer $ |
| * |
| *****************************************************************************/ |
| |
| /** |
| * @defgroup ML |
| * @brief The Motion Library processes gyroscopes and accelerometers to |
| * provide a physical model of the movement of the sensors. |
| * The results of this processing may be used to control objects |
| * within a user interface environment, detect gestures, track 3D |
| * movement for gaming applications, and analyze the blur created |
| * due to hand movement while taking a picture. |
| * |
| * @{ |
| * @file ml.h |
| * @brief Header file for the Motion Library. |
| **/ |
| |
| #ifndef INV_H |
| #define INV_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include "mltypes.h" |
| #include "mldmp.h" |
| #include "mlsl.h" |
| #include "mpu.h" |
| #ifdef INV_INCLUDE_LEGACY_HEADERS |
| #include "ml_legacy.h" |
| #endif |
| |
| /* ------------ */ |
| /* - Defines. - */ |
| /* ------------ */ |
| |
| /* - Module defines. - */ |
| |
| /*************************************************************************/ |
| /* Motion Library Vesion */ |
| /*************************************************************************/ |
| |
| #define INV_VERSION_MAJOR 4 |
| #define INV_VERSION_MINOR 0 |
| #define INV_VERSION_SUB_MINOR 0 |
| |
| #define INV_VERSION_MAJOR_STR "4" |
| #define INV_VERSION_MINOR_STR "0" |
| #define INV_VERSION_SUB_MINOR_STR "0" |
| |
| #define INV_VERSION_NONE "" |
| #define INV_VERSION_PROTOTYPE "ProtoA " |
| #define INV_VERSION_ENGINEERING "EngA " |
| #define INV_VERSION_PRE_ALPHA "Pre-Alpha " |
| #define INV_VERSION_ALPHA "Alpha " |
| #define INV_VERSION_BETA "Beta " |
| #define INV_VERSION_PRODUCTION "Production " |
| |
| #ifndef INV_VERSION_TYPE |
| #define INV_VERSION_TYPE INV_VERSION_NONE |
| #endif |
| |
| #define INV_VERSION "InvenSense MPL" " " \ |
| "v" INV_VERSION_MAJOR_STR "." INV_VERSION_MINOR_STR "." INV_VERSION_SUB_MINOR_STR " " \ |
| INV_VERSION_TYPE \ |
| __DATE__ " " __TIME__ |
| |
| /*************************************************************************/ |
| /* Motion processing engines */ |
| /*************************************************************************/ |
| #define INV_MOTION_DETECT (0x0004) |
| #define INV_BIAS_UPDATE (0x0008) |
| #define INV_GESTURE (0x0020) |
| #define INV_CONTROL (0x0040) |
| #define INV_ORIENTATION (0x0100) |
| #define INV_PEDOMETER (0x0200) |
| #define INV_BASIC (INV_MOTION_DETECT | INV_BIAS_UPDATE) |
| |
| /*************************************************************************/ |
| /* Data Source - Obsolete */ |
| /*************************************************************************/ |
| #define INV_DATA_FIFO (0x1) |
| #define INV_DATA_POLL (0x2) |
| |
| /*************************************************************************/ |
| /* Interrupt Source */ |
| /*************************************************************************/ |
| #define INV_INT_MOTION (0x01) |
| #define INV_INT_FIFO (0x02) |
| #define INV_INT_TAP (0x04) |
| #define INV_INT_ORIENTATION (0x08) |
| #define INV_INT_SHAKE_PITCH (0x10) |
| #define INV_INT_SHAKE_ROLL (0x20) |
| #define INV_INT_SHAKE_YAW (0x40) |
| |
| /*************************************************************************/ |
| /* Bias update functions */ |
| /*************************************************************************/ |
| #define INV_BIAS_FROM_NO_MOTION 0x0001 |
| #define INV_BIAS_FROM_GRAVITY 0x0002 |
| #define INV_BIAS_FROM_TEMPERATURE 0x0004 |
| #define INV_BIAS_FROM_LPF 0x0008 |
| #define INV_MAG_BIAS_FROM_MOTION 0x0010 |
| #define INV_MAG_BIAS_FROM_GYRO 0x0020 |
| #define INV_LEARN_BIAS_FROM_TEMPERATURE 0x0040 |
| #define INV_AUTO_RESET_MAG_BIAS 0x0080 |
| #define INV_REJECT_MAG_DISTURBANCE 0x0100 |
| #define INV_PROGRESSIVE_NO_MOTION 0x0200 |
| #define INV_BIAS_FROM_FAST_NO_MOTION 0x0400 |
| |
| /*************************************************************************/ |
| /* Euler angles and axis names */ |
| /*************************************************************************/ |
| #define INV_X_AXIS (0x01) |
| #define INV_Y_AXIS (0x02) |
| #define INV_Z_AXIS (0x04) |
| |
| #define INV_PITCH (INV_X_AXIS) |
| #define INV_ROLL (INV_Y_AXIS) |
| #define INV_YAW (INV_Z_AXIS) |
| |
| /*************************************************************************/ |
| /* Sensor types */ |
| /*************************************************************************/ |
| #define INV_GYROS 0x0001 |
| #define INV_ACCELS 0x0002 |
| |
| /*************************************************************************/ |
| /* Motion arrays */ |
| /*************************************************************************/ |
| #define INV_ROTATION_MATRIX 0x0003 |
| #define INV_QUATERNION 0x0004 |
| #define INV_EULER_ANGLES 0x0005 |
| #define INV_LINEAR_ACCELERATION 0x0006 |
| #define INV_LINEAR_ACCELERATION_WORLD 0x0007 |
| #define INV_GRAVITY 0x0008 |
| #define INV_ANGULAR_VELOCITY 0x0009 |
| |
| #define INV_GYRO_CALIBRATION_MATRIX 0x000B |
| #define INV_ACCEL_CALIBRATION_MATRIX 0x000C |
| #define INV_GYRO_BIAS 0x000D |
| #define INV_ACCEL_BIAS 0x000E |
| #define INV_GYRO_TEMP_SLOPE 0x000F |
| |
| #define INV_RAW_DATA 0x0011 |
| #define INV_DMP_TAP 0x0012 |
| #define INV_DMP_TAP2 0x0021 |
| |
| #define INV_EULER_ANGLES_X 0x0013 |
| #define INV_EULER_ANGLES_Y 0x0014 |
| #define INV_EULER_ANGLES_Z 0x0015 |
| |
| #define INV_BIAS_UNCERTAINTY 0x0016 |
| #define INV_DMP_PACKET_NUMBER 0x0017 |
| #define INV_FOOTER 0x0018 |
| |
| #define INV_CONTROL_DATA 0x0019 |
| |
| #define INV_MAGNETOMETER 0x001A |
| #define INV_PEDLBS 0x001B |
| #define INV_MAG_RAW_DATA 0x001C |
| #define INV_MAG_CALIBRATION_MATRIX 0x001D |
| #define INV_MAG_BIAS 0x001E |
| #define INV_HEADING 0x001F |
| |
| #define INV_MAG_BIAS_ERROR 0x0020 |
| |
| #define INV_PRESSURE 0x0021 |
| #define INV_LOCAL_FIELD 0x0022 |
| #define INV_MAG_SCALE 0x0023 |
| |
| #define INV_RELATIVE_QUATERNION 0x0024 |
| |
| #define SET_QUATERNION 0x0001 |
| #define SET_GYROS 0x0002 |
| #define SET_LINEAR_ACCELERATION 0x0004 |
| #define SET_GRAVITY 0x0008 |
| #define SET_ACCELS 0x0010 |
| #define SET_TAP 0x0020 |
| #define SET_PEDLBS 0x0040 |
| #define SET_LINEAR_ACCELERATION_WORLD 0x0080 |
| #define SET_CONTROL 0x0100 |
| #define SET_PACKET_NUMBER 0x4000 |
| #define SET_FOOTER 0x8000 |
| |
| /*************************************************************************/ |
| /* Integral reset options */ |
| /*************************************************************************/ |
| #define INV_NO_RESET 0x0000 |
| #define INV_RESET 0x0001 |
| |
| /*************************************************************************/ |
| /* Motion states */ |
| /*************************************************************************/ |
| #define INV_MOTION 0x0001 |
| #define INV_NO_MOTION 0x0002 |
| |
| /*************************************************************************/ |
| /* Orientation and Gesture states */ |
| /*************************************************************************/ |
| #define INV_STATE_IDLE (0) |
| #define INV_STATE_RUNNING (1) |
| |
| /*************************************************************************/ |
| /* Gyroscope Temperature Compensation bins */ |
| /*************************************************************************/ |
| #define BINS (25) |
| #define PTS_PER_BIN (5) |
| #define MIN_TEMP (-40) |
| #define MAX_TEMP (+85) |
| #define TEMP_PER_BIN ((MAX_TEMP - MIN_TEMP) / BINS) |
| |
| /*************************************************************************/ |
| /* Flags */ |
| /*************************************************************************/ |
| #define INV_RAW_DATA_READY 0x0001 |
| #define INV_PROCESSED_DATA_READY 0x0002 |
| |
| #define INV_GOT_GESTURE 0x0004 |
| |
| #define INV_MOTION_STATE_CHANGE 0x0006 |
| #define INV_COMPASS_OFFSET_VALID 0x0007 |
| |
| /*************************************************************************/ |
| /* General */ |
| /*************************************************************************/ |
| #define INV_NONE (0x0000) |
| #define INV_INVALID_FIFO_RATE (0xFFFF) |
| |
| /*************************************************************************/ |
| /* ML Params Structure Default Values */ |
| /*************************************************************************/ |
| #define INV_BIAS_UPDATE_FUNC_DEFAULT (INV_BIAS_FROM_NO_MOTION | INV_BIAS_FROM_GRAVITY) |
| #define INV_ORIENTATION_MASK_DEFAULT 0x3f |
| #define INV_PROCESSED_DATA_CALLBACK_DEFAULT 0 |
| #define INV_ORIENTATION_CALLBACK_DEFAULT 0 |
| #define INV_MOTION_CALLBACK_DEFAULT 0 |
| |
| /* ------------ */ |
| /* - Defines. - */ |
| /* ------------ */ |
| /* Priority for various features */ |
| #define INV_PRIORITY_BUS_ACCEL 100 |
| #define INV_PRIORITY_EXTERNAL_SLAVE_MAG 110 |
| #define INV_PRIORITY_FAST_NO_MOTION 120 |
| #define INV_PRIORITY_BIAS_NO_MOTION 125 |
| #define INV_PRIORITY_SET_GYRO_BIASES 150 |
| #define INV_PRIORITY_TEMP_COMP 175 |
| #define INV_PRIORITY_CONTROL 200 |
| #define INV_PRIORITY_EIS 300 |
| #define INV_PRIORITY_ORIENTATION 400 |
| #define INV_PRIORITY_PEDOMETER_FULLPOWER 500 |
| #define INV_PRIORITY_NAVIGATION_PEDOMETER 600 |
| #define INV_PRIORITY_GESTURE 700 |
| #define INV_PRIORITY_GLYPH 800 |
| |
| #define MAX_INTERRUPT_PROCESSES 5 |
| /* Number of quantized accel samples */ |
| #define INV_MAX_NUM_ACCEL_SAMPLES (8) |
| |
| #define PRECISION 10000.f |
| #define RANGE_FLOAT_TO_FIXEDPOINT(range, x) { \ |
| range.mantissa = (long)x; \ |
| range.fraction = (long)((float)(x-(long)x)*PRECISION); \ |
| } |
| #define RANGE_FIXEDPOINT_TO_FLOAT(range, x) { \ |
| x = (float)(range.mantissa); \ |
| x += ((float)range.fraction/PRECISION); \ |
| } |
| |
| /* --------------- */ |
| /* - Structures. - */ |
| /* --------------- */ |
| |
| struct inv_obj_t { |
| //Calibration parameters |
| /* Raw sensor orientation */ |
| long gyro_bias[3]; |
| long accel_bias[3]; |
| long compass_bias[3]; |
| |
| /* Cached values after orietnation is applied */ |
| long scaled_gyro_bias[3]; |
| long scaled_accel_bias[3]; |
| long scaled_compass_bias[3]; |
| |
| long compass_scale[3]; |
| long compass_test_bias[3]; |
| long compass_test_scale[3]; |
| long compass_asa[3]; |
| long compass_offsets[3]; |
| |
| long compass_bias_error[3]; |
| |
| long got_no_motion_bias; |
| long got_compass_bias; |
| long compass_state; |
| long large_field; |
| long acc_state; |
| |
| long factory_temp_comp; |
| long got_coarse_heading; |
| long gyro_temp_bias[3]; |
| long prog_no_motion_bias[3]; |
| |
| long accel_cal[9]; |
| // Deprecated, used gyro_orient |
| long gyro_cal[GYRO_NUM_AXES * GYRO_NUM_AXES]; |
| long gyro_orient[GYRO_NUM_AXES * GYRO_NUM_AXES]; |
| long accel_sens; |
| long compass_cal[9]; |
| long gyro_sens; |
| long gyro_sf; |
| long temp_slope[GYRO_NUM_AXES]; |
| long compass_sens; |
| long temp_offset[GYRO_NUM_AXES]; |
| |
| int cal_loaded_flag; |
| |
| /* temperature compensation */ |
| float x_gyro_coef[3]; |
| float y_gyro_coef[3]; |
| float z_gyro_coef[3]; |
| float x_gyro_temp_data[BINS][PTS_PER_BIN]; |
| float y_gyro_temp_data[BINS][PTS_PER_BIN]; |
| float z_gyro_temp_data[BINS][PTS_PER_BIN]; |
| float temp_data[BINS][PTS_PER_BIN]; |
| int temp_ptrs[BINS]; |
| long temp_valid_data[BINS]; |
| |
| long compass_correction[4]; |
| long compass_correction_relative[4]; |
| long compass_disturb_correction[4]; |
| long compass_correction_offset[4]; |
| long relative_quat[4]; |
| long local_field[3]; |
| long new_local_field; |
| long sync_grav_body[3]; |
| int gyro_bias_err; |
| |
| double compass_bias_ptr[9]; |
| double compass_bias_v[3]; |
| double compass_prev_m[36]; |
| double compass_prev_xty[6]; |
| |
| int compass_peaks[18]; |
| int all_sensors_no_motion; |
| |
| long init_compass_bias[3]; |
| |
| int got_init_compass_bias; |
| int resetting_compass; |
| |
| long ang_v_body[GYRO_NUM_AXES]; |
| unsigned char compass_raw_data[24]; /* Sensor data plus status etc */ |
| long compass_sensor_data[3]; /* Raw sensor data only */ |
| long compass_calibrated_data[3]; |
| long compass_test_calibrated_data[3]; |
| long pressure; |
| inv_error_t (*external_slave_callback)(struct inv_obj_t *); |
| int compass_accuracy; |
| int compass_overunder; |
| |
| unsigned short flags[8]; |
| unsigned short suspend; |
| |
| long no_motion_threshold; |
| unsigned long motion_duration; |
| |
| unsigned short motion_state; |
| |
| unsigned short data_mode; |
| unsigned short interrupt_sources; |
| |
| unsigned short bias_update_time; |
| short last_motion; |
| unsigned short bias_calc_time; |
| |
| unsigned char internal_motion_state; |
| long start_time; |
| |
| long accel_lpf_gain; |
| long accel_lpf[3]; |
| unsigned long poll_no_motion; |
| long no_motion_accel_threshold; |
| unsigned long no_motion_accel_time; |
| inv_error_t(*mode_change_func) (unsigned long, unsigned long); |
| }; |
| |
| typedef inv_error_t(*inv_obj_func) (struct inv_obj_t *); |
| |
| extern struct inv_obj_t inv_obj; |
| |
| /* --------------------- */ |
| /* - Params Structure. - */ |
| /* --------------------- */ |
| |
| struct inv_params_obj { |
| |
| unsigned short bias_mode; // A function or bitwise OR of functions that determine how the gyroscope bias will be automatically updated. |
| // Functions include INV_BIAS_FROM_NO_MOTION, INV_BIAS_FROM_GRAVITY, and INV_BIAS_FROM_TEMPERATURE. |
| // The engine INV_BIAS_UPDATE must be enabled for these algorithms to run. |
| |
| unsigned short orientation_mask; // Allows a user to register which orientations will trigger the user defined callback function. |
| // The orientations are INV_X_UP, INV_X_DOWN, INV_Y_UP, INV_Y_DOWN, INV_Z_UP, and INV_Z_DOWN. |
| // INV_ORIENTATION_ALL is equivalent to INV_X_UP | INV_X_DOWN | INV_Y_UP | INV_Y_DOWN | INV_Z_UP | INV_Z_DOWN. |
| |
| void (*fifo_processed_func) (void); // Callback function that triggers when all the processing has been finished by the motion processing engines. |
| |
| void (*orientation_cb_func) (unsigned short orient); // Callback function that will run when a change of orientation is detected. |
| // The new orientation. May be one of INV_X_UP, INV_X_DOWN, INV_Y_UP, INV_Y_DOWN, INV_Z_UP, or INV_Z_DOWN. |
| |
| void (*motion_cb_func) (unsigned short motion_state); // Callback function that will run when a change of motion state is detected. |
| // The new motion state. May be one of INV_MOTION, or INV_NO_MOTION. |
| |
| unsigned char state; |
| |
| }; |
| |
| extern struct inv_params_obj inv_params_obj; |
| /* --------------------- */ |
| /* - Function p-types. - */ |
| /* --------------------- */ |
| |
| inv_error_t inv_serial_start(char const *port); |
| inv_error_t inv_serial_stop(void); |
| inv_error_t inv_set_mpu_sensors(unsigned long sensors); |
| void *inv_get_serial_handle(void); |
| |
| /*API for handling the buffer */ |
| inv_error_t inv_update_data(void); |
| |
| /*API for handling polling */ |
| int inv_check_flag(int flag); |
| |
| /*API for setting bias update function */ |
| inv_error_t inv_set_bias_update(unsigned short biasFunction); |
| |
| #if defined CONFIG_MPU_SENSORS_MPU6050A2 || \ |
| defined CONFIG_MPU_SENSORS_MPU6050B1 |
| inv_error_t inv_turn_on_bias_from_no_motion(void); |
| inv_error_t inv_turn_off_bias_from_no_motion(void); |
| inv_error_t inv_set_mpu_6050_config(void); |
| #endif |
| |
| /* Legacy functions for handling augmented data*/ |
| inv_error_t inv_get_array(int dataSet, long *data); |
| inv_error_t inv_get_float_array(int dataSet, float *data); |
| inv_error_t inv_set_array(int dataSet, long *data); |
| inv_error_t inv_set_float_array(int dataSet, float *data); |
| /* Individual functions for augmented data, per specific dataset */ |
| |
| |
| inv_error_t inv_get_gyro(long *data); |
| inv_error_t inv_get_accel(long *data); |
| inv_error_t inv_get_temperature(long *data); |
| inv_error_t inv_get_temperature_raw(short *data); |
| inv_error_t inv_get_rot_mat(long *data); |
| inv_error_t inv_get_quaternion(long *data); |
| inv_error_t inv_get_linear_accel(long *data); |
| inv_error_t inv_get_linear_accel_in_world(long *data); |
| inv_error_t inv_get_gravity(long *data); |
| inv_error_t inv_get_angular_velocity(long *data); |
| inv_error_t inv_get_euler_angles(long *data); |
| inv_error_t inv_get_euler_angles_x(long *data); |
| inv_error_t inv_get_euler_angles_y(long *data); |
| inv_error_t inv_get_euler_angles_z(long *data); |
| inv_error_t inv_get_gyro_temp_slope(long *data); |
| inv_error_t inv_get_gyro_bias(long *data); |
| inv_error_t inv_get_accel_bias(long *data); |
| inv_error_t inv_get_mag_bias(long *data); |
| inv_error_t inv_get_gyro_and_accel_sensor(long *data); |
| inv_error_t inv_get_mag_raw_data(long *data); |
| inv_error_t inv_get_magnetometer(long *data); |
| inv_error_t inv_get_pressure(long *data); |
| inv_error_t inv_get_heading(long *data); |
| inv_error_t inv_get_gyro_cal_matrix(long *data); |
| inv_error_t inv_get_accel_cal_matrix(long *data); |
| inv_error_t inv_get_mag_cal_matrix(long *data); |
| inv_error_t inv_get_mag_bias_error(long *data); |
| inv_error_t inv_get_mag_scale(long *data); |
| inv_error_t inv_get_local_field(long *data); |
| inv_error_t inv_get_relative_quaternion(long *data); |
| inv_error_t inv_get_gyro_float(float *data); |
| inv_error_t inv_get_accel_float(float *data); |
| inv_error_t inv_get_temperature_float(float *data); |
| inv_error_t inv_get_rot_mat_float(float *data); |
| inv_error_t inv_get_quaternion_float(float *data); |
| inv_error_t inv_get_linear_accel_float(float *data); |
| inv_error_t inv_get_linear_accel_in_world_float(float *data); |
| inv_error_t inv_get_gravity_float(float *data); |
| inv_error_t inv_get_angular_velocity_float(float *data); |
| inv_error_t inv_get_euler_angles_float(float *data); |
| inv_error_t inv_get_euler_angles_x_float(float *data); |
| inv_error_t inv_get_euler_angles_y_float(float *data); |
| inv_error_t inv_get_euler_angles_z_float(float *data); |
| inv_error_t inv_get_gyro_temp_slope_float(float *data); |
| inv_error_t inv_get_gyro_bias_float(float *data); |
| inv_error_t inv_get_accel_bias_float(float *data); |
| inv_error_t inv_get_mag_bias_float(float *data); |
| inv_error_t inv_get_gyro_and_accel_sensor_float(float *data); |
| inv_error_t inv_get_mag_raw_data_float(float *data); |
| inv_error_t inv_get_magnetometer_float(float *data); |
| inv_error_t inv_get_pressure_float(float *data); |
| inv_error_t inv_get_heading_float(float *data); |
| inv_error_t inv_get_gyro_cal_matrix_float(float *data); |
| inv_error_t inv_get_accel_cal_matrix_float(float *data); |
| inv_error_t inv_get_mag_cal_matrix_float(float *data); |
| inv_error_t inv_get_mag_bias_error_float(float *data); |
| inv_error_t inv_get_mag_scale_float(float *data); |
| inv_error_t inv_get_local_field_float(float *data); |
| inv_error_t inv_get_relative_quaternion_float(float *data); |
| inv_error_t inv_get_compass_accuracy(int *accuracy); |
| inv_error_t inv_set_gyro_bias(long *data); |
| inv_error_t inv_set_accel_bias(long *data); |
| inv_error_t inv_set_mag_bias(long *data); |
| inv_error_t inv_set_gyro_temp_slope(long *data); |
| inv_error_t inv_set_local_field(long *data); |
| inv_error_t inv_set_mag_scale(long *data); |
| inv_error_t inv_set_gyro_temp_slope_float(float *data); |
| inv_error_t inv_set_gyro_bias_float(float *data); |
| inv_error_t inv_set_accel_bias_float(float *data); |
| inv_error_t inv_set_mag_bias_float(float *data); |
| inv_error_t inv_set_local_field_float(float *data); |
| inv_error_t inv_set_mag_scale_float(float *data); |
| |
| inv_error_t inv_apply_endian_accel(void); |
| inv_error_t inv_apply_calibration(void); |
| inv_error_t inv_set_gyro_calibration(float range, signed char *orientation); |
| inv_error_t inv_set_accel_calibration(float range, |
| signed char *orientation); |
| inv_error_t inv_set_compass_calibration(float range, |
| signed char *orientation); |
| |
| /*API for detecting change of state */ |
| inv_error_t |
| inv_set_motion_callback(void (*func) (unsigned short motion_state)); |
| int inv_get_motion_state(void); |
| |
| /*API for getting ML version. */ |
| inv_error_t inv_get_version(unsigned char **version); |
| |
| inv_error_t inv_set_motion_interrupt(unsigned char on); |
| inv_error_t inv_set_fifo_interrupt(unsigned char on); |
| |
| int inv_get_interrupts(void); |
| |
| /* Simulated DMP */ |
| int inv_get_gyro_present(void); |
| |
| inv_error_t inv_set_no_motion_time(float time); |
| inv_error_t inv_set_no_motion_thresh(float thresh); |
| inv_error_t inv_set_no_motion_threshAccel(long thresh); |
| inv_error_t inv_reset_motion(void); |
| |
| inv_error_t inv_update_bias(void); |
| inv_error_t inv_set_dead_zone(void); |
| void inv_start_bias_calc(void); |
| void inv_stop_bias_calc(void); |
| |
| // Private functions shared accross modules |
| void inv_init_ml(void); |
| |
| inv_error_t inv_register_dmp_interupt_cb(inv_obj_func func); |
| inv_error_t inv_unregister_dmp_interupt_cb(inv_obj_func func); |
| void inv_run_dmp_interupt_cb(void); |
| void inv_set_mode_change(inv_error_t(*mode_change_func) |
| (unsigned long, unsigned long)); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #endif // INV_H |
| /** |
| * @} |
| */ |