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