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
13extern "C" {
14#endif
15
16#define INV_MOTION                       0x0001
17#define INV_NO_MOTION                    0x0002
18
19    /**************************************************************************/
20    /*  The value of inv_get_gyro_sum_of_sqr is scaled such the (1 dps)^2 =   */
21    /*  2^GYRO_MAG_SQR_SHIFT. This number must be >=0 and even.               */
22    /*  The value of inv_accel_sum_of_sqr is scaled such that (1g)^2 =        */
23    /*  2^ACC_MAG_SQR_SHIFT                                                   */
24    /**************************************************************************/
25#define ACC_MAG_SQR_SHIFT 16
26
27void inv_store_gaming_quaternion(const long *quat, inv_time_t timestamp);
28void inv_store_accel_quaternion(const long *quat, inv_time_t timestamp);
29
30// States
31#define SF_NORMAL 0
32#define SF_UNCALIBRATED 1
33#define SF_STARTUP_SETTLE 2
34#define SF_FAST_SETTLE 3
35#define SF_DISTURBANCE 4
36#define SF_SLOW_SETTLE 5
37
38int inv_get_acc_state();
39void inv_set_acc_state(int state);
40int inv_get_motion_state(unsigned int *cntr);
41void inv_set_motion_state(unsigned char state);
42inv_error_t inv_get_gravity(long *data);
43inv_error_t inv_get_gravity_6x(long *data);
44inv_error_t inv_get_6axis_quaternion(long *data, inv_time_t *timestamp);
45inv_error_t inv_get_quaternion(long *data);
46inv_error_t inv_get_quaternion_float(float *data);
47void inv_get_quaternion_set(long *data, int *accuracy, inv_time_t *timestamp);
48inv_error_t inv_get_accel_quaternion(long *data);
49inv_error_t inv_get_geomagnetic_quaternion(long *data, inv_time_t *timestamp);
50void inv_set_geomagnetic_compass_correction(const long *data, inv_time_t timestamp);
51void inv_get_geomagnetic_compass_correction(long *data, inv_time_t *timestamp);
52
53inv_error_t inv_enable_results_holder();
54inv_error_t inv_init_results_holder(void);
55
56/* Magnetic Field Parameters*/
57void inv_set_local_field(const long *data);
58void inv_get_local_field(long *data);
59void inv_set_mag_scale(const long *data);
60void inv_get_mag_scale(long *data);
61void inv_set_compass_correction(const long *data, inv_time_t timestamp);
62void inv_get_compass_correction(long *data, inv_time_t *timestamp);
63int inv_got_compass_bias();
64void inv_set_compass_bias_found(int state);
65int inv_get_large_mag_field();
66void inv_set_large_mag_field(int state);
67void inv_set_compass_state(int state);
68int inv_get_compass_state();
69void inv_set_compass_bias_error(const long *bias_error);
70void inv_get_compass_bias_error(long *bias_error);
71inv_error_t inv_get_linear_accel(long *data);
72inv_error_t inv_get_accel(long *data);
73inv_error_t inv_get_accel_float(float *data);
74inv_error_t inv_get_gyro_float(float *data);
75inv_error_t inv_get_linear_accel_float(float *data);
76void inv_set_heading_confidence_interval(float ci);
77float inv_get_heading_confidence_interval(void);
78
79void inv_set_accel_compass_confidence_interval(float ci);
80float inv_get_accel_compass_confidence_interval(void);
81
82int inv_got_accel_bias();
83void inv_set_accel_bias_found(int state);
84
85
86#ifdef __cplusplus
87}
88#endif
89
90#endif // INV_RESULTS_HOLDER_H__
91