1c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* 2c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro $License: 3c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved. 4c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro See included License.txt for License information. 5c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro $ 6c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 7c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "mltypes.h" 8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef INV_RESULTS_HOLDER_H__ 10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_RESULTS_HOLDER_H__ 11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __cplusplus 13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroextern "C" { 14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_MOTION 0x0001 17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_NO_MOTION 0x0002 18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /**************************************************************************/ 22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* The value of inv_get_gyro_sum_of_sqr is scaled such the (1 dps)^2 = */ 23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* 2^GYRO_MAG_SQR_SHIFT. This number must be >=0 and even. */ 24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* The value of inv_accel_sum_of_sqr is scaled such that (1g)^2 = */ 25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* 2^ACC_MAG_SQR_SHIFT */ 26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /**************************************************************************/ 27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define ACC_MAG_SQR_SHIFT 16 28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroenum compass_local_field_e { 30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // status for user input earth magnetic local field 31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOCAL_FILED_NOT_SET_BY_USER = 0, 32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOCAL_FILED_SET_BY_USER = 1, 33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // status for mpl calibrated based magnetical field 35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOCAL_FILED_NOT_SET_BY_USER_BUT_SET_BY_MPL = 2, 36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOCAL_FIELD_SET_BUT_NOT_MATCH_WITH_MPL = 3, 37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOCAL_FIELD_SET_MATCH_WITH_MPL = 4, 38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct local_field_t { 41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro float intensity; // radius 42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro float inclination; // dip angle angle degree 43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro float declination; // yaw deviation angle from true north, eastward as positive 44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro enum compass_local_field_e mpl_match_status; 45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// earth magnetic field access API 48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroenum compass_local_field_e inv_get_local_field_status(void); 49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_local_field_status(enum compass_local_field_e status); 50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_earth_magnetic_local_field_parameter(struct local_field_t *parameters); 52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_earth_magnetic_local_field_parameter(struct local_field_t *parameters); 53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// mpl calibrated magnetic field access API 55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroenum compass_local_field_e inv_get_mpl_mag_field_status(void); 56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_mpl_mag_field_status(enum compass_local_field_e status); 57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_set_mpl_magnetic_local_field_parameter(struct local_field_t *parameters); 59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_mpl_magnetic_local_field_parameter(struct local_field_t *parameters); 60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// quaternion store API 62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_store_gaming_quaternion(const long *quat, inv_time_t timestamp); 63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_store_accel_quaternion(const long *quat, inv_time_t timestamp); 64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_store_nav_quaternion(const float *quat, inv_time_t timestamp); 65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_store_game_quaternion(const float *quat, inv_time_t timestamp); 66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_store_geomag_quaternion(const float *quat, inv_time_t timestamp); 67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// States 69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define SF_NORMAL 0 70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define SF_UNCALIBRATED 1 71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define SF_STARTUP_SETTLE 2 72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define SF_FAST_SETTLE 3 73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define SF_DISTURBANCE 4 74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define SF_SLOW_SETTLE 5 75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// These 2 status bits are used to control when the 9 axis quaternion is updated 77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_COMPASS_CORRECTION_SET 1 78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_6_AXIS_QUAT_SET 2 79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_GEOMAGNETIC_CORRECTION_SET 4 80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_acc_state(); 82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_acc_state(int state); 83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_motion_state(unsigned int *cntr); 84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_motion_state(unsigned char state); 85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_gravity(long *data); 86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_gravity_6x(long *data); 87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_6axis_quaternion(long *data, inv_time_t *timestamp); 88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_quaternion(long *data); 89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_quaternion_float(float *data); 90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_6axis_quaternion_float(float *data, inv_time_t *timestamp); 91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_geomagnetic_quaternion_float(float *data, inv_time_t *timestamp); 92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef WIN32 93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_last_quaternion(long *data); 94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_set_last_quaternion(long *data); 95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_quaternion_set(long *data, int *accuracy, inv_time_t *timestamp); 97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_accel_quaternion(long *data); 98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_geomagnetic_quaternion(long *data, inv_time_t *timestamp); 99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_geomagnetic_compass_correction(const long *data, inv_time_t timestamp); 100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_geomagnetic_compass_correction(long *data, inv_time_t *timestamp); 101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_result_holder_status(long *rh_status); 102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_set_result_holder_status(long rh_status); 103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_quaternion_validity(int *value); 104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_set_quaternion_validity(int value); 105c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 106c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// set magnetic field by location 107c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_set_local_magnetic_field(float intensity, float inclination, float declination); 108c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_enable_results_holder(); 110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_init_results_holder(void); 111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* Magnetic Field Parameters*/ 113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_mag_scale(const long *data); 114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_mag_scale(long *data); 115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_correction(const long *data, inv_time_t timestamp); 116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_correction(long *data, inv_time_t *timestamp); 117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_got_compass_bias(); 118c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_bias_found(int state); 119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_large_mag_field(); 120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_large_mag_field(int state); 121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_state(int state); 122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_compass_state(); 123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_bias_error(const long *bias_error); 124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_bias_error(long *bias_error); 125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_linear_accel(long *data); 126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_accel(long *data); 127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_accel_float(float *data); 128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_gyro_float(float *data); 129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_linear_accel_float(float *data); 130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_heading_confidence_interval(float ci); 131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarofloat inv_get_heading_confidence_interval(void); 132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_accel_compass_confidence_interval(float ci); 134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarofloat inv_get_accel_compass_confidence_interval(void); 135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_got_accel_bias(); 137c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_accel_bias_found(int state); 138c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __cplusplus 141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 144c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif // INV_RESULTS_HOLDER_H__ 145