summaryrefslogtreecommitdiffstats
path: root/60xx/libsensors_iio/software/core/mllite/data_builder.h
diff options
context:
space:
mode:
authorScott Warner <Tortel1210@gmail.com>2015-10-11 08:30:01 -0400
committerScott Warner <Tortel1210@gmail.com>2015-10-12 09:40:33 -0400
commit901b63272e2eb758fe2f4a588e6e9f308fe50f6c (patch)
treeeefd9603dc5f829b80bc7bb116e9de5ba4297714 /60xx/libsensors_iio/software/core/mllite/data_builder.h
parente0c1691f695f828608c36315fa405db2fa8d153e (diff)
downloadandroid_hardware_invensense-901b63272e2eb758fe2f4a588e6e9f308fe50f6c.tar.gz
android_hardware_invensense-901b63272e2eb758fe2f4a588e6e9f308fe50f6c.tar.bz2
android_hardware_invensense-901b63272e2eb758fe2f4a588e6e9f308fe50f6c.zip
Revert "Remove files for unsupported devices."
This reverts commit f5f584ee173faef40f226c6e0e8580a2ecbe079b. Change-Id: I4e1b41922b5ccaac2314dac7f43df5740e2e9361
Diffstat (limited to '60xx/libsensors_iio/software/core/mllite/data_builder.h')
-rw-r--r--60xx/libsensors_iio/software/core/mllite/data_builder.h240
1 files changed, 240 insertions, 0 deletions
diff --git a/60xx/libsensors_iio/software/core/mllite/data_builder.h b/60xx/libsensors_iio/software/core/mllite/data_builder.h
new file mode 100644
index 0000000..c8c18cf
--- /dev/null
+++ b/60xx/libsensors_iio/software/core/mllite/data_builder.h
@@ -0,0 +1,240 @@
+/*
+ $License:
+ Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved.
+ See included License.txt for License information.
+ $
+ */
+#include "mltypes.h"
+
+#ifndef INV_DATA_BUILDER_H__
+#define INV_DATA_BUILDER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Uncomment this flag to enable playback debug and record or playback scenarios
+//#define INV_PLAYBACK_DBG
+
+/** This is a new sample of accel data */
+#define INV_ACCEL_NEW 1
+/** This is a new sample of gyro data */
+#define INV_GYRO_NEW 2
+/** This is a new sample of compass data */
+#define INV_MAG_NEW 4
+/** This is a new sample of temperature data */
+#define INV_TEMP_NEW 8
+/** This is a new sample of quaternion data */
+#define INV_QUAT_NEW 16
+/** Set if quaternion is 6-axis from DMP */
+#define INV_QUAT_6AXIS 1024
+/** Set if quaternion is 3-axis from DMP */
+#define INV_QUAT_3AXIS 4096
+
+/** Set if the data is contiguous. Typically not set if a sample was skipped */
+#define INV_CONTIGUOUS 16
+/** Set if the calibrated data has been solved for */
+#define INV_CALIBRATED 32
+/* INV_NEW_DATA set for a new set of data, cleared if not available. */
+#define INV_NEW_DATA 64
+/* Set if raw data exists */
+#define INV_RAW_DATA 128
+/* Set if the sensor is on */
+#define INV_SENSOR_ON 256
+/* Set if quaternion has bias correction applied */
+#define INV_BIAS_APPLIED 512
+
+#define INV_PRIORITY_MOTION_NO_MOTION 100
+#define INV_PRIORITY_GYRO_TC 150
+#define INV_PRIORITY_QUATERNION_GYRO_ACCEL 200
+#define INV_PRIORITY_QUATERNION_NO_GYRO 250
+#define INV_PRIORITY_MAGNETIC_DISTURBANCE 300
+#define INV_PRIORITY_HEADING_FROM_GYRO 350
+#define INV_PRIORITY_COMPASS_BIAS_W_GYRO 375
+#define INV_PRIORITY_COMPASS_VECTOR_CAL 400
+#define INV_PRIORITY_COMPASS_ADV_BIAS 500
+#define INV_PRIORITY_9_AXIS_FUSION 600
+#define INV_PRIORITY_QUATERNION_ADJUST_9_AXIS 700
+#define INV_PRIORITY_QUATERNION_ACCURACY 750
+#define INV_PRIORITY_RESULTS_HOLDER 800
+#define INV_PRIORITY_INUSE_AUTO_CALIBRATION 850
+#define INV_PRIORITY_HAL_OUTPUTS 900
+#define INV_PRIORITY_GLYPH 950
+#define INV_PRIORITY_SHAKE 975
+#define INV_PRIORITY_SM 1000
+
+struct inv_single_sensor_t {
+ /** Orientation Descriptor. Describes how to go from the mounting frame to the body frame when
+ * the rotation matrix could be thought of only having elements of 0,1,-1.
+ * 2 bits are used to describe the column of the 1 or -1 and the 3rd bit is used for the sign.
+ * Bit 8 is sign of +/- 1 in third row. Bit 6-7 is column of +/-1 in third row.
+ * Bit 5 is sign of +/- 1 in second row. Bit 3-4 is column of +/-1 in second row.
+ * Bit 2 is sign of +/- 1 in first row. Bit 0-1 is column of +/-1 in first row.
+ */
+ int orientation;
+ /** The raw data in raw data units in the mounting frame */
+ short raw[3];
+ /** Raw data in body frame */
+ long raw_scaled[3];
+ /** Calibrated data */
+ long calibrated[3];
+ long sensitivity;
+ /** Sample rate in microseconds */
+ long sample_rate_us;
+ long sample_rate_ms;
+ /** INV_CONTIGUOUS is set for contiguous data. Will not be set if there was a sample
+ * skipped due to power savings turning off this sensor.
+ * INV_NEW_DATA set for a new set of data, cleared if not available.
+ * INV_CALIBRATED_SET if calibrated data has been solved for */
+ int status;
+ /** 0 to 3 for how well sensor data and biases are known. 3 is most accurate. */
+ int accuracy;
+ inv_time_t timestamp;
+ inv_time_t timestamp_prev;
+ /** Bandwidth in Hz */
+ int bandwidth;
+};
+struct inv_quat_sensor_t {
+ long raw[4];
+ /** INV_CONTIGUOUS is set for contiguous data. Will not be set if there was a sample
+ * skipped due to power savings turning off this sensor.
+ * INV_NEW_DATA set for a new set of data, cleared if not available.
+ * INV_CALIBRATED_SET if calibrated data has been solved for */
+ int status;
+ inv_time_t timestamp;
+ inv_time_t timestamp_prev;
+ long sample_rate_us;
+ long sample_rate_ms;
+};
+
+struct inv_sensor_cal_t {
+ struct inv_single_sensor_t gyro;
+ struct inv_single_sensor_t accel;
+ struct inv_single_sensor_t compass;
+ struct inv_single_sensor_t temp;
+ struct inv_quat_sensor_t quat;
+ /** Combinations of INV_GYRO_NEW, INV_ACCEL_NEW, INV_MAG_NEW to indicate
+ * which data is a new sample as these data points may have different sample rates.
+ */
+ int status;
+};
+
+// Useful for debug record and playback
+typedef enum {
+ RD_NO_DEBUG,
+ RD_RECORD,
+ RD_PLAYBACK
+} rd_dbg_mode;
+
+typedef enum {
+ PLAYBACK_DBG_TYPE_GYRO,
+ PLAYBACK_DBG_TYPE_ACCEL,
+ PLAYBACK_DBG_TYPE_COMPASS,
+ PLAYBACK_DBG_TYPE_TEMPERATURE,
+ PLAYBACK_DBG_TYPE_EXECUTE,
+ PLAYBACK_DBG_TYPE_A_ORIENT,
+ PLAYBACK_DBG_TYPE_G_ORIENT,
+ PLAYBACK_DBG_TYPE_C_ORIENT,
+ PLAYBACK_DBG_TYPE_A_SAMPLE_RATE,
+ PLAYBACK_DBG_TYPE_C_SAMPLE_RATE,
+ PLAYBACK_DBG_TYPE_G_SAMPLE_RATE,
+ PLAYBACK_DBG_TYPE_GYRO_OFF,
+ PLAYBACK_DBG_TYPE_ACCEL_OFF,
+ PLAYBACK_DBG_TYPE_COMPASS_OFF,
+ PLAYBACK_DBG_TYPE_Q_SAMPLE_RATE,
+ PLAYBACK_DBG_TYPE_QUAT
+
+} inv_rd_dbg_states;
+
+/** Maximum number of data callbacks that are supported. Safe to increase if needed.*/
+#define INV_MAX_DATA_CB 20
+
+#ifdef INV_PLAYBACK_DBG
+#include <stdio.h>
+void inv_turn_on_data_logging(FILE *file);
+void inv_turn_off_data_logging();
+#endif
+
+void inv_set_gyro_orientation_and_scale(int orientation, long sensitivity);
+void inv_set_accel_orientation_and_scale(int orientation,
+ long sensitivity);
+void inv_set_compass_orientation_and_scale(int orientation,
+ long sensitivity);
+void inv_set_gyro_sample_rate(long sample_rate_us);
+void inv_set_compass_sample_rate(long sample_rate_us);
+void inv_set_quat_sample_rate(long sample_rate_us);
+void inv_set_accel_sample_rate(long sample_rate_us);
+void inv_set_gyro_bandwidth(int bandwidth_hz);
+void inv_set_accel_bandwidth(int bandwidth_hz);
+void inv_set_compass_bandwidth(int bandwidth_hz);
+
+void inv_get_gyro_sample_rate_ms(long *sample_rate_ms);
+void inv_get_accel_sample_rate_ms(long *sample_rate_ms);
+void inv_get_compass_sample_rate_ms(long *sample_rate_ms);
+
+inv_error_t inv_register_data_cb(inv_error_t (*func)
+ (struct inv_sensor_cal_t * data), int priority,
+ int sensor_type);
+inv_error_t inv_unregister_data_cb(inv_error_t (*func)
+ (struct inv_sensor_cal_t * data));
+
+inv_error_t inv_build_gyro(const short *gyro, inv_time_t timestamp);
+inv_error_t inv_build_compass(const long *compass, int status,
+ inv_time_t timestamp);
+inv_error_t inv_build_accel(const long *accel, int status,
+ inv_time_t timestamp);
+inv_error_t inv_build_temp(const long temp, inv_time_t timestamp);
+inv_error_t inv_build_quat(const long *quat, int status, inv_time_t timestamp);
+inv_error_t inv_execute_on_data(void);
+
+void inv_get_compass_bias(long *bias);
+
+void inv_set_compass_bias(const long *bias, int accuracy);
+void inv_set_compass_disturbance(int dist);
+void inv_set_gyro_bias(const long *bias, int accuracy);
+void inv_set_accel_bias(const long *bias, int accuracy);
+void inv_set_accel_accuracy(int accuracy);
+void inv_set_accel_bias_mask(const long *bias, int accuracy, int mask);
+
+void inv_get_gyro_bias(long *bias, long *temp);
+void inv_get_accel_bias(long *bias, long *temp);
+
+void inv_gyro_was_turned_off(void);
+void inv_accel_was_turned_off(void);
+void inv_compass_was_turned_off(void);
+void inv_quaternion_sensor_was_turned_off(void);
+inv_error_t inv_init_data_builder(void);
+long inv_get_gyro_sensitivity(void);
+long inv_get_accel_sensitivity(void);
+long inv_get_compass_sensitivity(void);
+
+void inv_get_accel_set(long *data, int8_t *accuracy, inv_time_t * timestamp);
+void inv_get_gyro_set(long *data, int8_t *accuracy, inv_time_t * timestamp);
+void inv_get_gyro_set_raw(long *data, int8_t *accuracy, inv_time_t * timestamp);
+void inv_get_compass_set(long *data, int8_t *accuracy, inv_time_t * timestamp);
+
+void inv_get_gyro(long *gyro);
+
+int inv_get_gyro_accuracy(void);
+int inv_get_accel_accuracy(void);
+int inv_get_mag_accuracy(void);
+
+int inv_get_compass_on(void);
+int inv_get_gyro_on(void);
+int inv_get_accel_on(void);
+
+inv_time_t inv_get_last_timestamp(void);
+int inv_get_compass_disturbance(void);
+
+//New DMP Cal Functions
+inv_error_t inv_get_gyro_orient(int *orient);
+inv_error_t inv_get_accel_orient(int *orient);
+
+// internal
+int inv_get_6_axis_gyro_accel_timestamp(long sample_rate_us, inv_time_t *ts);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* INV_DATA_BUILDER_H__ */