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#ifndef INV_DATA_BUILDER_H__ 8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DATA_BUILDER_H__ 9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdio.h> 11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "mltypes.h" 12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __cplusplus 14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroextern "C" { 15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// Uncomment this flag to enable playback debug and record or playback scenarios 18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro//#define INV_PLAYBACK_DBG 19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** This is a new sample of accel data */ 21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_ACCEL_NEW 1 22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** This is a new sample of gyro data */ 23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_GYRO_NEW 2 24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** This is a new sample of compass data */ 25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_MAG_NEW 4 26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** This is a new sample of temperature data */ 27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_TEMP_NEW 8 28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** This is a new sample of quaternion data */ 29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_QUAT_NEW 16 30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** This is a new sample of pressure data */ 31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRESSURE_NEW 32 32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if the data is contiguous. Typically not set if a sample was skipped */ 34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_CONTIGUOUS 16 35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if the calibrated data has been solved for */ 36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_CALIBRATED 32 37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** INV_NEW_DATA set for a new set of data, cleared if not available. */ 38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_NEW_DATA 64 39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if raw data exists */ 40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_RAW_DATA 128 41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if the sensor is on */ 42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_SENSOR_ON 256 43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if quaternion has bias correction applied */ 44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_BIAS_APPLIED 512 45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if quaternion is 6-axis from DMP */ 46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_QUAT_6AXIS 1024 47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if quaternion is 9 axis from DMP */ 48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_QUAT_9AXIS 2048 49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if quaternion is 3-axis from DMP */ 50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_QUAT_3AXIS 4096 51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if DMP has applied bias */ 52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_BIAS_APPLIED 8192 53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Set if quaternion is 3 elements (android only) */ 54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_QUAT_3ELEMENT 16384 55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_MOTION_NO_MOTION 100 57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_GYRO_TC 150 58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_QUATERNION_GYRO_ACCEL 200 59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_QUATERNION_NO_GYRO 250 60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_MAGNETIC_DISTURBANCE 300 61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_HEADING_FROM_GYRO 350 62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_COMPASS_BIAS_W_GYRO 375 63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_COMPASS_VECTOR_CAL 400 64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_COMPASS_ADV_BIAS 500 65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_9_AXIS_FUSION 600 66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_9_AXIS_FUSION_LIGHT 650 67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_QUATERNION_ADJUST_9_AXIS 700 68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_QUATERNION_ACCURACY 750 69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_RESULTS_HOLDER 800 70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_INUSE_AUTO_CALIBRATION 850 71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_HAL_OUTPUTS 900 72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_GLYPH 950 73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_SHAKE 975 74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_PRIORITY_SM 1000 75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct inv_single_sensor_t { 77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** Orientation Descriptor. Describes how to go from the mounting frame to the body frame when 78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * the rotation matrix could be thought of only having elements of 0,1,-1. 79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * 2 bits are used to describe the column of the 1 or -1 and the 3rd bit is used for the sign. 80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Bit 8 is sign of +/- 1 in third row. Bit 6-7 is column of +/-1 in third row. 81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Bit 5 is sign of +/- 1 in second row. Bit 3-4 is column of +/-1 in second row. 82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Bit 2 is sign of +/- 1 in first row. Bit 0-1 is column of +/-1 in first row. 83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int orientation; 85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** The raw data in raw data units in the mounting frame */ 86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro short raw[3]; 87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** Raw data in body frame */ 88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long raw_scaled[3]; 89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** Calibrated data */ 90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long calibrated[3]; 91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long sensitivity; 92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** Sample rate in microseconds */ 93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long sample_rate_us; 94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long sample_rate_ms; 95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** INV_CONTIGUOUS is set for contiguous data. Will not be set if there was a sample 96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * skipped due to power savings turning off this sensor. 97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * INV_NEW_DATA set for a new set of data, cleared if not available. 98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * INV_CALIBRATED_SET if calibrated data has been solved for */ 99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int status; 100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** 0 to 3 for how well sensor data and biases are known. 3 is most accurate. */ 101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accuracy; 102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro inv_time_t timestamp; 103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro inv_time_t timestamp_prev; 104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** Bandwidth in Hz */ 105c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int bandwidth; 106c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 107c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 108c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct inv_quat_sensor_t { 109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long raw[4]; 110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** INV_CONTIGUOUS is set for contiguous data. Will not be set if there was a sample 111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * skipped due to power savings turning off this sensor. 112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * INV_NEW_DATA set for a new set of data, cleared if not available. 113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * INV_CALIBRATED_SET if calibrated data has been solved for */ 114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int status; 115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro inv_time_t timestamp; 116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro inv_time_t timestamp_prev; 117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long sample_rate_us; 118c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long sample_rate_ms; 119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct inv_soft_iron_t { 122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long raw[3]; 123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long trans[3]; 124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long matrix_d[9]; // Q30 format fixed point. The dynamic range is (-2.0 to 2.0); 125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro float matrix_f[9]; 126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enable; 128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct inv_sensor_cal_t { 131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct inv_single_sensor_t gyro; 132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct inv_single_sensor_t accel; 133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct inv_single_sensor_t compass; 134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct inv_single_sensor_t temp; 135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct inv_quat_sensor_t quat; 136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct inv_single_sensor_t pressure; 137c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct inv_soft_iron_t soft_iron; 138c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** Combinations of INV_GYRO_NEW, INV_ACCEL_NEW, INV_MAG_NEW to indicate 139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * which data is a new sample as these data points may have different sample rates. 140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int status; 142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 144c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// Useful for debug record and playback 145c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarotypedef enum { 146c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro RD_NO_DEBUG, 147c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro RD_RECORD, 148c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro RD_PLAYBACK 149c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} rd_dbg_mode; 150c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 151c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarotypedef enum { 152c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_GYRO, 153c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_ACCEL, 154c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_COMPASS, 155c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_TEMPERATURE, 156c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_EXECUTE, 157c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_A_ORIENT, 158c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_G_ORIENT, 159c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_C_ORIENT, 160c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_A_SAMPLE_RATE, 161c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_C_SAMPLE_RATE, 162c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_G_SAMPLE_RATE, 163c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_GYRO_OFF, 164c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_ACCEL_OFF, 165c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_COMPASS_OFF, 166c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_Q_SAMPLE_RATE, 167c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_QUAT, 168c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PLAYBACK_DBG_TYPE_QUAT_OFF 169c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} inv_rd_dbg_states; 170c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 171c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Change this key if the definition of the struct inv_db_save_t changes. 172c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro Previous keys: 53394, 53395, 53396 */ 173c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DB_SAVE_KEY (53397) 174c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 175c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DB_SAVE_MPL_KEY (50001) 176c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DB_SAVE_ACCEL_MPL_KEY (50002) 177c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 178c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct inv_db_save_t { 179c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** compass Bias in chip frame, hardware units scaled by 2^16. */ 180c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long compass_bias[3]; 181c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** gyro factory bias in chip frame, hardware units scaled by 2^16, 182c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro +/- 2000 dps full scale. */ 183c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long factory_gyro_bias[3]; 184c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** accel factory bias in chip frame, hardware units scaled by 2^16, 185c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro +/- 2 gee full scale. */ 186c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long factory_accel_bias[3]; 187c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** temperature when factory_gyro_bias was stored. */ 188c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long gyro_temp; 189c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** flag to indicate temperature compensation that biases where stored. */ 190c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_bias_tc_set; 191c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** temperature when accel bias was stored. */ 192c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long accel_temp; 193c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long gyro_temp_slope[3]; 194c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** sensor accuracies */ 195c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_accuracy; 196c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accel_accuracy; 197c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int compass_accuracy; 198c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 199c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 200c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct inv_db_save_mpl_t { 201c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** gyro bias in chip frame, hardware units scaled by 2^16, +/- 2000 dps 202c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro full scale */ 203c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long gyro_bias[3]; 204c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 205c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 206c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct inv_db_save_accel_mpl_t { 207c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /** accel bias in chip frame, hardware units scaled by 2^16, +/- 2 gee 208c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro full scale */ 209c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long accel_bias[3]; 210c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 211c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 212c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** Maximum number of data callbacks that are supported. Safe to increase if needed.*/ 213c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_MAX_DATA_CB 20 214c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 215c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef INV_PLAYBACK_DBG 216c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_turn_on_data_logging(FILE *file); 217c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_turn_off_data_logging(); 218c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 219c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 220c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_gyro_orientation_and_scale(int orientation, long sensitivity); 221c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_accel_orientation_and_scale(int orientation, 222c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long sensitivity); 223c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_orientation_and_scale(int orientation, 224c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long sensitivity); 225c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_gyro_sample_rate(long sample_rate_us); 226c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_sample_rate(long sample_rate_us); 227c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_quat_sample_rate(long sample_rate_us); 228c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_accel_sample_rate(long sample_rate_us); 229c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_gyro_bandwidth(int bandwidth_hz); 230c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_accel_bandwidth(int bandwidth_hz); 231c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_bandwidth(int bandwidth_hz); 232c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 233c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_gyro_sample_rate_ms(long *sample_rate_ms); 234c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_accel_sample_rate_ms(long *sample_rate_ms); 235c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_sample_rate_ms(long *sample_rate_ms); 236c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 237c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_register_data_cb(inv_error_t (*func) 238c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro (struct inv_sensor_cal_t * data), int priority, 239c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int sensor_type); 240c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_unregister_data_cb(inv_error_t (*func) 241c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro (struct inv_sensor_cal_t * data)); 242c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 243c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_build_gyro(const short *gyro, inv_time_t timestamp); 244c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_build_compass(const long *compass, int status, 245c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro inv_time_t timestamp); 246c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_build_accel(const long *accel, int status, 247c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro inv_time_t timestamp); 248c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_build_temp(const long temp, inv_time_t timestamp); 249c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_build_quat(const long *quat, int status, inv_time_t timestamp); 250c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_build_pressure(const long pressure, int status, inv_time_t timestamp); 251c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_execute_on_data(void); 252c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 253c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_bias(long *bias); 254c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 255c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_bias(const long *bias, int accuracy); 256c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_disturbance(int dist); 257c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_gyro_bias(const long *bias); 258c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_mpl_gyro_bias(const long *bias, int accuracy); 259c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_accel_bias(const long *bias); 260c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_mpl_accel_bias(const long *bias, int accuracy); 261c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_accel_accuracy(int accuracy); 262c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_accel_bias_mask(const long *bias, int accuracy, int mask); 263c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 264c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_soft_iron_matrix_d(long *matrix); 265c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_soft_iron_matrix_d(long *matrix); 266c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 267c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_soft_iron_matrix_f(float *matrix); 268c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_soft_iron_matrix_f(float *matrix); 269c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 270c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_soft_iron_output_data(long *data); 271c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_soft_iron_input_data(long *data); 272c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_set_compass_soft_iron_input_data(const long *data); 273c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 274c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_reset_compass_soft_iron_matrix(void); 275c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_enable_compass_soft_iron_matrix(void); 276c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_disable_compass_soft_iron_matrix(void); 277c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 278c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_mpl_gyro_bias(long *bias, long *temp); 279c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_gyro_bias(long *bias); 280c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_gyro_bias_dmp_units(long *bias); 281c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_factory_accel_bias_mask(); 282c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_mpl_accel_bias(long *bias, long *temp); 283c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_accel_bias(long *bias); 284c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_accel_bias_dmp_units(long *bias); 285c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 286c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_gyro_was_turned_off(void); 287c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_accel_was_turned_off(void); 288c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_compass_was_turned_off(void); 289c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_quaternion_sensor_was_turned_off(void); 290c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_init_data_builder(void); 291c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarolong inv_get_gyro_sensitivity(void); 292c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarolong inv_get_accel_sensitivity(void); 293c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarolong inv_get_compass_sensitivity(void); 294c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 295c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_accel_set(long *data, int8_t *accuracy, inv_time_t * timestamp); 296c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_gyro_set(long *data, int8_t *accuracy, inv_time_t * timestamp); 297c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_gyro_set_raw(long *data, int8_t *accuracy, inv_time_t * timestamp); 298c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_set(long *data, int8_t *accuracy, inv_time_t * timestamp); 299c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_compass_set_raw(long *data, int8_t *accuracy, inv_time_t * timestamp); 300c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 301c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_gyro(long *gyro); 302c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 303c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_gyro_accuracy(void); 304c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_accel_accuracy(void); 305c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_mag_accuracy(void); 306c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_get_raw_compass(short *raw); 307c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 308c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_compass_on(void); 309c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_gyro_on(void); 310c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_accel_on(void); 311c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 312c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_time_t inv_get_last_timestamp(void); 313c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_compass_disturbance(void); 314c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 315c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// new DMP cal functions 316c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_gyro_orient(int *orient); 317c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_accel_orient(int *orient); 318c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 319c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef WIN32 320c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_overwrite_dmp_9quat(void); 321c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 322c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 323c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// internal 324c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_gyro_bias_tc_set(void); 325c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_9_axis_timestamp(long sample_rate_us, inv_time_t *ts); 326c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_6_axis_gyro_accel_timestamp(long sample_rate_us, inv_time_t *ts); 327c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint inv_get_6_axis_compass_accel_timestamp(long sample_rate_us, inv_time_t *ts); 328c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 329c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __cplusplus 330c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 331c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 332c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 333c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif /* INV_DATA_BUILDER_H__ */ 334