1 /* 2 $License: 3 Copyright 2011 InvenSense, Inc. 4 5 Licensed under the Apache License, Version 2.0 (the "License"); 6 you may not use this file except in compliance with the License. 7 You may obtain a copy of the License at 8 9 http://www.apache.org/licenses/LICENSE-2.0 10 11 Unless required by applicable law or agreed to in writing, software 12 distributed under the License is distributed on an "AS IS" BASIS, 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 See the License for the specific language governing permissions and 15 limitations under the License. 16 $ 17 */ 18 /******************************************************************************* 19 * 20 * $Id: mldl.h 5639 2011-06-14 01:23:05Z nroyer $ 21 * 22 *******************************************************************************/ 23 24 #ifndef MLDL_H 25 #define MLDL_H 26 27 #include "mltypes.h" 28 #include "mlsl.h" 29 #include <linux/mpu.h> 30 #include "mldl_cfg.h" 31 #ifdef INV_INCLUDE_LEGACY_HEADERS 32 #include "mldl_legacy.h" 33 #endif 34 35 /* ------------ */ 36 /* - Defines. - */ 37 /* ------------ */ 38 39 typedef enum _DEVICE_CONFIG { 40 DEVICE_MPU_ACCEL = 0, 41 DEVICE_MPU, 42 NUM_OF_DEVICES 43 } DEVICE_CONFIG; 44 45 #define SERIAL_I2C 0 46 #define SERIAL_SPI 1 47 48 #define DATAMODE_MANUAL 0 // Manual data mode 49 #define DATAMODE_AUTO 1 // Auto data mode 50 51 #define DATASRC_IMMEDIATE 0 // Return data immediately 52 #define DATASRC_WHENREADY 1 // Only return data when new data is available 53 #define DATASRC_FIFO 2 // Use FIFO for data 54 55 #define SENSOR_DATA_GYROX 0x0001 56 #define SENSOR_DATA_GYROY 0x0002 57 #define SENSOR_DATA_GYROZ 0x0004 58 #define SENSOR_DATA_ACCELX 0x0008 59 #define SENSOR_DATA_ACCELY 0x0010 60 #define SENSOR_DATA_ACCELZ 0x0020 61 #define SENSOR_DATA_AUX1 0x0040 62 #define SENSOR_DATA_AUX2 0x0080 63 #define SENSOR_DATA_AUX3 0x0100 64 #define SENSOR_DATA_TEMP 0x0200 65 66 #define INTPIN_MPU 0 67 68 #define INTLOGIC_HIGH 0 69 #define INTLOGIC_LOW 1 70 71 #define INTTYPE_PUSHPULL 0 72 #define INTTYPE_OPENDRAIN 1 73 74 #define INTLATCH_DISABLE 0 75 #define INTLATCH_ENABLE 1 76 77 #define MPUINT_MPU_READY 0x04 78 #define MPUINT_DMP_DONE 0x02 79 #define MPUINT_DATA_READY 0x01 80 81 #define INTLATCHCLEAR_READSTATUS 0 82 #define INTLATCHCLEAR_ANYREAD 1 83 84 #define DMP_DONTRUN 0 85 #define DMP_RUN 1 86 87 /*---- defines for external interrupt status (via external call into library) ----*/ 88 #define INT_CLEAR 0 89 #define INT_TRIGGERED 1 90 91 typedef enum { 92 INTSRC_MPU = 0, 93 INTSRC_AUX1, 94 INTSRC_AUX2, 95 INTSRC_AUX3, 96 INTSRC_TIMER, 97 INTSRC_UNKNOWN, 98 INTSRC_MPU_FIFO, 99 INTSRC_MPU_MOTION, 100 NUM_OF_INTSOURCES, 101 } INT_SOURCE; 102 103 /* --------------- */ 104 /* - Structures. - */ 105 /* --------------- */ 106 107 /* --------------- */ 108 /* - Variables. - */ 109 /* --------------- */ 110 111 /* --------------------- */ 112 /* - Function p-types. - */ 113 /* --------------------- */ 114 #ifdef __cplusplus 115 extern "C" { 116 #endif 117 118 inv_error_t inv_dl_open(void *mlslHandle); 119 inv_error_t inv_dl_close(void); 120 121 inv_error_t inv_dl_start(unsigned long sensors); 122 inv_error_t inv_dl_stop(unsigned long sensors); 123 124 struct mldl_cfg *inv_get_dl_config(void); 125 126 inv_error_t inv_init_requested_sensors(unsigned long sensors); 127 unsigned char inv_get_mpu_slave_addr(void); 128 inv_error_t inv_get_dl_ctrl_dmp(unsigned char enableRun, 129 unsigned char enableFIFO); 130 inv_error_t inv_get_dl_cfg_int(unsigned char triggers); 131 inv_error_t inv_dl_cfg_sampling(unsigned char lpf, unsigned char divider); 132 inv_error_t inv_set_full_scale(float fullScale); 133 inv_error_t inv_set_external_sync(unsigned char extSync); 134 inv_error_t inv_set_ignore_system_suspend(unsigned char ignore); 135 inv_error_t inv_clock_source(unsigned char clkSource); 136 inv_error_t inv_get_mpu_memory(unsigned short key, 137 unsigned short length, 138 unsigned char *buffer); 139 inv_error_t inv_set_mpu_memory(unsigned short key, 140 unsigned short length, 141 const unsigned char *buffer); 142 inv_error_t inv_load_dmp(const unsigned char *buffer, 143 unsigned short length, 144 unsigned short startAddress); 145 146 unsigned char inv_get_slicon_rev(void); 147 inv_error_t inv_set_offsetTC(const unsigned char *tc); 148 inv_error_t inv_set_offset(const short *offset); 149 150 /* Functions for setting and retrieving the DMP memory */ 151 inv_error_t inv_get_mpu_memory_original(unsigned short key, 152 unsigned short length, 153 unsigned char *buffer); 154 void inv_set_get_address(unsigned short (*func) (unsigned short key)); 155 unsigned short inv_dl_get_address(unsigned short key); 156 uint_fast8_t inv_dmpkey_supported(unsigned short key); 157 158 inv_error_t inv_get_interrupt_status(unsigned char intPin, 159 unsigned char *value); 160 unsigned char inv_get_interrupt_trigger(unsigned char index); 161 void inv_clear_interrupt_trigger(unsigned char index); 162 inv_error_t inv_interrupt_handler(unsigned char intSource); 163 164 /** Only exposed for testing purposes */ 165 inv_error_t inv_set_mpu_memory_one_bank(unsigned char bank, 166 unsigned short memAddr, 167 unsigned short length, 168 const unsigned char *buffer); 169 inv_error_t inv_get_mpu_memory_one_bank(unsigned char bank, 170 unsigned char memAddr, 171 unsigned short length, 172 unsigned char *buffer); 173 #ifdef __cplusplus 174 } 175 #endif 176 #endif // MLDL_H 177