BMI160 Initial
Dependents: MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_Pitch_Charles Maxim_Squeeks
bmi160_defs.h@21:0b28b9d13164, 2018-12-04 (annotated)
- Committer:
- CharlesMaxim
- Date:
- Tue Dec 04 09:50:52 2018 +0000
- Revision:
- 21:0b28b9d13164
Initial Release for BMI160
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
CharlesMaxim | 21:0b28b9d13164 | 1 | /** |
CharlesMaxim | 21:0b28b9d13164 | 2 | * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH |
CharlesMaxim | 21:0b28b9d13164 | 3 | * |
CharlesMaxim | 21:0b28b9d13164 | 4 | * Redistribution and use in source and binary forms, with or without |
CharlesMaxim | 21:0b28b9d13164 | 5 | * modification, are permitted provided that the following conditions are met: |
CharlesMaxim | 21:0b28b9d13164 | 6 | * |
CharlesMaxim | 21:0b28b9d13164 | 7 | * Redistributions of source code must retain the above copyright |
CharlesMaxim | 21:0b28b9d13164 | 8 | * notice, this list of conditions and the following disclaimer. |
CharlesMaxim | 21:0b28b9d13164 | 9 | * |
CharlesMaxim | 21:0b28b9d13164 | 10 | * Redistributions in binary form must reproduce the above copyright |
CharlesMaxim | 21:0b28b9d13164 | 11 | * notice, this list of conditions and the following disclaimer in the |
CharlesMaxim | 21:0b28b9d13164 | 12 | * documentation and/or other materials provided with the distribution. |
CharlesMaxim | 21:0b28b9d13164 | 13 | * |
CharlesMaxim | 21:0b28b9d13164 | 14 | * Neither the name of the copyright holder nor the names of the |
CharlesMaxim | 21:0b28b9d13164 | 15 | * contributors may be used to endorse or promote products derived from |
CharlesMaxim | 21:0b28b9d13164 | 16 | * this software without specific prior written permission. |
CharlesMaxim | 21:0b28b9d13164 | 17 | * |
CharlesMaxim | 21:0b28b9d13164 | 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
CharlesMaxim | 21:0b28b9d13164 | 19 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR |
CharlesMaxim | 21:0b28b9d13164 | 20 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
CharlesMaxim | 21:0b28b9d13164 | 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
CharlesMaxim | 21:0b28b9d13164 | 22 | * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER |
CharlesMaxim | 21:0b28b9d13164 | 23 | * OR CONTRIBUTORS BE LIABLE FOR ANY |
CharlesMaxim | 21:0b28b9d13164 | 24 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
CharlesMaxim | 21:0b28b9d13164 | 25 | * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, |
CharlesMaxim | 21:0b28b9d13164 | 26 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
CharlesMaxim | 21:0b28b9d13164 | 27 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
CharlesMaxim | 21:0b28b9d13164 | 28 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
CharlesMaxim | 21:0b28b9d13164 | 29 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
CharlesMaxim | 21:0b28b9d13164 | 30 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
CharlesMaxim | 21:0b28b9d13164 | 31 | * ANY WAY OUT OF THE USE OF THIS |
CharlesMaxim | 21:0b28b9d13164 | 32 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE |
CharlesMaxim | 21:0b28b9d13164 | 33 | * |
CharlesMaxim | 21:0b28b9d13164 | 34 | * The information provided is believed to be accurate and reliable. |
CharlesMaxim | 21:0b28b9d13164 | 35 | * The copyright holder assumes no responsibility |
CharlesMaxim | 21:0b28b9d13164 | 36 | * for the consequences of use |
CharlesMaxim | 21:0b28b9d13164 | 37 | * of such information nor for any infringement of patents or |
CharlesMaxim | 21:0b28b9d13164 | 38 | * other rights of third parties which may result from its use. |
CharlesMaxim | 21:0b28b9d13164 | 39 | * No license is granted by implication or otherwise under any patent or |
CharlesMaxim | 21:0b28b9d13164 | 40 | * patent rights of the copyright holder. |
CharlesMaxim | 21:0b28b9d13164 | 41 | * |
CharlesMaxim | 21:0b28b9d13164 | 42 | * @file bmi160_defs.h |
CharlesMaxim | 21:0b28b9d13164 | 43 | * @date 11 Jan 2018 |
CharlesMaxim | 21:0b28b9d13164 | 44 | * @version 3.7.5 |
CharlesMaxim | 21:0b28b9d13164 | 45 | * @brief |
CharlesMaxim | 21:0b28b9d13164 | 46 | * |
CharlesMaxim | 21:0b28b9d13164 | 47 | */ |
CharlesMaxim | 21:0b28b9d13164 | 48 | |
CharlesMaxim | 21:0b28b9d13164 | 49 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 50 | * @defgroup bmi160_defs |
CharlesMaxim | 21:0b28b9d13164 | 51 | * @brief |
CharlesMaxim | 21:0b28b9d13164 | 52 | * @{*/ |
CharlesMaxim | 21:0b28b9d13164 | 53 | |
CharlesMaxim | 21:0b28b9d13164 | 54 | #ifndef BMI160_DEFS_H_ |
CharlesMaxim | 21:0b28b9d13164 | 55 | #define BMI160_DEFS_H_ |
CharlesMaxim | 21:0b28b9d13164 | 56 | |
CharlesMaxim | 21:0b28b9d13164 | 57 | /*************************** C types headers *****************************/ |
CharlesMaxim | 21:0b28b9d13164 | 58 | #ifdef __KERNEL__ |
CharlesMaxim | 21:0b28b9d13164 | 59 | #include <linux/types.h> |
CharlesMaxim | 21:0b28b9d13164 | 60 | #include <linux/kernel.h> |
CharlesMaxim | 21:0b28b9d13164 | 61 | #else |
CharlesMaxim | 21:0b28b9d13164 | 62 | #include <stdint.h> |
CharlesMaxim | 21:0b28b9d13164 | 63 | #include <stddef.h> |
CharlesMaxim | 21:0b28b9d13164 | 64 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 65 | |
CharlesMaxim | 21:0b28b9d13164 | 66 | /*************************** Common macros *****************************/ |
CharlesMaxim | 21:0b28b9d13164 | 67 | |
CharlesMaxim | 21:0b28b9d13164 | 68 | #if !defined(UINT8_C) && !defined(INT8_C) |
CharlesMaxim | 21:0b28b9d13164 | 69 | #define INT8_C(x) S8_C(x) |
CharlesMaxim | 21:0b28b9d13164 | 70 | #define UINT8_C(x) U8_C(x) |
CharlesMaxim | 21:0b28b9d13164 | 71 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 72 | |
CharlesMaxim | 21:0b28b9d13164 | 73 | #if !defined(UINT16_C) && !defined(INT16_C) |
CharlesMaxim | 21:0b28b9d13164 | 74 | #define INT16_C(x) S16_C(x) |
CharlesMaxim | 21:0b28b9d13164 | 75 | #define UINT16_C(x) U16_C(x) |
CharlesMaxim | 21:0b28b9d13164 | 76 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 77 | |
CharlesMaxim | 21:0b28b9d13164 | 78 | #if !defined(INT32_C) && !defined(UINT32_C) |
CharlesMaxim | 21:0b28b9d13164 | 79 | #define INT32_C(x) S32_C(x) |
CharlesMaxim | 21:0b28b9d13164 | 80 | #define UINT32_C(x) U32_C(x) |
CharlesMaxim | 21:0b28b9d13164 | 81 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 82 | |
CharlesMaxim | 21:0b28b9d13164 | 83 | #if !defined(INT64_C) && !defined(UINT64_C) |
CharlesMaxim | 21:0b28b9d13164 | 84 | #define INT64_C(x) S64_C(x) |
CharlesMaxim | 21:0b28b9d13164 | 85 | #define UINT64_C(x) U64_C(x) |
CharlesMaxim | 21:0b28b9d13164 | 86 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 87 | |
CharlesMaxim | 21:0b28b9d13164 | 88 | /**@}*/ |
CharlesMaxim | 21:0b28b9d13164 | 89 | |
CharlesMaxim | 21:0b28b9d13164 | 90 | /**\name C standard macros */ |
CharlesMaxim | 21:0b28b9d13164 | 91 | #ifndef NULL |
CharlesMaxim | 21:0b28b9d13164 | 92 | #ifdef __cplusplus |
CharlesMaxim | 21:0b28b9d13164 | 93 | #define NULL 0 |
CharlesMaxim | 21:0b28b9d13164 | 94 | #else |
CharlesMaxim | 21:0b28b9d13164 | 95 | #define NULL ((void *) 0) |
CharlesMaxim | 21:0b28b9d13164 | 96 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 97 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 98 | |
CharlesMaxim | 21:0b28b9d13164 | 99 | /*************************** Sensor macros *****************************/ |
CharlesMaxim | 21:0b28b9d13164 | 100 | /* Test for an endian machine */ |
CharlesMaxim | 21:0b28b9d13164 | 101 | #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ |
CharlesMaxim | 21:0b28b9d13164 | 102 | #define LITTLE_ENDIAN 1 |
CharlesMaxim | 21:0b28b9d13164 | 103 | #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ |
CharlesMaxim | 21:0b28b9d13164 | 104 | #define BIG_ENDIAN 1 |
CharlesMaxim | 21:0b28b9d13164 | 105 | #else |
CharlesMaxim | 21:0b28b9d13164 | 106 | #error "Code does not support Endian format of the processor" |
CharlesMaxim | 21:0b28b9d13164 | 107 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 108 | |
CharlesMaxim | 21:0b28b9d13164 | 109 | /** Mask definitions */ |
CharlesMaxim | 21:0b28b9d13164 | 110 | #define BMI160_ACCEL_BW_MASK UINT8_C(0x70) |
CharlesMaxim | 21:0b28b9d13164 | 111 | #define BMI160_ACCEL_ODR_MASK UINT8_C(0x0F) |
CharlesMaxim | 21:0b28b9d13164 | 112 | #define BMI160_ACCEL_UNDERSAMPLING_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 113 | #define BMI160_ACCEL_RANGE_MASK UINT8_C(0x0F) |
CharlesMaxim | 21:0b28b9d13164 | 114 | #define BMI160_GYRO_BW_MASK UINT8_C(0x30) |
CharlesMaxim | 21:0b28b9d13164 | 115 | #define BMI160_GYRO_ODR_MASK UINT8_C(0x0F) |
CharlesMaxim | 21:0b28b9d13164 | 116 | #define BMI160_GYRO_RANGE_MSK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 117 | |
CharlesMaxim | 21:0b28b9d13164 | 118 | /** Mask definitions for INT_EN registers */ |
CharlesMaxim | 21:0b28b9d13164 | 119 | #define BMI160_ANY_MOTION_X_INT_EN_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 120 | #define BMI160_HIGH_G_X_INT_EN_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 121 | #define BMI160_NO_MOTION_X_INT_EN_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 122 | #define BMI160_ANY_MOTION_Y_INT_EN_MASK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 123 | #define BMI160_HIGH_G_Y_INT_EN_MASK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 124 | #define BMI160_NO_MOTION_Y_INT_EN_MASK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 125 | #define BMI160_ANY_MOTION_Z_INT_EN_MASK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 126 | #define BMI160_HIGH_G_Z_INT_EN_MASK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 127 | #define BMI160_NO_MOTION_Z_INT_EN_MASK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 128 | #define BMI160_SIG_MOTION_INT_EN_MASK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 129 | #define BMI160_ANY_MOTION_ALL_INT_EN_MASK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 130 | #define BMI160_STEP_DETECT_INT_EN_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 131 | #define BMI160_DOUBLE_TAP_INT_EN_MASK UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 132 | #define BMI160_SINGLE_TAP_INT_EN_MASK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 133 | #define BMI160_FIFO_FULL_INT_EN_MASK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 134 | #define BMI160_ORIENT_INT_EN_MASK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 135 | #define BMI160_FIFO_WATERMARK_INT_EN_MASK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 136 | #define BMI160_LOW_G_INT_EN_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 137 | #define BMI160_STEP_DETECT_EN_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 138 | #define BMI160_FLAT_INT_EN_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 139 | #define BMI160_DATA_RDY_INT_EN_MASK UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 140 | |
CharlesMaxim | 21:0b28b9d13164 | 141 | /** PMU status Macros */ |
CharlesMaxim | 21:0b28b9d13164 | 142 | #define BMI160_AUX_PMU_SUSPEND UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 143 | #define BMI160_AUX_PMU_NORMAL UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 144 | #define BMI160_AUX_PMU_LOW_POWER UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 145 | |
CharlesMaxim | 21:0b28b9d13164 | 146 | #define BMI160_GYRO_PMU_SUSPEND UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 147 | #define BMI160_GYRO_PMU_NORMAL UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 148 | #define BMI160_GYRO_PMU_FSU UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 149 | |
CharlesMaxim | 21:0b28b9d13164 | 150 | #define BMI160_ACCEL_PMU_SUSPEND UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 151 | #define BMI160_ACCEL_PMU_NORMAL UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 152 | #define BMI160_ACCEL_PMU_LOW_POWER UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 153 | |
CharlesMaxim | 21:0b28b9d13164 | 154 | /** Mask definitions for INT_OUT_CTRL register */ |
CharlesMaxim | 21:0b28b9d13164 | 155 | #define BMI160_INT1_EDGE_CTRL_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 156 | #define BMI160_INT1_OUTPUT_MODE_MASK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 157 | #define BMI160_INT1_OUTPUT_TYPE_MASK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 158 | #define BMI160_INT1_OUTPUT_EN_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 159 | #define BMI160_INT2_EDGE_CTRL_MASK UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 160 | #define BMI160_INT2_OUTPUT_MODE_MASK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 161 | #define BMI160_INT2_OUTPUT_TYPE_MASK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 162 | #define BMI160_INT2_OUTPUT_EN_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 163 | |
CharlesMaxim | 21:0b28b9d13164 | 164 | /** Mask definitions for INT_LATCH register */ |
CharlesMaxim | 21:0b28b9d13164 | 165 | #define BMI160_INT1_INPUT_EN_MASK UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 166 | #define BMI160_INT2_INPUT_EN_MASK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 167 | #define BMI160_INT_LATCH_MASK UINT8_C(0x0F) |
CharlesMaxim | 21:0b28b9d13164 | 168 | |
CharlesMaxim | 21:0b28b9d13164 | 169 | /** Mask definitions for INT_MAP register */ |
CharlesMaxim | 21:0b28b9d13164 | 170 | #define BMI160_INT1_LOW_G_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 171 | #define BMI160_INT1_HIGH_G_MASK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 172 | #define BMI160_INT1_SLOPE_MASK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 173 | #define BMI160_INT1_NO_MOTION_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 174 | #define BMI160_INT1_DOUBLE_TAP_MASK UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 175 | #define BMI160_INT1_SINGLE_TAP_MASK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 176 | #define BMI160_INT1_FIFO_FULL_MASK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 177 | #define BMI160_INT1_FIFO_WM_MASK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 178 | #define BMI160_INT1_ORIENT_MASK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 179 | #define BMI160_INT1_FLAT_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 180 | #define BMI160_INT1_DATA_READY_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 181 | #define BMI160_INT2_LOW_G_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 182 | #define BMI160_INT1_LOW_STEP_DETECT_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 183 | #define BMI160_INT2_LOW_STEP_DETECT_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 184 | #define BMI160_INT2_HIGH_G_MASK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 185 | #define BMI160_INT2_FIFO_FULL_MASK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 186 | #define BMI160_INT2_FIFO_WM_MASK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 187 | #define BMI160_INT2_SLOPE_MASK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 188 | #define BMI160_INT2_DATA_READY_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 189 | #define BMI160_INT2_NO_MOTION_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 190 | #define BMI160_INT2_DOUBLE_TAP_MASK UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 191 | #define BMI160_INT2_SINGLE_TAP_MASK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 192 | #define BMI160_INT2_ORIENT_MASK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 193 | #define BMI160_INT2_FLAT_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 194 | |
CharlesMaxim | 21:0b28b9d13164 | 195 | /** Mask definitions for INT_DATA register */ |
CharlesMaxim | 21:0b28b9d13164 | 196 | #define BMI160_TAP_SRC_INT_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 197 | #define BMI160_LOW_HIGH_SRC_INT_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 198 | #define BMI160_MOTION_SRC_INT_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 199 | |
CharlesMaxim | 21:0b28b9d13164 | 200 | /** Mask definitions for INT_MOTION register */ |
CharlesMaxim | 21:0b28b9d13164 | 201 | #define BMI160_SLOPE_INT_DUR_MASK UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 202 | #define BMI160_NO_MOTION_INT_DUR_MASK UINT8_C(0xFC) |
CharlesMaxim | 21:0b28b9d13164 | 203 | #define BMI160_NO_MOTION_SEL_BIT_MASK UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 204 | |
CharlesMaxim | 21:0b28b9d13164 | 205 | /** Mask definitions for INT_TAP register */ |
CharlesMaxim | 21:0b28b9d13164 | 206 | #define BMI160_TAP_DUR_MASK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 207 | #define BMI160_TAP_SHOCK_DUR_MASK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 208 | #define BMI160_TAP_QUIET_DUR_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 209 | #define BMI160_TAP_THRES_MASK UINT8_C(0x1F) |
CharlesMaxim | 21:0b28b9d13164 | 210 | |
CharlesMaxim | 21:0b28b9d13164 | 211 | /** Mask definitions for INT_FLAT register */ |
CharlesMaxim | 21:0b28b9d13164 | 212 | #define BMI160_FLAT_THRES_MASK UINT8_C(0x3F) |
CharlesMaxim | 21:0b28b9d13164 | 213 | #define BMI160_FLAT_HOLD_TIME_MASK UINT8_C(0x30) |
CharlesMaxim | 21:0b28b9d13164 | 214 | #define BMI160_FLAT_HYST_MASK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 215 | |
CharlesMaxim | 21:0b28b9d13164 | 216 | /** Mask definitions for INT_LOWHIGH register */ |
CharlesMaxim | 21:0b28b9d13164 | 217 | #define BMI160_LOW_G_HYST_MASK UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 218 | #define BMI160_LOW_G_LOW_MODE_MASK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 219 | #define BMI160_HIGH_G_HYST_MASK UINT8_C(0xC0) |
CharlesMaxim | 21:0b28b9d13164 | 220 | |
CharlesMaxim | 21:0b28b9d13164 | 221 | /** Mask definitions for INT_SIG_MOTION register */ |
CharlesMaxim | 21:0b28b9d13164 | 222 | #define BMI160_SIG_MOTION_SEL_MASK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 223 | #define BMI160_SIG_MOTION_SKIP_MASK UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 224 | #define BMI160_SIG_MOTION_PROOF_MASK UINT8_C(0x30) |
CharlesMaxim | 21:0b28b9d13164 | 225 | |
CharlesMaxim | 21:0b28b9d13164 | 226 | /** Mask definitions for INT_ORIENT register */ |
CharlesMaxim | 21:0b28b9d13164 | 227 | #define BMI160_ORIENT_MODE_MASK UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 228 | #define BMI160_ORIENT_BLOCK_MASK UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 229 | #define BMI160_ORIENT_HYST_MASK UINT8_C(0xF0) |
CharlesMaxim | 21:0b28b9d13164 | 230 | #define BMI160_ORIENT_THETA_MASK UINT8_C(0x3F) |
CharlesMaxim | 21:0b28b9d13164 | 231 | #define BMI160_ORIENT_UD_ENABLE UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 232 | #define BMI160_AXES_EN_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 233 | |
CharlesMaxim | 21:0b28b9d13164 | 234 | /** Mask definitions for FIFO_CONFIG register */ |
CharlesMaxim | 21:0b28b9d13164 | 235 | #define BMI160_FIFO_GYRO UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 236 | #define BMI160_FIFO_ACCEL UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 237 | #define BMI160_FIFO_AUX UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 238 | #define BMI160_FIFO_TAG_INT1 UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 239 | #define BMI160_FIFO_TAG_INT2 UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 240 | #define BMI160_FIFO_TIME UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 241 | #define BMI160_FIFO_HEADER UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 242 | #define BMI160_FIFO_CONFIG_1_MASK UINT8_C(0xFE) |
CharlesMaxim | 21:0b28b9d13164 | 243 | |
CharlesMaxim | 21:0b28b9d13164 | 244 | |
CharlesMaxim | 21:0b28b9d13164 | 245 | /** Mask definitions for STEP_CONF register */ |
CharlesMaxim | 21:0b28b9d13164 | 246 | #define BMI160_STEP_COUNT_EN_BIT_MASK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 247 | #define BMI160_STEP_DETECT_MIN_THRES_MASK UINT8_C(0x18) |
CharlesMaxim | 21:0b28b9d13164 | 248 | #define BMI160_STEP_DETECT_STEPTIME_MIN_MASK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 249 | #define BMI160_STEP_MIN_BUF_MASK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 250 | |
CharlesMaxim | 21:0b28b9d13164 | 251 | /** Mask definition for FIFO Header Data Tag */ |
CharlesMaxim | 21:0b28b9d13164 | 252 | #define BMI160_FIFO_TAG_INTR_MASK UINT8_C(0xFC) |
CharlesMaxim | 21:0b28b9d13164 | 253 | |
CharlesMaxim | 21:0b28b9d13164 | 254 | /** Fifo byte counter mask definitions */ |
CharlesMaxim | 21:0b28b9d13164 | 255 | #define BMI160_FIFO_BYTE_COUNTER_MASK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 256 | |
CharlesMaxim | 21:0b28b9d13164 | 257 | /** Enable/disable bit value */ |
CharlesMaxim | 21:0b28b9d13164 | 258 | #define BMI160_ENABLE 0x01 |
CharlesMaxim | 21:0b28b9d13164 | 259 | #define BMI160_DISABLE UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 260 | |
CharlesMaxim | 21:0b28b9d13164 | 261 | /** Latch Duration */ |
CharlesMaxim | 21:0b28b9d13164 | 262 | #define BMI160_LATCH_DUR_NONE UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 263 | #define BMI160_LATCH_DUR_312_5_MICRO_SEC UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 264 | #define BMI160_LATCH_DUR_625_MICRO_SEC UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 265 | #define BMI160_LATCH_DUR_1_25_MILLI_SEC UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 266 | #define BMI160_LATCH_DUR_2_5_MILLI_SEC UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 267 | #define BMI160_LATCH_DUR_5_MILLI_SEC UINT8_C(0x05) |
CharlesMaxim | 21:0b28b9d13164 | 268 | #define BMI160_LATCH_DUR_10_MILLI_SEC UINT8_C(0x06) |
CharlesMaxim | 21:0b28b9d13164 | 269 | #define BMI160_LATCH_DUR_20_MILLI_SEC UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 270 | #define BMI160_LATCH_DUR_40_MILLI_SEC UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 271 | #define BMI160_LATCH_DUR_80_MILLI_SEC UINT8_C(0x09) |
CharlesMaxim | 21:0b28b9d13164 | 272 | #define BMI160_LATCH_DUR_160_MILLI_SEC UINT8_C(0x0A) |
CharlesMaxim | 21:0b28b9d13164 | 273 | #define BMI160_LATCH_DUR_320_MILLI_SEC UINT8_C(0x0B) |
CharlesMaxim | 21:0b28b9d13164 | 274 | #define BMI160_LATCH_DUR_640_MILLI_SEC UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 275 | #define BMI160_LATCH_DUR_1_28_SEC UINT8_C(0x0D) |
CharlesMaxim | 21:0b28b9d13164 | 276 | #define BMI160_LATCH_DUR_2_56_SEC UINT8_C(0x0E) |
CharlesMaxim | 21:0b28b9d13164 | 277 | #define BMI160_LATCHED UINT8_C(0x0F) |
CharlesMaxim | 21:0b28b9d13164 | 278 | |
CharlesMaxim | 21:0b28b9d13164 | 279 | /** BMI160 Register map */ |
CharlesMaxim | 21:0b28b9d13164 | 280 | #define BMI160_CHIP_ID_ADDR UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 281 | #define BMI160_ERROR_REG_ADDR UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 282 | #define BMI160_PMU_STATUS_ADDR UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 283 | #define BMI160_AUX_DATA_ADDR UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 284 | #define BMI160_GYRO_DATA_ADDR UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 285 | #define BMI160_ACCEL_DATA_ADDR UINT8_C(0x12) |
CharlesMaxim | 21:0b28b9d13164 | 286 | #define BMI160_STATUS_ADDR UINT8_C(0x1B) |
CharlesMaxim | 21:0b28b9d13164 | 287 | #define BMI160_INT_STATUS_ADDR UINT8_C(0x1C) |
CharlesMaxim | 21:0b28b9d13164 | 288 | #define BMI160_FIFO_LENGTH_ADDR UINT8_C(0x22) |
CharlesMaxim | 21:0b28b9d13164 | 289 | #define BMI160_FIFO_DATA_ADDR UINT8_C(0x24) |
CharlesMaxim | 21:0b28b9d13164 | 290 | #define BMI160_ACCEL_CONFIG_ADDR UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 291 | #define BMI160_ACCEL_RANGE_ADDR UINT8_C(0x41) |
CharlesMaxim | 21:0b28b9d13164 | 292 | #define BMI160_GYRO_CONFIG_ADDR UINT8_C(0x42) |
CharlesMaxim | 21:0b28b9d13164 | 293 | #define BMI160_GYRO_RANGE_ADDR UINT8_C(0x43) |
CharlesMaxim | 21:0b28b9d13164 | 294 | #define BMI160_AUX_ODR_ADDR UINT8_C(0x44) |
CharlesMaxim | 21:0b28b9d13164 | 295 | #define BMI160_FIFO_DOWN_ADDR UINT8_C(0x45) |
CharlesMaxim | 21:0b28b9d13164 | 296 | #define BMI160_FIFO_CONFIG_0_ADDR UINT8_C(0x46) |
CharlesMaxim | 21:0b28b9d13164 | 297 | #define BMI160_FIFO_CONFIG_1_ADDR UINT8_C(0x47) |
CharlesMaxim | 21:0b28b9d13164 | 298 | #define BMI160_AUX_IF_0_ADDR UINT8_C(0x4B) |
CharlesMaxim | 21:0b28b9d13164 | 299 | #define BMI160_AUX_IF_1_ADDR UINT8_C(0x4C) |
CharlesMaxim | 21:0b28b9d13164 | 300 | #define BMI160_AUX_IF_2_ADDR UINT8_C(0x4D) |
CharlesMaxim | 21:0b28b9d13164 | 301 | #define BMI160_AUX_IF_3_ADDR UINT8_C(0x4E) |
CharlesMaxim | 21:0b28b9d13164 | 302 | #define BMI160_AUX_IF_4_ADDR UINT8_C(0x4F) |
CharlesMaxim | 21:0b28b9d13164 | 303 | #define BMI160_INT_ENABLE_0_ADDR UINT8_C(0x50) |
CharlesMaxim | 21:0b28b9d13164 | 304 | #define BMI160_INT_ENABLE_1_ADDR UINT8_C(0x51) |
CharlesMaxim | 21:0b28b9d13164 | 305 | #define BMI160_INT_ENABLE_2_ADDR UINT8_C(0x52) |
CharlesMaxim | 21:0b28b9d13164 | 306 | #define BMI160_INT_OUT_CTRL_ADDR UINT8_C(0x53) |
CharlesMaxim | 21:0b28b9d13164 | 307 | #define BMI160_INT_LATCH_ADDR UINT8_C(0x54) |
CharlesMaxim | 21:0b28b9d13164 | 308 | #define BMI160_INT_MAP_0_ADDR UINT8_C(0x55) |
CharlesMaxim | 21:0b28b9d13164 | 309 | #define BMI160_INT_MAP_1_ADDR UINT8_C(0x56) |
CharlesMaxim | 21:0b28b9d13164 | 310 | #define BMI160_INT_MAP_2_ADDR UINT8_C(0x57) |
CharlesMaxim | 21:0b28b9d13164 | 311 | #define BMI160_INT_DATA_0_ADDR UINT8_C(0x58) |
CharlesMaxim | 21:0b28b9d13164 | 312 | #define BMI160_INT_DATA_1_ADDR UINT8_C(0x59) |
CharlesMaxim | 21:0b28b9d13164 | 313 | #define BMI160_INT_LOWHIGH_0_ADDR UINT8_C(0x5A) |
CharlesMaxim | 21:0b28b9d13164 | 314 | #define BMI160_INT_LOWHIGH_1_ADDR UINT8_C(0x5B) |
CharlesMaxim | 21:0b28b9d13164 | 315 | #define BMI160_INT_LOWHIGH_2_ADDR UINT8_C(0x5C) |
CharlesMaxim | 21:0b28b9d13164 | 316 | #define BMI160_INT_LOWHIGH_3_ADDR UINT8_C(0x5D) |
CharlesMaxim | 21:0b28b9d13164 | 317 | #define BMI160_INT_LOWHIGH_4_ADDR UINT8_C(0x5E) |
CharlesMaxim | 21:0b28b9d13164 | 318 | #define BMI160_INT_MOTION_0_ADDR UINT8_C(0x5F) |
CharlesMaxim | 21:0b28b9d13164 | 319 | #define BMI160_INT_MOTION_1_ADDR UINT8_C(0x60) |
CharlesMaxim | 21:0b28b9d13164 | 320 | #define BMI160_INT_MOTION_2_ADDR UINT8_C(0x61) |
CharlesMaxim | 21:0b28b9d13164 | 321 | #define BMI160_INT_MOTION_3_ADDR UINT8_C(0x62) |
CharlesMaxim | 21:0b28b9d13164 | 322 | #define BMI160_INT_TAP_0_ADDR UINT8_C(0x63) |
CharlesMaxim | 21:0b28b9d13164 | 323 | #define BMI160_INT_TAP_1_ADDR UINT8_C(0x64) |
CharlesMaxim | 21:0b28b9d13164 | 324 | #define BMI160_INT_ORIENT_0_ADDR UINT8_C(0x65) |
CharlesMaxim | 21:0b28b9d13164 | 325 | #define BMI160_INT_ORIENT_1_ADDR UINT8_C(0x66) |
CharlesMaxim | 21:0b28b9d13164 | 326 | #define BMI160_INT_FLAT_0_ADDR UINT8_C(0x67) |
CharlesMaxim | 21:0b28b9d13164 | 327 | #define BMI160_INT_FLAT_1_ADDR UINT8_C(0x68) |
CharlesMaxim | 21:0b28b9d13164 | 328 | #define BMI160_FOC_CONF_ADDR UINT8_C(0x69) |
CharlesMaxim | 21:0b28b9d13164 | 329 | #define BMI160_CONF_ADDR UINT8_C(0x6A) |
CharlesMaxim | 21:0b28b9d13164 | 330 | |
CharlesMaxim | 21:0b28b9d13164 | 331 | #define BMI160_IF_CONF_ADDR UINT8_C(0x6B) |
CharlesMaxim | 21:0b28b9d13164 | 332 | #define BMI160_SELF_TEST_ADDR UINT8_C(0x6D) |
CharlesMaxim | 21:0b28b9d13164 | 333 | #define BMI160_OFFSET_ADDR UINT8_C(0x71) |
CharlesMaxim | 21:0b28b9d13164 | 334 | #define BMI160_OFFSET_CONF_ADDR UINT8_C(0x77) |
CharlesMaxim | 21:0b28b9d13164 | 335 | #define BMI160_INT_STEP_CNT_0_ADDR UINT8_C(0x78) |
CharlesMaxim | 21:0b28b9d13164 | 336 | #define BMI160_INT_STEP_CONFIG_0_ADDR UINT8_C(0x7A) |
CharlesMaxim | 21:0b28b9d13164 | 337 | #define BMI160_INT_STEP_CONFIG_1_ADDR UINT8_C(0x7B) |
CharlesMaxim | 21:0b28b9d13164 | 338 | #define BMI160_COMMAND_REG_ADDR UINT8_C(0x7E) |
CharlesMaxim | 21:0b28b9d13164 | 339 | #define BMI160_SPI_COMM_TEST_ADDR UINT8_C(0x7F) |
CharlesMaxim | 21:0b28b9d13164 | 340 | #define BMI160_INTL_PULLUP_CONF_ADDR UINT8_C(0x85) |
CharlesMaxim | 21:0b28b9d13164 | 341 | |
CharlesMaxim | 21:0b28b9d13164 | 342 | /** Error code definitions */ |
CharlesMaxim | 21:0b28b9d13164 | 343 | #define BMI160_OK 0 |
CharlesMaxim | 21:0b28b9d13164 | 344 | #define BMI160_E_NULL_PTR INT8_C(-1) |
CharlesMaxim | 21:0b28b9d13164 | 345 | #define BMI160_E_COM_FAIL INT8_C(-2) |
CharlesMaxim | 21:0b28b9d13164 | 346 | #define BMI160_E_DEV_NOT_FOUND INT8_C(-3) |
CharlesMaxim | 21:0b28b9d13164 | 347 | #define BMI160_E_OUT_OF_RANGE INT8_C(-4) |
CharlesMaxim | 21:0b28b9d13164 | 348 | #define BMI160_E_INVALID_INPUT INT8_C(-5) |
CharlesMaxim | 21:0b28b9d13164 | 349 | #define BMI160_E_ACCEL_ODR_BW_INVALID INT8_C(-6) |
CharlesMaxim | 21:0b28b9d13164 | 350 | #define BMI160_E_GYRO_ODR_BW_INVALID INT8_C(-7) |
CharlesMaxim | 21:0b28b9d13164 | 351 | #define BMI160_E_LWP_PRE_FLTR_INT_INVALID INT8_C(-8) |
CharlesMaxim | 21:0b28b9d13164 | 352 | #define BMI160_E_LWP_PRE_FLTR_INVALID INT8_C(-9) |
CharlesMaxim | 21:0b28b9d13164 | 353 | #define BMI160_E_AUX_NOT_FOUND INT8_C(-10) |
CharlesMaxim | 21:0b28b9d13164 | 354 | #define BMI160_FOC_FAILURE INT8_C(-11) |
CharlesMaxim | 21:0b28b9d13164 | 355 | |
CharlesMaxim | 21:0b28b9d13164 | 356 | /**\name API warning codes */ |
CharlesMaxim | 21:0b28b9d13164 | 357 | #define BMI160_W_GYRO_SELF_TEST_FAIL INT8_C(1) |
CharlesMaxim | 21:0b28b9d13164 | 358 | #define BMI160_W_ACCEl_SELF_TEST_FAIL INT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 359 | |
CharlesMaxim | 21:0b28b9d13164 | 360 | /** BMI160 unique chip identifier */ |
CharlesMaxim | 21:0b28b9d13164 | 361 | #define BMI160_CHIP_ID UINT8_C(0xD1) |
CharlesMaxim | 21:0b28b9d13164 | 362 | |
CharlesMaxim | 21:0b28b9d13164 | 363 | /** Soft reset command */ |
CharlesMaxim | 21:0b28b9d13164 | 364 | #define BMI160_SOFT_RESET_CMD UINT8_C(0xb6) |
CharlesMaxim | 21:0b28b9d13164 | 365 | #define BMI160_SOFT_RESET_DELAY_MS UINT8_C(15) |
CharlesMaxim | 21:0b28b9d13164 | 366 | /** Start FOC command */ |
CharlesMaxim | 21:0b28b9d13164 | 367 | #define BMI160_START_FOC_CMD UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 368 | /** NVM backup enabling command */ |
CharlesMaxim | 21:0b28b9d13164 | 369 | #define BMI160_NVM_BACKUP_EN UINT8_C(0xA0) |
CharlesMaxim | 21:0b28b9d13164 | 370 | |
CharlesMaxim | 21:0b28b9d13164 | 371 | /* Delay in ms settings */ |
CharlesMaxim | 21:0b28b9d13164 | 372 | #define BMI160_ACCEL_DELAY_MS UINT8_C(5) |
CharlesMaxim | 21:0b28b9d13164 | 373 | #define BMI160_GYRO_DELAY_MS UINT8_C(81) |
CharlesMaxim | 21:0b28b9d13164 | 374 | #define BMI160_ONE_MS_DELAY UINT8_C(1) |
CharlesMaxim | 21:0b28b9d13164 | 375 | #define BMI160_AUX_COM_DELAY UINT8_C(10) |
CharlesMaxim | 21:0b28b9d13164 | 376 | #define BMI160_GYRO_SELF_TEST_DELAY UINT8_C(20) |
CharlesMaxim | 21:0b28b9d13164 | 377 | #define BMI160_ACCEL_SELF_TEST_DELAY UINT8_C(50) |
CharlesMaxim | 21:0b28b9d13164 | 378 | |
CharlesMaxim | 21:0b28b9d13164 | 379 | /** Self test configurations */ |
CharlesMaxim | 21:0b28b9d13164 | 380 | #define BMI160_ACCEL_SELF_TEST_CONFIG UINT8_C(0x2C) |
CharlesMaxim | 21:0b28b9d13164 | 381 | #define BMI160_ACCEL_SELF_TEST_POSITIVE_EN UINT8_C(0x0D) |
CharlesMaxim | 21:0b28b9d13164 | 382 | #define BMI160_ACCEL_SELF_TEST_NEGATIVE_EN UINT8_C(0x09) |
CharlesMaxim | 21:0b28b9d13164 | 383 | #define BMI160_ACCEL_SELF_TEST_LIMIT UINT16_C(8192) |
CharlesMaxim | 21:0b28b9d13164 | 384 | |
CharlesMaxim | 21:0b28b9d13164 | 385 | /** Power mode settings */ |
CharlesMaxim | 21:0b28b9d13164 | 386 | /* Accel power mode */ |
CharlesMaxim | 21:0b28b9d13164 | 387 | #define BMI160_ACCEL_NORMAL_MODE UINT8_C(0x11) |
CharlesMaxim | 21:0b28b9d13164 | 388 | #define BMI160_ACCEL_LOWPOWER_MODE UINT8_C(0x12) |
CharlesMaxim | 21:0b28b9d13164 | 389 | #define BMI160_ACCEL_SUSPEND_MODE UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 390 | |
CharlesMaxim | 21:0b28b9d13164 | 391 | /* Gyro power mode */ |
CharlesMaxim | 21:0b28b9d13164 | 392 | #define BMI160_GYRO_SUSPEND_MODE UINT8_C(0x14) |
CharlesMaxim | 21:0b28b9d13164 | 393 | #define BMI160_GYRO_NORMAL_MODE UINT8_C(0x15) |
CharlesMaxim | 21:0b28b9d13164 | 394 | #define BMI160_GYRO_FASTSTARTUP_MODE UINT8_C(0x17) |
CharlesMaxim | 21:0b28b9d13164 | 395 | |
CharlesMaxim | 21:0b28b9d13164 | 396 | /* Aux power mode */ |
CharlesMaxim | 21:0b28b9d13164 | 397 | #define BMI160_AUX_SUSPEND_MODE UINT8_C(0x18) |
CharlesMaxim | 21:0b28b9d13164 | 398 | #define BMI160_AUX_NORMAL_MODE UINT8_C(0x19) |
CharlesMaxim | 21:0b28b9d13164 | 399 | #define BMI160_AUX_LOWPOWER_MODE UINT8_C(0x1A) |
CharlesMaxim | 21:0b28b9d13164 | 400 | |
CharlesMaxim | 21:0b28b9d13164 | 401 | /** Range settings */ |
CharlesMaxim | 21:0b28b9d13164 | 402 | /* Accel Range */ |
CharlesMaxim | 21:0b28b9d13164 | 403 | #define BMI160_ACCEL_RANGE_2G UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 404 | #define BMI160_ACCEL_RANGE_4G UINT8_C(0x05) |
CharlesMaxim | 21:0b28b9d13164 | 405 | #define BMI160_ACCEL_RANGE_8G UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 406 | #define BMI160_ACCEL_RANGE_16G UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 407 | |
CharlesMaxim | 21:0b28b9d13164 | 408 | /* Gyro Range */ |
CharlesMaxim | 21:0b28b9d13164 | 409 | #define BMI160_GYRO_RANGE_2000_DPS UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 410 | #define BMI160_GYRO_RANGE_1000_DPS UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 411 | #define BMI160_GYRO_RANGE_500_DPS UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 412 | #define BMI160_GYRO_RANGE_250_DPS UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 413 | #define BMI160_GYRO_RANGE_125_DPS UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 414 | |
CharlesMaxim | 21:0b28b9d13164 | 415 | /** Bandwidth settings */ |
CharlesMaxim | 21:0b28b9d13164 | 416 | /* Accel Bandwidth */ |
CharlesMaxim | 21:0b28b9d13164 | 417 | #define BMI160_ACCEL_BW_OSR4_AVG1 UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 418 | #define BMI160_ACCEL_BW_OSR2_AVG2 UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 419 | #define BMI160_ACCEL_BW_NORMAL_AVG4 UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 420 | #define BMI160_ACCEL_BW_RES_AVG8 UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 421 | #define BMI160_ACCEL_BW_RES_AVG16 UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 422 | #define BMI160_ACCEL_BW_RES_AVG32 UINT8_C(0x05) |
CharlesMaxim | 21:0b28b9d13164 | 423 | #define BMI160_ACCEL_BW_RES_AVG64 UINT8_C(0x06) |
CharlesMaxim | 21:0b28b9d13164 | 424 | #define BMI160_ACCEL_BW_RES_AVG128 UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 425 | |
CharlesMaxim | 21:0b28b9d13164 | 426 | #define BMI160_GYRO_BW_OSR4_MODE UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 427 | #define BMI160_GYRO_BW_OSR2_MODE UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 428 | #define BMI160_GYRO_BW_NORMAL_MODE UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 429 | |
CharlesMaxim | 21:0b28b9d13164 | 430 | /* Output Data Rate settings */ |
CharlesMaxim | 21:0b28b9d13164 | 431 | /* Accel Output data rate */ |
CharlesMaxim | 21:0b28b9d13164 | 432 | #define BMI160_ACCEL_ODR_RESERVED UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 433 | #define BMI160_ACCEL_ODR_0_78HZ UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 434 | #define BMI160_ACCEL_ODR_1_56HZ UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 435 | #define BMI160_ACCEL_ODR_3_12HZ UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 436 | #define BMI160_ACCEL_ODR_6_25HZ UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 437 | #define BMI160_ACCEL_ODR_12_5HZ UINT8_C(0x05) |
CharlesMaxim | 21:0b28b9d13164 | 438 | #define BMI160_ACCEL_ODR_25HZ UINT8_C(0x06) |
CharlesMaxim | 21:0b28b9d13164 | 439 | #define BMI160_ACCEL_ODR_50HZ UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 440 | #define BMI160_ACCEL_ODR_100HZ UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 441 | #define BMI160_ACCEL_ODR_200HZ UINT8_C(0x09) |
CharlesMaxim | 21:0b28b9d13164 | 442 | #define BMI160_ACCEL_ODR_400HZ UINT8_C(0x0A) |
CharlesMaxim | 21:0b28b9d13164 | 443 | #define BMI160_ACCEL_ODR_800HZ UINT8_C(0x0B) |
CharlesMaxim | 21:0b28b9d13164 | 444 | #define BMI160_ACCEL_ODR_1600HZ UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 445 | #define BMI160_ACCEL_ODR_RESERVED0 UINT8_C(0x0D) |
CharlesMaxim | 21:0b28b9d13164 | 446 | #define BMI160_ACCEL_ODR_RESERVED1 UINT8_C(0x0E) |
CharlesMaxim | 21:0b28b9d13164 | 447 | #define BMI160_ACCEL_ODR_RESERVED2 UINT8_C(0x0F) |
CharlesMaxim | 21:0b28b9d13164 | 448 | |
CharlesMaxim | 21:0b28b9d13164 | 449 | /* Gyro Output data rate */ |
CharlesMaxim | 21:0b28b9d13164 | 450 | #define BMI160_GYRO_ODR_RESERVED UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 451 | #define BMI160_GYRO_ODR_25HZ UINT8_C(0x06) |
CharlesMaxim | 21:0b28b9d13164 | 452 | #define BMI160_GYRO_ODR_50HZ UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 453 | #define BMI160_GYRO_ODR_100HZ UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 454 | #define BMI160_GYRO_ODR_200HZ UINT8_C(0x09) |
CharlesMaxim | 21:0b28b9d13164 | 455 | #define BMI160_GYRO_ODR_400HZ UINT8_C(0x0A) |
CharlesMaxim | 21:0b28b9d13164 | 456 | #define BMI160_GYRO_ODR_800HZ UINT8_C(0x0B) |
CharlesMaxim | 21:0b28b9d13164 | 457 | #define BMI160_GYRO_ODR_1600HZ UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 458 | #define BMI160_GYRO_ODR_3200HZ UINT8_C(0x0D) |
CharlesMaxim | 21:0b28b9d13164 | 459 | |
CharlesMaxim | 21:0b28b9d13164 | 460 | /* Auxiliary sensor Output data rate */ |
CharlesMaxim | 21:0b28b9d13164 | 461 | #define BMI160_AUX_ODR_RESERVED UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 462 | #define BMI160_AUX_ODR_0_78HZ UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 463 | #define BMI160_AUX_ODR_1_56HZ UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 464 | #define BMI160_AUX_ODR_3_12HZ UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 465 | #define BMI160_AUX_ODR_6_25HZ UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 466 | #define BMI160_AUX_ODR_12_5HZ UINT8_C(0x05) |
CharlesMaxim | 21:0b28b9d13164 | 467 | #define BMI160_AUX_ODR_25HZ UINT8_C(0x06) |
CharlesMaxim | 21:0b28b9d13164 | 468 | #define BMI160_AUX_ODR_50HZ UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 469 | #define BMI160_AUX_ODR_100HZ UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 470 | #define BMI160_AUX_ODR_200HZ UINT8_C(0x09) |
CharlesMaxim | 21:0b28b9d13164 | 471 | #define BMI160_AUX_ODR_400HZ UINT8_C(0x0A) |
CharlesMaxim | 21:0b28b9d13164 | 472 | #define BMI160_AUX_ODR_800HZ UINT8_C(0x0B) |
CharlesMaxim | 21:0b28b9d13164 | 473 | |
CharlesMaxim | 21:0b28b9d13164 | 474 | /* Maximum limits definition */ |
CharlesMaxim | 21:0b28b9d13164 | 475 | #define BMI160_ACCEL_ODR_MAX UINT8_C(15) |
CharlesMaxim | 21:0b28b9d13164 | 476 | #define BMI160_ACCEL_BW_MAX UINT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 477 | #define BMI160_ACCEL_RANGE_MAX UINT8_C(12) |
CharlesMaxim | 21:0b28b9d13164 | 478 | #define BMI160_GYRO_ODR_MAX UINT8_C(13) |
CharlesMaxim | 21:0b28b9d13164 | 479 | #define BMI160_GYRO_BW_MAX UINT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 480 | #define BMI160_GYRO_RANGE_MAX UINT8_C(4) |
CharlesMaxim | 21:0b28b9d13164 | 481 | |
CharlesMaxim | 21:0b28b9d13164 | 482 | /** FIFO_CONFIG Definitions */ |
CharlesMaxim | 21:0b28b9d13164 | 483 | #define BMI160_FIFO_TIME_ENABLE UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 484 | #define BMI160_FIFO_TAG_INT2_ENABLE UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 485 | #define BMI160_FIFO_TAG_INT1_ENABLE UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 486 | #define BMI160_FIFO_HEAD_ENABLE UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 487 | #define BMI160_FIFO_M_ENABLE UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 488 | #define BMI160_FIFO_A_ENABLE UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 489 | #define BMI160_FIFO_M_A_ENABLE UINT8_C(0x60) |
CharlesMaxim | 21:0b28b9d13164 | 490 | #define BMI160_FIFO_G_ENABLE UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 491 | #define BMI160_FIFO_M_G_ENABLE UINT8_C(0xA0) |
CharlesMaxim | 21:0b28b9d13164 | 492 | #define BMI160_FIFO_G_A_ENABLE UINT8_C(0xC0) |
CharlesMaxim | 21:0b28b9d13164 | 493 | #define BMI160_FIFO_M_G_A_ENABLE UINT8_C(0xE0) |
CharlesMaxim | 21:0b28b9d13164 | 494 | |
CharlesMaxim | 21:0b28b9d13164 | 495 | /* Macro to specify the number of bytes over-read from the |
CharlesMaxim | 21:0b28b9d13164 | 496 | * FIFO in order to get the sensor time at the end of FIFO */ |
CharlesMaxim | 21:0b28b9d13164 | 497 | #ifndef BMI160_FIFO_BYTES_OVERREAD |
CharlesMaxim | 21:0b28b9d13164 | 498 | #define BMI160_FIFO_BYTES_OVERREAD UINT8_C(25) |
CharlesMaxim | 21:0b28b9d13164 | 499 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 500 | |
CharlesMaxim | 21:0b28b9d13164 | 501 | |
CharlesMaxim | 21:0b28b9d13164 | 502 | |
CharlesMaxim | 21:0b28b9d13164 | 503 | /* Accel, gyro and aux. sensor length and also their combined |
CharlesMaxim | 21:0b28b9d13164 | 504 | * length definitions in FIFO */ |
CharlesMaxim | 21:0b28b9d13164 | 505 | #define BMI160_FIFO_G_LENGTH UINT8_C(6) |
CharlesMaxim | 21:0b28b9d13164 | 506 | #define BMI160_FIFO_A_LENGTH UINT8_C(6) |
CharlesMaxim | 21:0b28b9d13164 | 507 | #define BMI160_FIFO_M_LENGTH UINT8_C(8) |
CharlesMaxim | 21:0b28b9d13164 | 508 | #define BMI160_FIFO_GA_LENGTH UINT8_C(12) |
CharlesMaxim | 21:0b28b9d13164 | 509 | #define BMI160_FIFO_MA_LENGTH UINT8_C(14) |
CharlesMaxim | 21:0b28b9d13164 | 510 | #define BMI160_FIFO_MG_LENGTH UINT8_C(14) |
CharlesMaxim | 21:0b28b9d13164 | 511 | #define BMI160_FIFO_MGA_LENGTH UINT8_C(20) |
CharlesMaxim | 21:0b28b9d13164 | 512 | |
CharlesMaxim | 21:0b28b9d13164 | 513 | |
CharlesMaxim | 21:0b28b9d13164 | 514 | /** FIFO Header Data definitions */ |
CharlesMaxim | 21:0b28b9d13164 | 515 | #define BMI160_FIFO_HEAD_SKIP_FRAME UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 516 | #define BMI160_FIFO_HEAD_SENSOR_TIME UINT8_C(0x44) |
CharlesMaxim | 21:0b28b9d13164 | 517 | #define BMI160_FIFO_HEAD_INPUT_CONFIG UINT8_C(0x48) |
CharlesMaxim | 21:0b28b9d13164 | 518 | #define BMI160_FIFO_HEAD_OVER_READ UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 519 | #define BMI160_FIFO_HEAD_A UINT8_C(0x84) |
CharlesMaxim | 21:0b28b9d13164 | 520 | #define BMI160_FIFO_HEAD_G UINT8_C(0x88) |
CharlesMaxim | 21:0b28b9d13164 | 521 | #define BMI160_FIFO_HEAD_G_A UINT8_C(0x8C) |
CharlesMaxim | 21:0b28b9d13164 | 522 | #define BMI160_FIFO_HEAD_M UINT8_C(0x90) |
CharlesMaxim | 21:0b28b9d13164 | 523 | #define BMI160_FIFO_HEAD_M_A UINT8_C(0x94) |
CharlesMaxim | 21:0b28b9d13164 | 524 | #define BMI160_FIFO_HEAD_M_G UINT8_C(0x98) |
CharlesMaxim | 21:0b28b9d13164 | 525 | #define BMI160_FIFO_HEAD_M_G_A UINT8_C(0x9C) |
CharlesMaxim | 21:0b28b9d13164 | 526 | |
CharlesMaxim | 21:0b28b9d13164 | 527 | |
CharlesMaxim | 21:0b28b9d13164 | 528 | /** FIFO sensor time length definitions */ |
CharlesMaxim | 21:0b28b9d13164 | 529 | #define BMI160_SENSOR_TIME_LENGTH UINT8_C(3) |
CharlesMaxim | 21:0b28b9d13164 | 530 | |
CharlesMaxim | 21:0b28b9d13164 | 531 | |
CharlesMaxim | 21:0b28b9d13164 | 532 | /** FIFO DOWN selection */ |
CharlesMaxim | 21:0b28b9d13164 | 533 | /* Accel fifo down-sampling values*/ |
CharlesMaxim | 21:0b28b9d13164 | 534 | #define BMI160_ACCEL_FIFO_DOWN_ZERO UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 535 | #define BMI160_ACCEL_FIFO_DOWN_ONE UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 536 | #define BMI160_ACCEL_FIFO_DOWN_TWO UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 537 | #define BMI160_ACCEL_FIFO_DOWN_THREE UINT8_C(0x30) |
CharlesMaxim | 21:0b28b9d13164 | 538 | #define BMI160_ACCEL_FIFO_DOWN_FOUR UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 539 | #define BMI160_ACCEL_FIFO_DOWN_FIVE UINT8_C(0x50) |
CharlesMaxim | 21:0b28b9d13164 | 540 | #define BMI160_ACCEL_FIFO_DOWN_SIX UINT8_C(0x60) |
CharlesMaxim | 21:0b28b9d13164 | 541 | #define BMI160_ACCEL_FIFO_DOWN_SEVEN UINT8_C(0x70) |
CharlesMaxim | 21:0b28b9d13164 | 542 | |
CharlesMaxim | 21:0b28b9d13164 | 543 | /* Gyro fifo down-smapling values*/ |
CharlesMaxim | 21:0b28b9d13164 | 544 | #define BMI160_GYRO_FIFO_DOWN_ZERO UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 545 | #define BMI160_GYRO_FIFO_DOWN_ONE UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 546 | #define BMI160_GYRO_FIFO_DOWN_TWO UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 547 | #define BMI160_GYRO_FIFO_DOWN_THREE UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 548 | #define BMI160_GYRO_FIFO_DOWN_FOUR UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 549 | #define BMI160_GYRO_FIFO_DOWN_FIVE UINT8_C(0x05) |
CharlesMaxim | 21:0b28b9d13164 | 550 | #define BMI160_GYRO_FIFO_DOWN_SIX UINT8_C(0x06) |
CharlesMaxim | 21:0b28b9d13164 | 551 | #define BMI160_GYRO_FIFO_DOWN_SEVEN UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 552 | |
CharlesMaxim | 21:0b28b9d13164 | 553 | /* Accel Fifo filter enable*/ |
CharlesMaxim | 21:0b28b9d13164 | 554 | #define BMI160_ACCEL_FIFO_FILT_EN UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 555 | |
CharlesMaxim | 21:0b28b9d13164 | 556 | /* Gyro Fifo filter enable*/ |
CharlesMaxim | 21:0b28b9d13164 | 557 | #define BMI160_GYRO_FIFO_FILT_EN UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 558 | |
CharlesMaxim | 21:0b28b9d13164 | 559 | /** Definitions to check validity of FIFO frames */ |
CharlesMaxim | 21:0b28b9d13164 | 560 | #define FIFO_CONFIG_MSB_CHECK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 561 | #define FIFO_CONFIG_LSB_CHECK UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 562 | |
CharlesMaxim | 21:0b28b9d13164 | 563 | /*! BMI160 accel FOC configurations */ |
CharlesMaxim | 21:0b28b9d13164 | 564 | #define BMI160_FOC_ACCEL_DISABLED UINT8_C(0x00) |
CharlesMaxim | 21:0b28b9d13164 | 565 | #define BMI160_FOC_ACCEL_POSITIVE_G 0x01 |
CharlesMaxim | 21:0b28b9d13164 | 566 | #define BMI160_FOC_ACCEL_NEGATIVE_G 0x02 |
CharlesMaxim | 21:0b28b9d13164 | 567 | #define BMI160_FOC_ACCEL_0G 0x03 |
CharlesMaxim | 21:0b28b9d13164 | 568 | |
CharlesMaxim | 21:0b28b9d13164 | 569 | /** Array Parameter DefinItions */ |
CharlesMaxim | 21:0b28b9d13164 | 570 | #define BMI160_SENSOR_TIME_LSB_BYTE UINT8_C(0) |
CharlesMaxim | 21:0b28b9d13164 | 571 | #define BMI160_SENSOR_TIME_XLSB_BYTE UINT8_C(1) |
CharlesMaxim | 21:0b28b9d13164 | 572 | #define BMI160_SENSOR_TIME_MSB_BYTE UINT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 573 | |
CharlesMaxim | 21:0b28b9d13164 | 574 | |
CharlesMaxim | 21:0b28b9d13164 | 575 | /** Interface settings */ |
CharlesMaxim | 21:0b28b9d13164 | 576 | #define BMI160_SPI_INTF UINT8_C(1) |
CharlesMaxim | 21:0b28b9d13164 | 577 | #define BMI160_I2C_INTF UINT8_C(0) |
CharlesMaxim | 21:0b28b9d13164 | 578 | #define BMI160_SPI_RD_MASK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 579 | #define BMI160_SPI_WR_MASK UINT8_C(0x7F) |
CharlesMaxim | 21:0b28b9d13164 | 580 | |
CharlesMaxim | 21:0b28b9d13164 | 581 | /* Sensor & time select definition*/ |
CharlesMaxim | 21:0b28b9d13164 | 582 | #define BMI160_ACCEL_SEL UINT8_C(0x01) |
CharlesMaxim | 21:0b28b9d13164 | 583 | #define BMI160_GYRO_SEL UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 584 | #define BMI160_TIME_SEL UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 585 | |
CharlesMaxim | 21:0b28b9d13164 | 586 | /* Sensor select mask*/ |
CharlesMaxim | 21:0b28b9d13164 | 587 | #define BMI160_SEN_SEL_MASK UINT8_C(0x07) |
CharlesMaxim | 21:0b28b9d13164 | 588 | |
CharlesMaxim | 21:0b28b9d13164 | 589 | /* Error code mask */ |
CharlesMaxim | 21:0b28b9d13164 | 590 | #define BMI160_ERR_REG_MASK UINT8_C(0x0F) |
CharlesMaxim | 21:0b28b9d13164 | 591 | |
CharlesMaxim | 21:0b28b9d13164 | 592 | /* BMI160 I2C address */ |
CharlesMaxim | 21:0b28b9d13164 | 593 | #define BMI160_I2C_ADDR UINT8_C(0x68) |
CharlesMaxim | 21:0b28b9d13164 | 594 | |
CharlesMaxim | 21:0b28b9d13164 | 595 | /* BMI160 secondary IF address */ |
CharlesMaxim | 21:0b28b9d13164 | 596 | #define BMI160_AUX_BMM150_I2C_ADDR UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 597 | |
CharlesMaxim | 21:0b28b9d13164 | 598 | /** BMI160 Length definitions */ |
CharlesMaxim | 21:0b28b9d13164 | 599 | #define BMI160_ONE UINT8_C(1) |
CharlesMaxim | 21:0b28b9d13164 | 600 | #define BMI160_TWO UINT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 601 | #define BMI160_THREE UINT8_C(3) |
CharlesMaxim | 21:0b28b9d13164 | 602 | #define BMI160_FOUR UINT8_C(4) |
CharlesMaxim | 21:0b28b9d13164 | 603 | #define BMI160_FIVE UINT8_C(5) |
CharlesMaxim | 21:0b28b9d13164 | 604 | |
CharlesMaxim | 21:0b28b9d13164 | 605 | /** BMI160 fifo level Margin */ |
CharlesMaxim | 21:0b28b9d13164 | 606 | #define BMI160_FIFO_LEVEL_MARGIN UINT8_C(16) |
CharlesMaxim | 21:0b28b9d13164 | 607 | |
CharlesMaxim | 21:0b28b9d13164 | 608 | /** BMI160 fifo flush Command */ |
CharlesMaxim | 21:0b28b9d13164 | 609 | #define BMI160_FIFO_FLUSH_VALUE UINT8_C(0xB0) |
CharlesMaxim | 21:0b28b9d13164 | 610 | |
CharlesMaxim | 21:0b28b9d13164 | 611 | /** BMI160 offset values for xyz axes of accel */ |
CharlesMaxim | 21:0b28b9d13164 | 612 | #define BMI160_ACCEL_MIN_OFFSET INT8_C(-128) |
CharlesMaxim | 21:0b28b9d13164 | 613 | #define BMI160_ACCEL_MAX_OFFSET INT8_C(127) |
CharlesMaxim | 21:0b28b9d13164 | 614 | |
CharlesMaxim | 21:0b28b9d13164 | 615 | /** BMI160 offset values for xyz axes of gyro */ |
CharlesMaxim | 21:0b28b9d13164 | 616 | #define BMI160_GYRO_MIN_OFFSET INT16_C(-512) |
CharlesMaxim | 21:0b28b9d13164 | 617 | #define BMI160_GYRO_MAX_OFFSET INT16_C(511) |
CharlesMaxim | 21:0b28b9d13164 | 618 | |
CharlesMaxim | 21:0b28b9d13164 | 619 | /** BMI160 fifo full interrupt position and mask */ |
CharlesMaxim | 21:0b28b9d13164 | 620 | #define BMI160_FIFO_FULL_INT_POS UINT8_C(5) |
CharlesMaxim | 21:0b28b9d13164 | 621 | #define BMI160_FIFO_FULL_INT_MSK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 622 | #define BMI160_FIFO_WTM_INT_POS UINT8_C(6) |
CharlesMaxim | 21:0b28b9d13164 | 623 | #define BMI160_FIFO_WTM_INT_MSK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 624 | |
CharlesMaxim | 21:0b28b9d13164 | 625 | #define BMI160_FIFO_FULL_INT_PIN1_POS UINT8_C(5) |
CharlesMaxim | 21:0b28b9d13164 | 626 | #define BMI160_FIFO_FULL_INT_PIN1_MSK UINT8_C(0x20) |
CharlesMaxim | 21:0b28b9d13164 | 627 | #define BMI160_FIFO_FULL_INT_PIN2_POS UINT8_C(1) |
CharlesMaxim | 21:0b28b9d13164 | 628 | #define BMI160_FIFO_FULL_INT_PIN2_MSK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 629 | |
CharlesMaxim | 21:0b28b9d13164 | 630 | #define BMI160_FIFO_WTM_INT_PIN1_POS UINT8_C(6) |
CharlesMaxim | 21:0b28b9d13164 | 631 | #define BMI160_FIFO_WTM_INT_PIN1_MSK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 632 | #define BMI160_FIFO_WTM_INT_PIN2_POS UINT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 633 | #define BMI160_FIFO_WTM_INT_PIN2_MSK UINT8_C(0x04) |
CharlesMaxim | 21:0b28b9d13164 | 634 | |
CharlesMaxim | 21:0b28b9d13164 | 635 | #define BMI160_MANUAL_MODE_EN_POS UINT8_C(7) |
CharlesMaxim | 21:0b28b9d13164 | 636 | #define BMI160_MANUAL_MODE_EN_MSK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 637 | #define BMI160_AUX_READ_BURST_POS UINT8_C(0) |
CharlesMaxim | 21:0b28b9d13164 | 638 | #define BMI160_AUX_READ_BURST_MSK UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 639 | |
CharlesMaxim | 21:0b28b9d13164 | 640 | #define BMI160_GYRO_SELF_TEST_POS UINT8_C(4) |
CharlesMaxim | 21:0b28b9d13164 | 641 | #define BMI160_GYRO_SELF_TEST_MSK UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 642 | #define BMI160_GYRO_SELF_TEST_STATUS_POS UINT8_C(1) |
CharlesMaxim | 21:0b28b9d13164 | 643 | #define BMI160_GYRO_SELF_TEST_STATUS_MSK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 644 | |
CharlesMaxim | 21:0b28b9d13164 | 645 | #define BMI160_GYRO_FOC_EN_POS UINT8_C(6) |
CharlesMaxim | 21:0b28b9d13164 | 646 | #define BMI160_GYRO_FOC_EN_MSK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 647 | |
CharlesMaxim | 21:0b28b9d13164 | 648 | #define BMI160_ACCEL_FOC_X_CONF_POS UINT8_C(4) |
CharlesMaxim | 21:0b28b9d13164 | 649 | #define BMI160_ACCEL_FOC_X_CONF_MSK UINT8_C(0x30) |
CharlesMaxim | 21:0b28b9d13164 | 650 | |
CharlesMaxim | 21:0b28b9d13164 | 651 | #define BMI160_ACCEL_FOC_Y_CONF_POS UINT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 652 | #define BMI160_ACCEL_FOC_Y_CONF_MSK UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 653 | |
CharlesMaxim | 21:0b28b9d13164 | 654 | #define BMI160_ACCEL_FOC_Z_CONF_MSK UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 655 | |
CharlesMaxim | 21:0b28b9d13164 | 656 | #define BMI160_FOC_STATUS_POS UINT8_C(3) |
CharlesMaxim | 21:0b28b9d13164 | 657 | #define BMI160_FOC_STATUS_MSK UINT8_C(0x08) |
CharlesMaxim | 21:0b28b9d13164 | 658 | |
CharlesMaxim | 21:0b28b9d13164 | 659 | #define BMI160_GYRO_OFFSET_X_MSK UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 660 | |
CharlesMaxim | 21:0b28b9d13164 | 661 | #define BMI160_GYRO_OFFSET_Y_POS UINT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 662 | #define BMI160_GYRO_OFFSET_Y_MSK UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 663 | |
CharlesMaxim | 21:0b28b9d13164 | 664 | #define BMI160_GYRO_OFFSET_Z_POS UINT8_C(4) |
CharlesMaxim | 21:0b28b9d13164 | 665 | #define BMI160_GYRO_OFFSET_Z_MSK UINT8_C(0x30) |
CharlesMaxim | 21:0b28b9d13164 | 666 | |
CharlesMaxim | 21:0b28b9d13164 | 667 | #define BMI160_GYRO_OFFSET_EN_POS UINT8_C(7) |
CharlesMaxim | 21:0b28b9d13164 | 668 | #define BMI160_GYRO_OFFSET_EN_MSK UINT8_C(0x80) |
CharlesMaxim | 21:0b28b9d13164 | 669 | |
CharlesMaxim | 21:0b28b9d13164 | 670 | #define BMI160_ACCEL_OFFSET_EN_POS UINT8_C(6) |
CharlesMaxim | 21:0b28b9d13164 | 671 | #define BMI160_ACCEL_OFFSET_EN_MSK UINT8_C(0x40) |
CharlesMaxim | 21:0b28b9d13164 | 672 | |
CharlesMaxim | 21:0b28b9d13164 | 673 | #define BMI160_GYRO_OFFSET_POS UINT16_C(8) |
CharlesMaxim | 21:0b28b9d13164 | 674 | #define BMI160_GYRO_OFFSET_MSK UINT16_C(0x0300) |
CharlesMaxim | 21:0b28b9d13164 | 675 | |
CharlesMaxim | 21:0b28b9d13164 | 676 | #define BMI160_NVM_UPDATE_POS UINT8_C(1) |
CharlesMaxim | 21:0b28b9d13164 | 677 | #define BMI160_NVM_UPDATE_MSK UINT8_C(0x02) |
CharlesMaxim | 21:0b28b9d13164 | 678 | |
CharlesMaxim | 21:0b28b9d13164 | 679 | #define BMI160_NVM_STATUS_POS UINT8_C(4) |
CharlesMaxim | 21:0b28b9d13164 | 680 | #define BMI160_NVM_STATUS_MSK UINT8_C(0x10) |
CharlesMaxim | 21:0b28b9d13164 | 681 | |
CharlesMaxim | 21:0b28b9d13164 | 682 | #define BMI160_MAG_POWER_MODE_MSK UINT8_C(0x03) |
CharlesMaxim | 21:0b28b9d13164 | 683 | |
CharlesMaxim | 21:0b28b9d13164 | 684 | #define BMI160_ACCEL_POWER_MODE_MSK UINT8_C(0x30) |
CharlesMaxim | 21:0b28b9d13164 | 685 | #define BMI160_ACCEL_POWER_MODE_POS UINT8_C(4) |
CharlesMaxim | 21:0b28b9d13164 | 686 | |
CharlesMaxim | 21:0b28b9d13164 | 687 | #define BMI160_GYRO_POWER_MODE_MSK UINT8_C(0x0C) |
CharlesMaxim | 21:0b28b9d13164 | 688 | #define BMI160_GYRO_POWER_MODE_POS UINT8_C(2) |
CharlesMaxim | 21:0b28b9d13164 | 689 | |
CharlesMaxim | 21:0b28b9d13164 | 690 | |
CharlesMaxim | 21:0b28b9d13164 | 691 | /* BIT SLICE GET AND SET FUNCTIONS */ |
CharlesMaxim | 21:0b28b9d13164 | 692 | #define BMI160_GET_BITS(regvar, bitname)\ |
CharlesMaxim | 21:0b28b9d13164 | 693 | ((regvar & bitname##_MSK) >> bitname##_POS) |
CharlesMaxim | 21:0b28b9d13164 | 694 | #define BMI160_SET_BITS(regvar, bitname, val)\ |
CharlesMaxim | 21:0b28b9d13164 | 695 | ((regvar & ~bitname##_MSK) | \ |
CharlesMaxim | 21:0b28b9d13164 | 696 | ((val<<bitname##_POS)&bitname##_MSK)) |
CharlesMaxim | 21:0b28b9d13164 | 697 | |
CharlesMaxim | 21:0b28b9d13164 | 698 | #define BMI160_SET_BITS_POS_0(reg_data, bitname, data) \ |
CharlesMaxim | 21:0b28b9d13164 | 699 | ((reg_data & ~(bitname##_MSK)) | \ |
CharlesMaxim | 21:0b28b9d13164 | 700 | (data & bitname##_MSK)) |
CharlesMaxim | 21:0b28b9d13164 | 701 | |
CharlesMaxim | 21:0b28b9d13164 | 702 | #define BMI160_GET_BITS_POS_0(reg_data, bitname) (reg_data & (bitname##_MSK)) |
CharlesMaxim | 21:0b28b9d13164 | 703 | |
CharlesMaxim | 21:0b28b9d13164 | 704 | /**\name UTILITY MACROS */ |
CharlesMaxim | 21:0b28b9d13164 | 705 | #define BMI160_SET_LOW_BYTE UINT16_C(0x00FF) |
CharlesMaxim | 21:0b28b9d13164 | 706 | #define BMI160_SET_HIGH_BYTE UINT16_C(0xFF00) |
CharlesMaxim | 21:0b28b9d13164 | 707 | |
CharlesMaxim | 21:0b28b9d13164 | 708 | #define BMI160_GET_LSB(var) (uint8_t)(var & BMI160_SET_LOW_BYTE) |
CharlesMaxim | 21:0b28b9d13164 | 709 | #define BMI160_GET_MSB(var) (uint8_t)((var & BMI160_SET_HIGH_BYTE) >> 8) |
CharlesMaxim | 21:0b28b9d13164 | 710 | |
CharlesMaxim | 21:0b28b9d13164 | 711 | /*****************************************************************************/ |
CharlesMaxim | 21:0b28b9d13164 | 712 | /* type definitions */ |
CharlesMaxim | 21:0b28b9d13164 | 713 | typedef int8_t (*bmi160_com_fptr_t)(uint8_t dev_addr, uint8_t reg_addr, |
CharlesMaxim | 21:0b28b9d13164 | 714 | uint8_t *data, uint16_t len); |
CharlesMaxim | 21:0b28b9d13164 | 715 | |
CharlesMaxim | 21:0b28b9d13164 | 716 | typedef void (*bmi160_delay_fptr_t)(uint32_t period); |
CharlesMaxim | 21:0b28b9d13164 | 717 | |
CharlesMaxim | 21:0b28b9d13164 | 718 | /*************************** Data structures *********************************/ |
CharlesMaxim | 21:0b28b9d13164 | 719 | |
CharlesMaxim | 21:0b28b9d13164 | 720 | struct bmi160_pmu_status { |
CharlesMaxim | 21:0b28b9d13164 | 721 | /*! Power mode status of Accel |
CharlesMaxim | 21:0b28b9d13164 | 722 | * Possible values : |
CharlesMaxim | 21:0b28b9d13164 | 723 | * - BMI160_ACCEL_PMU_SUSPEND |
CharlesMaxim | 21:0b28b9d13164 | 724 | * - BMI160_ACCEL_PMU_NORMAL |
CharlesMaxim | 21:0b28b9d13164 | 725 | * - BMI160_ACCEL_PMU_LOW_POWER |
CharlesMaxim | 21:0b28b9d13164 | 726 | */ |
CharlesMaxim | 21:0b28b9d13164 | 727 | uint8_t accel_pmu_status; |
CharlesMaxim | 21:0b28b9d13164 | 728 | /*! Power mode status of Gyro |
CharlesMaxim | 21:0b28b9d13164 | 729 | * Possible values : |
CharlesMaxim | 21:0b28b9d13164 | 730 | * - BMI160_GYRO_PMU_SUSPEND |
CharlesMaxim | 21:0b28b9d13164 | 731 | * - BMI160_GYRO_PMU_NORMAL |
CharlesMaxim | 21:0b28b9d13164 | 732 | * - BMI160_GYRO_PMU_FSU |
CharlesMaxim | 21:0b28b9d13164 | 733 | */ |
CharlesMaxim | 21:0b28b9d13164 | 734 | uint8_t gyro_pmu_status; |
CharlesMaxim | 21:0b28b9d13164 | 735 | /*! Power mode status of 'Auxiliary sensor interface' whereas the actual |
CharlesMaxim | 21:0b28b9d13164 | 736 | * power mode of the aux. sensor should be configured |
CharlesMaxim | 21:0b28b9d13164 | 737 | * according to the connected sensor specifications |
CharlesMaxim | 21:0b28b9d13164 | 738 | * Possible values : |
CharlesMaxim | 21:0b28b9d13164 | 739 | * - BMI160_AUX_PMU_SUSPEND |
CharlesMaxim | 21:0b28b9d13164 | 740 | * - BMI160_AUX_PMU_NORMAL |
CharlesMaxim | 21:0b28b9d13164 | 741 | * - BMI160_AUX_PMU_LOW_POWER |
CharlesMaxim | 21:0b28b9d13164 | 742 | */ |
CharlesMaxim | 21:0b28b9d13164 | 743 | uint8_t aux_pmu_status; |
CharlesMaxim | 21:0b28b9d13164 | 744 | }; |
CharlesMaxim | 21:0b28b9d13164 | 745 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 746 | * @brief bmi160 interrupt status selection enum. |
CharlesMaxim | 21:0b28b9d13164 | 747 | */ |
CharlesMaxim | 21:0b28b9d13164 | 748 | enum bmi160_int_status_sel { |
CharlesMaxim | 21:0b28b9d13164 | 749 | BMI160_INT_STATUS_0 = 1, |
CharlesMaxim | 21:0b28b9d13164 | 750 | BMI160_INT_STATUS_1 = 2, |
CharlesMaxim | 21:0b28b9d13164 | 751 | BMI160_INT_STATUS_2 = 4, |
CharlesMaxim | 21:0b28b9d13164 | 752 | BMI160_INT_STATUS_3 = 8, |
CharlesMaxim | 21:0b28b9d13164 | 753 | BMI160_INT_STATUS_ALL = 15 |
CharlesMaxim | 21:0b28b9d13164 | 754 | }; |
CharlesMaxim | 21:0b28b9d13164 | 755 | |
CharlesMaxim | 21:0b28b9d13164 | 756 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 757 | * @brief bmi160 interrupt status bits structure |
CharlesMaxim | 21:0b28b9d13164 | 758 | */ |
CharlesMaxim | 21:0b28b9d13164 | 759 | struct bmi160_int_status_bits { |
CharlesMaxim | 21:0b28b9d13164 | 760 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 761 | uint32_t step :1; |
CharlesMaxim | 21:0b28b9d13164 | 762 | uint32_t sigmot :1; |
CharlesMaxim | 21:0b28b9d13164 | 763 | uint32_t anym :1; |
CharlesMaxim | 21:0b28b9d13164 | 764 | /* pmu trigger will be handled later */ |
CharlesMaxim | 21:0b28b9d13164 | 765 | uint32_t pmu_trigger_reserved :1; |
CharlesMaxim | 21:0b28b9d13164 | 766 | uint32_t d_tap :1; |
CharlesMaxim | 21:0b28b9d13164 | 767 | uint32_t s_tap :1; |
CharlesMaxim | 21:0b28b9d13164 | 768 | uint32_t orient :1; |
CharlesMaxim | 21:0b28b9d13164 | 769 | uint32_t flat_int :1; |
CharlesMaxim | 21:0b28b9d13164 | 770 | uint32_t reserved :2; |
CharlesMaxim | 21:0b28b9d13164 | 771 | uint32_t high_g :1; |
CharlesMaxim | 21:0b28b9d13164 | 772 | uint32_t low_g :1; |
CharlesMaxim | 21:0b28b9d13164 | 773 | uint32_t drdy :1; |
CharlesMaxim | 21:0b28b9d13164 | 774 | uint32_t ffull :1; |
CharlesMaxim | 21:0b28b9d13164 | 775 | uint32_t fwm :1; |
CharlesMaxim | 21:0b28b9d13164 | 776 | uint32_t nomo :1; |
CharlesMaxim | 21:0b28b9d13164 | 777 | uint32_t anym_first_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 778 | uint32_t anym_first_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 779 | uint32_t anym_first_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 780 | uint32_t anym_sign :1; |
CharlesMaxim | 21:0b28b9d13164 | 781 | uint32_t tap_first_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 782 | uint32_t tap_first_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 783 | uint32_t tap_first_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 784 | uint32_t tap_sign :1; |
CharlesMaxim | 21:0b28b9d13164 | 785 | uint32_t high_first_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 786 | uint32_t high_first_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 787 | uint32_t high_first_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 788 | uint32_t high_sign :1; |
CharlesMaxim | 21:0b28b9d13164 | 789 | uint32_t orient_1_0 :2; |
CharlesMaxim | 21:0b28b9d13164 | 790 | uint32_t orient_2 :1; |
CharlesMaxim | 21:0b28b9d13164 | 791 | uint32_t flat :1; |
CharlesMaxim | 21:0b28b9d13164 | 792 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 793 | uint32_t high_first_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 794 | uint32_t high_first_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 795 | uint32_t high_first_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 796 | uint32_t high_sign :1; |
CharlesMaxim | 21:0b28b9d13164 | 797 | uint32_t orient_1_0 :2; |
CharlesMaxim | 21:0b28b9d13164 | 798 | uint32_t orient_2 :1; |
CharlesMaxim | 21:0b28b9d13164 | 799 | uint32_t flat :1; |
CharlesMaxim | 21:0b28b9d13164 | 800 | uint32_t anym_first_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 801 | uint32_t anym_first_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 802 | uint32_t anym_first_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 803 | uint32_t anym_sign :1; |
CharlesMaxim | 21:0b28b9d13164 | 804 | uint32_t tap_first_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 805 | uint32_t tap_first_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 806 | uint32_t tap_first_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 807 | uint32_t tap_sign :1; |
CharlesMaxim | 21:0b28b9d13164 | 808 | uint32_t reserved :2; |
CharlesMaxim | 21:0b28b9d13164 | 809 | uint32_t high_g :1; |
CharlesMaxim | 21:0b28b9d13164 | 810 | uint32_t low_g :1; |
CharlesMaxim | 21:0b28b9d13164 | 811 | uint32_t drdy :1; |
CharlesMaxim | 21:0b28b9d13164 | 812 | uint32_t ffull :1; |
CharlesMaxim | 21:0b28b9d13164 | 813 | uint32_t fwm :1; |
CharlesMaxim | 21:0b28b9d13164 | 814 | uint32_t nomo :1; |
CharlesMaxim | 21:0b28b9d13164 | 815 | uint32_t step :1; |
CharlesMaxim | 21:0b28b9d13164 | 816 | uint32_t sigmot :1; |
CharlesMaxim | 21:0b28b9d13164 | 817 | uint32_t anym :1; |
CharlesMaxim | 21:0b28b9d13164 | 818 | /* pmu trigger will be handled later */ |
CharlesMaxim | 21:0b28b9d13164 | 819 | uint32_t pmu_trigger_reserved :1; |
CharlesMaxim | 21:0b28b9d13164 | 820 | uint32_t d_tap :1; |
CharlesMaxim | 21:0b28b9d13164 | 821 | uint32_t s_tap :1; |
CharlesMaxim | 21:0b28b9d13164 | 822 | uint32_t orient :1; |
CharlesMaxim | 21:0b28b9d13164 | 823 | uint32_t flat_int :1; |
CharlesMaxim | 21:0b28b9d13164 | 824 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 825 | }; |
CharlesMaxim | 21:0b28b9d13164 | 826 | |
CharlesMaxim | 21:0b28b9d13164 | 827 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 828 | * @brief bmi160 interrupt status structure |
CharlesMaxim | 21:0b28b9d13164 | 829 | */ |
CharlesMaxim | 21:0b28b9d13164 | 830 | union bmi160_int_status { |
CharlesMaxim | 21:0b28b9d13164 | 831 | uint8_t data[4]; |
CharlesMaxim | 21:0b28b9d13164 | 832 | struct bmi160_int_status_bits bit; |
CharlesMaxim | 21:0b28b9d13164 | 833 | }; |
CharlesMaxim | 21:0b28b9d13164 | 834 | |
CharlesMaxim | 21:0b28b9d13164 | 835 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 836 | * @brief bmi160 sensor data structure which comprises of accel data |
CharlesMaxim | 21:0b28b9d13164 | 837 | */ |
CharlesMaxim | 21:0b28b9d13164 | 838 | struct bmi160_sensor_data { |
CharlesMaxim | 21:0b28b9d13164 | 839 | /*! X-axis sensor data */ |
CharlesMaxim | 21:0b28b9d13164 | 840 | int16_t x; |
CharlesMaxim | 21:0b28b9d13164 | 841 | /*! Y-axis sensor data */ |
CharlesMaxim | 21:0b28b9d13164 | 842 | int16_t y; |
CharlesMaxim | 21:0b28b9d13164 | 843 | /*! Z-axis sensor data */ |
CharlesMaxim | 21:0b28b9d13164 | 844 | int16_t z; |
CharlesMaxim | 21:0b28b9d13164 | 845 | /*! sensor time */ |
CharlesMaxim | 21:0b28b9d13164 | 846 | uint32_t sensortime; |
CharlesMaxim | 21:0b28b9d13164 | 847 | }; |
CharlesMaxim | 21:0b28b9d13164 | 848 | |
CharlesMaxim | 21:0b28b9d13164 | 849 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 850 | * @brief bmi160 aux data structure which comprises of 8 bytes of accel data |
CharlesMaxim | 21:0b28b9d13164 | 851 | */ |
CharlesMaxim | 21:0b28b9d13164 | 852 | struct bmi160_aux_data { |
CharlesMaxim | 21:0b28b9d13164 | 853 | /*! Auxiliary data */ |
CharlesMaxim | 21:0b28b9d13164 | 854 | uint8_t data[8]; |
CharlesMaxim | 21:0b28b9d13164 | 855 | }; |
CharlesMaxim | 21:0b28b9d13164 | 856 | |
CharlesMaxim | 21:0b28b9d13164 | 857 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 858 | * @brief bmi160 FOC configuration structure |
CharlesMaxim | 21:0b28b9d13164 | 859 | */ |
CharlesMaxim | 21:0b28b9d13164 | 860 | struct bmi160_foc_conf { |
CharlesMaxim | 21:0b28b9d13164 | 861 | /*! Enabling FOC in gyro |
CharlesMaxim | 21:0b28b9d13164 | 862 | * Assignable macros : |
CharlesMaxim | 21:0b28b9d13164 | 863 | * - BMI160_ENABLE |
CharlesMaxim | 21:0b28b9d13164 | 864 | * - BMI160_DISABLE |
CharlesMaxim | 21:0b28b9d13164 | 865 | */ |
CharlesMaxim | 21:0b28b9d13164 | 866 | uint8_t foc_gyr_en; |
CharlesMaxim | 21:0b28b9d13164 | 867 | |
CharlesMaxim | 21:0b28b9d13164 | 868 | /*! Accel FOC configurations |
CharlesMaxim | 21:0b28b9d13164 | 869 | * Assignable macros : |
CharlesMaxim | 21:0b28b9d13164 | 870 | * - BMI160_FOC_ACCEL_DISABLED |
CharlesMaxim | 21:0b28b9d13164 | 871 | * - BMI160_FOC_ACCEL_POSITIVE_G |
CharlesMaxim | 21:0b28b9d13164 | 872 | * - BMI160_FOC_ACCEL_NEGATIVE_G |
CharlesMaxim | 21:0b28b9d13164 | 873 | * - BMI160_FOC_ACCEL_0G |
CharlesMaxim | 21:0b28b9d13164 | 874 | */ |
CharlesMaxim | 21:0b28b9d13164 | 875 | uint8_t foc_acc_x; |
CharlesMaxim | 21:0b28b9d13164 | 876 | uint8_t foc_acc_y; |
CharlesMaxim | 21:0b28b9d13164 | 877 | uint8_t foc_acc_z; |
CharlesMaxim | 21:0b28b9d13164 | 878 | |
CharlesMaxim | 21:0b28b9d13164 | 879 | /*! Enabling offset compensation for accel in data registers |
CharlesMaxim | 21:0b28b9d13164 | 880 | * Assignable macros : |
CharlesMaxim | 21:0b28b9d13164 | 881 | * - BMI160_ENABLE |
CharlesMaxim | 21:0b28b9d13164 | 882 | * - BMI160_DISABLE |
CharlesMaxim | 21:0b28b9d13164 | 883 | */ |
CharlesMaxim | 21:0b28b9d13164 | 884 | uint8_t acc_off_en; |
CharlesMaxim | 21:0b28b9d13164 | 885 | |
CharlesMaxim | 21:0b28b9d13164 | 886 | /*! Enabling offset compensation for gyro in data registers |
CharlesMaxim | 21:0b28b9d13164 | 887 | * Assignable macros : |
CharlesMaxim | 21:0b28b9d13164 | 888 | * - BMI160_ENABLE |
CharlesMaxim | 21:0b28b9d13164 | 889 | * - BMI160_DISABLE |
CharlesMaxim | 21:0b28b9d13164 | 890 | */ |
CharlesMaxim | 21:0b28b9d13164 | 891 | uint8_t gyro_off_en; |
CharlesMaxim | 21:0b28b9d13164 | 892 | }; |
CharlesMaxim | 21:0b28b9d13164 | 893 | |
CharlesMaxim | 21:0b28b9d13164 | 894 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 895 | * @brief bmi160 accel gyro offsets |
CharlesMaxim | 21:0b28b9d13164 | 896 | */ |
CharlesMaxim | 21:0b28b9d13164 | 897 | struct bmi160_offsets { |
CharlesMaxim | 21:0b28b9d13164 | 898 | /*! Accel offset for x axis */ |
CharlesMaxim | 21:0b28b9d13164 | 899 | int8_t off_acc_x; |
CharlesMaxim | 21:0b28b9d13164 | 900 | /*! Accel offset for y axis */ |
CharlesMaxim | 21:0b28b9d13164 | 901 | int8_t off_acc_y; |
CharlesMaxim | 21:0b28b9d13164 | 902 | /*! Accel offset for z axis */ |
CharlesMaxim | 21:0b28b9d13164 | 903 | int8_t off_acc_z; |
CharlesMaxim | 21:0b28b9d13164 | 904 | /*! Gyro offset for x axis */ |
CharlesMaxim | 21:0b28b9d13164 | 905 | int16_t off_gyro_x; |
CharlesMaxim | 21:0b28b9d13164 | 906 | /*! Gyro offset for y axis */ |
CharlesMaxim | 21:0b28b9d13164 | 907 | int16_t off_gyro_y; |
CharlesMaxim | 21:0b28b9d13164 | 908 | /*! Gyro offset for z axis */ |
CharlesMaxim | 21:0b28b9d13164 | 909 | int16_t off_gyro_z; |
CharlesMaxim | 21:0b28b9d13164 | 910 | }; |
CharlesMaxim | 21:0b28b9d13164 | 911 | |
CharlesMaxim | 21:0b28b9d13164 | 912 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 913 | * @brief FIFO aux. sensor data structure |
CharlesMaxim | 21:0b28b9d13164 | 914 | */ |
CharlesMaxim | 21:0b28b9d13164 | 915 | struct bmi160_aux_fifo_data { |
CharlesMaxim | 21:0b28b9d13164 | 916 | /*! The value of aux. sensor x LSB data */ |
CharlesMaxim | 21:0b28b9d13164 | 917 | uint8_t aux_x_lsb; |
CharlesMaxim | 21:0b28b9d13164 | 918 | /*! The value of aux. sensor x MSB data */ |
CharlesMaxim | 21:0b28b9d13164 | 919 | uint8_t aux_x_msb; |
CharlesMaxim | 21:0b28b9d13164 | 920 | /*! The value of aux. sensor y LSB data */ |
CharlesMaxim | 21:0b28b9d13164 | 921 | uint8_t aux_y_lsb; |
CharlesMaxim | 21:0b28b9d13164 | 922 | /*! The value of aux. sensor y MSB data */ |
CharlesMaxim | 21:0b28b9d13164 | 923 | uint8_t aux_y_msb; |
CharlesMaxim | 21:0b28b9d13164 | 924 | /*! The value of aux. sensor z LSB data */ |
CharlesMaxim | 21:0b28b9d13164 | 925 | uint8_t aux_z_lsb; |
CharlesMaxim | 21:0b28b9d13164 | 926 | /*! The value of aux. sensor z MSB data */ |
CharlesMaxim | 21:0b28b9d13164 | 927 | uint8_t aux_z_msb; |
CharlesMaxim | 21:0b28b9d13164 | 928 | /*! The value of aux. sensor r for BMM150 LSB data */ |
CharlesMaxim | 21:0b28b9d13164 | 929 | uint8_t aux_r_y2_lsb; |
CharlesMaxim | 21:0b28b9d13164 | 930 | /*! The value of aux. sensor r for BMM150 MSB data */ |
CharlesMaxim | 21:0b28b9d13164 | 931 | uint8_t aux_r_y2_msb; |
CharlesMaxim | 21:0b28b9d13164 | 932 | }; |
CharlesMaxim | 21:0b28b9d13164 | 933 | |
CharlesMaxim | 21:0b28b9d13164 | 934 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 935 | * @brief bmi160 sensor select structure |
CharlesMaxim | 21:0b28b9d13164 | 936 | */ |
CharlesMaxim | 21:0b28b9d13164 | 937 | enum bmi160_select_sensor { |
CharlesMaxim | 21:0b28b9d13164 | 938 | BMI160_ACCEL_ONLY = 1, |
CharlesMaxim | 21:0b28b9d13164 | 939 | BMI160_GYRO_ONLY, |
CharlesMaxim | 21:0b28b9d13164 | 940 | BMI160_BOTH_ACCEL_AND_GYRO |
CharlesMaxim | 21:0b28b9d13164 | 941 | }; |
CharlesMaxim | 21:0b28b9d13164 | 942 | |
CharlesMaxim | 21:0b28b9d13164 | 943 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 944 | * @brief bmi160 sensor step detector mode structure |
CharlesMaxim | 21:0b28b9d13164 | 945 | */ |
CharlesMaxim | 21:0b28b9d13164 | 946 | enum bmi160_step_detect_mode { |
CharlesMaxim | 21:0b28b9d13164 | 947 | BMI160_STEP_DETECT_NORMAL, |
CharlesMaxim | 21:0b28b9d13164 | 948 | BMI160_STEP_DETECT_SENSITIVE, |
CharlesMaxim | 21:0b28b9d13164 | 949 | BMI160_STEP_DETECT_ROBUST, |
CharlesMaxim | 21:0b28b9d13164 | 950 | /*! Non recommended User defined setting */ |
CharlesMaxim | 21:0b28b9d13164 | 951 | BMI160_STEP_DETECT_USER_DEFINE |
CharlesMaxim | 21:0b28b9d13164 | 952 | }; |
CharlesMaxim | 21:0b28b9d13164 | 953 | |
CharlesMaxim | 21:0b28b9d13164 | 954 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 955 | * @brief enum for auxiliary burst read selection |
CharlesMaxim | 21:0b28b9d13164 | 956 | */ |
CharlesMaxim | 21:0b28b9d13164 | 957 | enum bm160_aux_read_len { |
CharlesMaxim | 21:0b28b9d13164 | 958 | BMI160_AUX_READ_LEN_0, |
CharlesMaxim | 21:0b28b9d13164 | 959 | BMI160_AUX_READ_LEN_1, |
CharlesMaxim | 21:0b28b9d13164 | 960 | BMI160_AUX_READ_LEN_2, |
CharlesMaxim | 21:0b28b9d13164 | 961 | BMI160_AUX_READ_LEN_3 |
CharlesMaxim | 21:0b28b9d13164 | 962 | }; |
CharlesMaxim | 21:0b28b9d13164 | 963 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 964 | * @brief bmi160 sensor configuration structure |
CharlesMaxim | 21:0b28b9d13164 | 965 | */ |
CharlesMaxim | 21:0b28b9d13164 | 966 | struct bmi160_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 967 | /*! power mode */ |
CharlesMaxim | 21:0b28b9d13164 | 968 | uint8_t power; |
CharlesMaxim | 21:0b28b9d13164 | 969 | /*! output data rate */ |
CharlesMaxim | 21:0b28b9d13164 | 970 | uint8_t odr; |
CharlesMaxim | 21:0b28b9d13164 | 971 | /*! range */ |
CharlesMaxim | 21:0b28b9d13164 | 972 | uint8_t range; |
CharlesMaxim | 21:0b28b9d13164 | 973 | /*! bandwidth */ |
CharlesMaxim | 21:0b28b9d13164 | 974 | uint8_t bw; |
CharlesMaxim | 21:0b28b9d13164 | 975 | }; |
CharlesMaxim | 21:0b28b9d13164 | 976 | |
CharlesMaxim | 21:0b28b9d13164 | 977 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 978 | * @brief Aux sensor configuration structure |
CharlesMaxim | 21:0b28b9d13164 | 979 | */ |
CharlesMaxim | 21:0b28b9d13164 | 980 | struct bmi160_aux_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 981 | /*! Aux sensor, 1 - enable 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 982 | uint8_t aux_sensor_enable : 1; |
CharlesMaxim | 21:0b28b9d13164 | 983 | /*! Aux manual/auto mode status */ |
CharlesMaxim | 21:0b28b9d13164 | 984 | uint8_t manual_enable : 1; |
CharlesMaxim | 21:0b28b9d13164 | 985 | /*! Aux read burst length */ |
CharlesMaxim | 21:0b28b9d13164 | 986 | uint8_t aux_rd_burst_len : 2; |
CharlesMaxim | 21:0b28b9d13164 | 987 | /*! output data rate */ |
CharlesMaxim | 21:0b28b9d13164 | 988 | uint8_t aux_odr :4; |
CharlesMaxim | 21:0b28b9d13164 | 989 | /*! i2c addr of auxiliary sensor */ |
CharlesMaxim | 21:0b28b9d13164 | 990 | uint8_t aux_i2c_addr; |
CharlesMaxim | 21:0b28b9d13164 | 991 | }; |
CharlesMaxim | 21:0b28b9d13164 | 992 | |
CharlesMaxim | 21:0b28b9d13164 | 993 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 994 | * @brief bmi160 interrupt channel selection structure |
CharlesMaxim | 21:0b28b9d13164 | 995 | */ |
CharlesMaxim | 21:0b28b9d13164 | 996 | enum bmi160_int_channel { |
CharlesMaxim | 21:0b28b9d13164 | 997 | /*! Un-map both channels */ |
CharlesMaxim | 21:0b28b9d13164 | 998 | BMI160_INT_CHANNEL_NONE, |
CharlesMaxim | 21:0b28b9d13164 | 999 | /*! interrupt Channel 1 */ |
CharlesMaxim | 21:0b28b9d13164 | 1000 | BMI160_INT_CHANNEL_1, |
CharlesMaxim | 21:0b28b9d13164 | 1001 | /*! interrupt Channel 2 */ |
CharlesMaxim | 21:0b28b9d13164 | 1002 | BMI160_INT_CHANNEL_2, |
CharlesMaxim | 21:0b28b9d13164 | 1003 | /*! Map both channels */ |
CharlesMaxim | 21:0b28b9d13164 | 1004 | BMI160_INT_CHANNEL_BOTH |
CharlesMaxim | 21:0b28b9d13164 | 1005 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1006 | |
CharlesMaxim | 21:0b28b9d13164 | 1007 | enum bmi160_int_types { |
CharlesMaxim | 21:0b28b9d13164 | 1008 | /*! Slope/Any-motion interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1009 | BMI160_ACC_ANY_MOTION_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1010 | /*! Significant motion interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1011 | BMI160_ACC_SIG_MOTION_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1012 | /*! Step detector interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1013 | BMI160_STEP_DETECT_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1014 | /*! double tap interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1015 | BMI160_ACC_DOUBLE_TAP_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1016 | /*! single tap interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1017 | BMI160_ACC_SINGLE_TAP_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1018 | /*! orientation interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1019 | BMI160_ACC_ORIENT_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1020 | /*! flat interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1021 | BMI160_ACC_FLAT_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1022 | /*! high-g interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1023 | BMI160_ACC_HIGH_G_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1024 | /*! low-g interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1025 | BMI160_ACC_LOW_G_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1026 | /*! slow/no-motion interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1027 | BMI160_ACC_SLOW_NO_MOTION_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1028 | /*! data ready interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1029 | BMI160_ACC_GYRO_DATA_RDY_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1030 | /*! fifo full interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1031 | BMI160_ACC_GYRO_FIFO_FULL_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1032 | /*! fifo watermark interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1033 | BMI160_ACC_GYRO_FIFO_WATERMARK_INT, |
CharlesMaxim | 21:0b28b9d13164 | 1034 | /*! fifo tagging feature support */ |
CharlesMaxim | 21:0b28b9d13164 | 1035 | BMI160_FIFO_TAG_INT_PIN |
CharlesMaxim | 21:0b28b9d13164 | 1036 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1037 | |
CharlesMaxim | 21:0b28b9d13164 | 1038 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 1039 | * @brief bmi160 active state of any & sig motion interrupt. |
CharlesMaxim | 21:0b28b9d13164 | 1040 | */ |
CharlesMaxim | 21:0b28b9d13164 | 1041 | enum bmi160_any_sig_motion_active_interrupt_state { |
CharlesMaxim | 21:0b28b9d13164 | 1042 | /*! Both any & sig motion are disabled */ |
CharlesMaxim | 21:0b28b9d13164 | 1043 | BMI160_BOTH_ANY_SIG_MOTION_DISABLED = -1, |
CharlesMaxim | 21:0b28b9d13164 | 1044 | /*! Any-motion selected */ |
CharlesMaxim | 21:0b28b9d13164 | 1045 | BMI160_ANY_MOTION_ENABLED, |
CharlesMaxim | 21:0b28b9d13164 | 1046 | /*! Sig-motion selected */ |
CharlesMaxim | 21:0b28b9d13164 | 1047 | BMI160_SIG_MOTION_ENABLED |
CharlesMaxim | 21:0b28b9d13164 | 1048 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1049 | |
CharlesMaxim | 21:0b28b9d13164 | 1050 | struct bmi160_acc_tap_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1051 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1052 | /*! tap threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1053 | uint16_t tap_thr :5; |
CharlesMaxim | 21:0b28b9d13164 | 1054 | /*! tap shock */ |
CharlesMaxim | 21:0b28b9d13164 | 1055 | uint16_t tap_shock :1; |
CharlesMaxim | 21:0b28b9d13164 | 1056 | /*! tap quiet */ |
CharlesMaxim | 21:0b28b9d13164 | 1057 | uint16_t tap_quiet :1; |
CharlesMaxim | 21:0b28b9d13164 | 1058 | /*! tap duration */ |
CharlesMaxim | 21:0b28b9d13164 | 1059 | uint16_t tap_dur :3; |
CharlesMaxim | 21:0b28b9d13164 | 1060 | /*! data source 0- filter & 1 pre-filter*/ |
CharlesMaxim | 21:0b28b9d13164 | 1061 | uint16_t tap_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1062 | /*! tap enable, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1063 | uint16_t tap_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1064 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1065 | /*! tap enable, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1066 | uint16_t tap_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1067 | /*! data source 0- filter & 1 pre-filter*/ |
CharlesMaxim | 21:0b28b9d13164 | 1068 | uint16_t tap_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1069 | /*! tap duration */ |
CharlesMaxim | 21:0b28b9d13164 | 1070 | uint16_t tap_dur : 3; |
CharlesMaxim | 21:0b28b9d13164 | 1071 | /*! tap quiet */ |
CharlesMaxim | 21:0b28b9d13164 | 1072 | uint16_t tap_quiet : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1073 | /*! tap shock */ |
CharlesMaxim | 21:0b28b9d13164 | 1074 | uint16_t tap_shock : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1075 | /*! tap threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1076 | uint16_t tap_thr : 5; |
CharlesMaxim | 21:0b28b9d13164 | 1077 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1078 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1079 | |
CharlesMaxim | 21:0b28b9d13164 | 1080 | struct bmi160_acc_any_mot_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1081 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1082 | /*! 1 any-motion enable, 0 - any-motion disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1083 | uint8_t anymotion_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1084 | /*! slope interrupt x, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1085 | uint8_t anymotion_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 1086 | /*! slope interrupt y, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1087 | uint8_t anymotion_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 1088 | /*! slope interrupt z, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1089 | uint8_t anymotion_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 1090 | /*! slope duration */ |
CharlesMaxim | 21:0b28b9d13164 | 1091 | uint8_t anymotion_dur :2; |
CharlesMaxim | 21:0b28b9d13164 | 1092 | /*! data source 0- filter & 1 pre-filter*/ |
CharlesMaxim | 21:0b28b9d13164 | 1093 | uint8_t anymotion_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1094 | /*! slope threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1095 | uint8_t anymotion_thr; |
CharlesMaxim | 21:0b28b9d13164 | 1096 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1097 | /*! slope threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1098 | uint8_t anymotion_thr; |
CharlesMaxim | 21:0b28b9d13164 | 1099 | /*! data source 0- filter & 1 pre-filter*/ |
CharlesMaxim | 21:0b28b9d13164 | 1100 | uint8_t anymotion_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1101 | /*! slope duration */ |
CharlesMaxim | 21:0b28b9d13164 | 1102 | uint8_t anymotion_dur : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1103 | /*! slope interrupt z, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1104 | uint8_t anymotion_z : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1105 | /*! slope interrupt y, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1106 | uint8_t anymotion_y : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1107 | /*! slope interrupt x, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1108 | uint8_t anymotion_x : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1109 | /*! 1 any-motion enable, 0 - any-motion disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1110 | uint8_t anymotion_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1111 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1112 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1113 | |
CharlesMaxim | 21:0b28b9d13164 | 1114 | struct bmi160_acc_sig_mot_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1115 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1116 | /*! skip time of sig-motion interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1117 | uint8_t sig_mot_skip :2; |
CharlesMaxim | 21:0b28b9d13164 | 1118 | /*! proof time of sig-motion interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1119 | uint8_t sig_mot_proof :2; |
CharlesMaxim | 21:0b28b9d13164 | 1120 | /*! data source 0- filter & 1 pre-filter*/ |
CharlesMaxim | 21:0b28b9d13164 | 1121 | uint8_t sig_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1122 | /*! 1 - enable sig, 0 - disable sig & enable anymotion */ |
CharlesMaxim | 21:0b28b9d13164 | 1123 | uint8_t sig_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1124 | /*! sig-motion threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1125 | uint8_t sig_mot_thres; |
CharlesMaxim | 21:0b28b9d13164 | 1126 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1127 | /*! sig-motion threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1128 | uint8_t sig_mot_thres; |
CharlesMaxim | 21:0b28b9d13164 | 1129 | /*! 1 - enable sig, 0 - disable sig & enable anymotion */ |
CharlesMaxim | 21:0b28b9d13164 | 1130 | uint8_t sig_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1131 | /*! data source 0- filter & 1 pre-filter*/ |
CharlesMaxim | 21:0b28b9d13164 | 1132 | uint8_t sig_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1133 | /*! proof time of sig-motion interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1134 | uint8_t sig_mot_proof : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1135 | /*! skip time of sig-motion interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1136 | uint8_t sig_mot_skip : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1137 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1138 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1139 | |
CharlesMaxim | 21:0b28b9d13164 | 1140 | struct bmi160_acc_step_detect_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1141 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1142 | /*! 1- step detector enable, 0- step detector disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1143 | uint16_t step_detector_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1144 | /*! minimum threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1145 | uint16_t min_threshold :2; |
CharlesMaxim | 21:0b28b9d13164 | 1146 | /*! minimal detectable step time */ |
CharlesMaxim | 21:0b28b9d13164 | 1147 | uint16_t steptime_min :3; |
CharlesMaxim | 21:0b28b9d13164 | 1148 | /*! enable step counter mode setting */ |
CharlesMaxim | 21:0b28b9d13164 | 1149 | uint16_t step_detector_mode :2; |
CharlesMaxim | 21:0b28b9d13164 | 1150 | /*! minimum step buffer size*/ |
CharlesMaxim | 21:0b28b9d13164 | 1151 | uint16_t step_min_buf :3; |
CharlesMaxim | 21:0b28b9d13164 | 1152 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1153 | /*! minimum step buffer size*/ |
CharlesMaxim | 21:0b28b9d13164 | 1154 | uint16_t step_min_buf :3; |
CharlesMaxim | 21:0b28b9d13164 | 1155 | /*! enable step counter mode setting */ |
CharlesMaxim | 21:0b28b9d13164 | 1156 | uint16_t step_detector_mode : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1157 | /*! minimal detectable step time */ |
CharlesMaxim | 21:0b28b9d13164 | 1158 | uint16_t steptime_min : 3; |
CharlesMaxim | 21:0b28b9d13164 | 1159 | /*! minimum threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1160 | uint16_t min_threshold : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1161 | /*! 1- step detector enable, 0- step detector disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1162 | uint16_t step_detector_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1163 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1164 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1165 | |
CharlesMaxim | 21:0b28b9d13164 | 1166 | struct bmi160_acc_no_motion_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1167 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1168 | /*! no motion interrupt x */ |
CharlesMaxim | 21:0b28b9d13164 | 1169 | uint16_t no_motion_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 1170 | /*! no motion interrupt y */ |
CharlesMaxim | 21:0b28b9d13164 | 1171 | uint16_t no_motion_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 1172 | /*! no motion interrupt z */ |
CharlesMaxim | 21:0b28b9d13164 | 1173 | uint16_t no_motion_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 1174 | /*! no motion duration */ |
CharlesMaxim | 21:0b28b9d13164 | 1175 | uint16_t no_motion_dur :6; |
CharlesMaxim | 21:0b28b9d13164 | 1176 | /*! no motion sel , 1 - enable no-motion ,0- enable slow-motion */ |
CharlesMaxim | 21:0b28b9d13164 | 1177 | uint16_t no_motion_sel :1; |
CharlesMaxim | 21:0b28b9d13164 | 1178 | /*! data source 0- filter & 1 pre-filter*/ |
CharlesMaxim | 21:0b28b9d13164 | 1179 | uint16_t no_motion_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1180 | /*! no motion threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1181 | uint8_t no_motion_thres; |
CharlesMaxim | 21:0b28b9d13164 | 1182 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1183 | /*! no motion threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1184 | uint8_t no_motion_thres; |
CharlesMaxim | 21:0b28b9d13164 | 1185 | /*! data source 0- filter & 1 pre-filter*/ |
CharlesMaxim | 21:0b28b9d13164 | 1186 | uint16_t no_motion_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1187 | /*! no motion sel , 1 - enable no-motion ,0- enable slow-motion */ |
CharlesMaxim | 21:0b28b9d13164 | 1188 | uint16_t no_motion_sel : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1189 | /*! no motion duration */ |
CharlesMaxim | 21:0b28b9d13164 | 1190 | uint16_t no_motion_dur : 6; |
CharlesMaxim | 21:0b28b9d13164 | 1191 | /* no motion interrupt z */ |
CharlesMaxim | 21:0b28b9d13164 | 1192 | uint16_t no_motion_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 1193 | /*! no motion interrupt y */ |
CharlesMaxim | 21:0b28b9d13164 | 1194 | uint16_t no_motion_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 1195 | /*! no motion interrupt x */ |
CharlesMaxim | 21:0b28b9d13164 | 1196 | uint16_t no_motion_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 1197 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1198 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1199 | |
CharlesMaxim | 21:0b28b9d13164 | 1200 | struct bmi160_acc_orient_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1201 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1202 | /*! thresholds for switching between the different orientations */ |
CharlesMaxim | 21:0b28b9d13164 | 1203 | uint16_t orient_mode :2; |
CharlesMaxim | 21:0b28b9d13164 | 1204 | /*! blocking_mode */ |
CharlesMaxim | 21:0b28b9d13164 | 1205 | uint16_t orient_blocking :2; |
CharlesMaxim | 21:0b28b9d13164 | 1206 | /*! Orientation interrupt hysteresis */ |
CharlesMaxim | 21:0b28b9d13164 | 1207 | uint16_t orient_hyst :4; |
CharlesMaxim | 21:0b28b9d13164 | 1208 | /*! Orientation interrupt theta */ |
CharlesMaxim | 21:0b28b9d13164 | 1209 | uint16_t orient_theta :6; |
CharlesMaxim | 21:0b28b9d13164 | 1210 | /*! Enable/disable Orientation interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1211 | uint16_t orient_ud_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1212 | /*! exchange x- and z-axis in algorithm ,0 - z, 1 - x */ |
CharlesMaxim | 21:0b28b9d13164 | 1213 | uint16_t axes_ex :1; |
CharlesMaxim | 21:0b28b9d13164 | 1214 | /*! 1 - orient enable, 0 - orient disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1215 | uint8_t orient_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1216 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1217 | /*! 1 - orient enable, 0 - orient disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1218 | uint8_t orient_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1219 | /*! exchange x- and z-axis in algorithm ,0 - z, 1 - x */ |
CharlesMaxim | 21:0b28b9d13164 | 1220 | uint16_t axes_ex : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1221 | /*! Enable/disable Orientation interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1222 | uint16_t orient_ud_en : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1223 | /*! Orientation interrupt theta */ |
CharlesMaxim | 21:0b28b9d13164 | 1224 | uint16_t orient_theta : 6; |
CharlesMaxim | 21:0b28b9d13164 | 1225 | /*! Orientation interrupt hysteresis */ |
CharlesMaxim | 21:0b28b9d13164 | 1226 | uint16_t orient_hyst : 4; |
CharlesMaxim | 21:0b28b9d13164 | 1227 | /*! blocking_mode */ |
CharlesMaxim | 21:0b28b9d13164 | 1228 | uint16_t orient_blocking : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1229 | /*! thresholds for switching between the different orientations */ |
CharlesMaxim | 21:0b28b9d13164 | 1230 | uint16_t orient_mode : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1231 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1232 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1233 | |
CharlesMaxim | 21:0b28b9d13164 | 1234 | struct bmi160_acc_flat_detect_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1235 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1236 | /*! flat threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1237 | uint16_t flat_theta :6; |
CharlesMaxim | 21:0b28b9d13164 | 1238 | /*! flat interrupt hysteresis */ |
CharlesMaxim | 21:0b28b9d13164 | 1239 | uint16_t flat_hy :3; |
CharlesMaxim | 21:0b28b9d13164 | 1240 | /*! delay time for which the flat value must remain stable for the |
CharlesMaxim | 21:0b28b9d13164 | 1241 | * flat interrupt to be generated */ |
CharlesMaxim | 21:0b28b9d13164 | 1242 | uint16_t flat_hold_time :2; |
CharlesMaxim | 21:0b28b9d13164 | 1243 | /*! 1 - flat enable, 0 - flat disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1244 | uint16_t flat_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1245 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1246 | /*! 1 - flat enable, 0 - flat disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1247 | uint16_t flat_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1248 | /*! delay time for which the flat value must remain stable for the |
CharlesMaxim | 21:0b28b9d13164 | 1249 | * flat interrupt to be generated */ |
CharlesMaxim | 21:0b28b9d13164 | 1250 | uint16_t flat_hold_time : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1251 | /*! flat interrupt hysteresis */ |
CharlesMaxim | 21:0b28b9d13164 | 1252 | uint16_t flat_hy : 3; |
CharlesMaxim | 21:0b28b9d13164 | 1253 | /*! flat threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1254 | uint16_t flat_theta : 6; |
CharlesMaxim | 21:0b28b9d13164 | 1255 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1256 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1257 | |
CharlesMaxim | 21:0b28b9d13164 | 1258 | struct bmi160_acc_low_g_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1259 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1260 | /*! low-g interrupt trigger delay */ |
CharlesMaxim | 21:0b28b9d13164 | 1261 | uint8_t low_dur; |
CharlesMaxim | 21:0b28b9d13164 | 1262 | /*! low-g interrupt trigger threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1263 | uint8_t low_thres; |
CharlesMaxim | 21:0b28b9d13164 | 1264 | /*! hysteresis of low-g interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1265 | uint8_t low_hyst :2; |
CharlesMaxim | 21:0b28b9d13164 | 1266 | /*! 0 - single-axis mode ,1 - axis-summing mode */ |
CharlesMaxim | 21:0b28b9d13164 | 1267 | uint8_t low_mode :1; |
CharlesMaxim | 21:0b28b9d13164 | 1268 | /*! data source 0- filter & 1 pre-filter */ |
CharlesMaxim | 21:0b28b9d13164 | 1269 | uint8_t low_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1270 | /*! 1 - enable low-g, 0 - disable low-g */ |
CharlesMaxim | 21:0b28b9d13164 | 1271 | uint8_t low_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1272 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1273 | /*! 1 - enable low-g, 0 - disable low-g */ |
CharlesMaxim | 21:0b28b9d13164 | 1274 | uint8_t low_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1275 | /*! data source 0- filter & 1 pre-filter */ |
CharlesMaxim | 21:0b28b9d13164 | 1276 | uint8_t low_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1277 | /*! 0 - single-axis mode ,1 - axis-summing mode */ |
CharlesMaxim | 21:0b28b9d13164 | 1278 | uint8_t low_mode : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1279 | /*! hysteresis of low-g interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1280 | uint8_t low_hyst : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1281 | /*! low-g interrupt trigger threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1282 | uint8_t low_thres; |
CharlesMaxim | 21:0b28b9d13164 | 1283 | /*! low-g interrupt trigger delay */ |
CharlesMaxim | 21:0b28b9d13164 | 1284 | uint8_t low_dur; |
CharlesMaxim | 21:0b28b9d13164 | 1285 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1286 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1287 | |
CharlesMaxim | 21:0b28b9d13164 | 1288 | struct bmi160_acc_high_g_int_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1289 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1290 | /*! High-g interrupt x, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1291 | uint8_t high_g_x :1; |
CharlesMaxim | 21:0b28b9d13164 | 1292 | /*! High-g interrupt y, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1293 | uint8_t high_g_y :1; |
CharlesMaxim | 21:0b28b9d13164 | 1294 | /*! High-g interrupt z, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1295 | uint8_t high_g_z :1; |
CharlesMaxim | 21:0b28b9d13164 | 1296 | /*! High-g hysteresis */ |
CharlesMaxim | 21:0b28b9d13164 | 1297 | uint8_t high_hy :2; |
CharlesMaxim | 21:0b28b9d13164 | 1298 | /*! data source 0- filter & 1 pre-filter */ |
CharlesMaxim | 21:0b28b9d13164 | 1299 | uint8_t high_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1300 | /*! High-g threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1301 | uint8_t high_thres; |
CharlesMaxim | 21:0b28b9d13164 | 1302 | /*! High-g duration */ |
CharlesMaxim | 21:0b28b9d13164 | 1303 | uint8_t high_dur; |
CharlesMaxim | 21:0b28b9d13164 | 1304 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1305 | /*! High-g duration */ |
CharlesMaxim | 21:0b28b9d13164 | 1306 | uint8_t high_dur; |
CharlesMaxim | 21:0b28b9d13164 | 1307 | /*! High-g threshold */ |
CharlesMaxim | 21:0b28b9d13164 | 1308 | uint8_t high_thres; |
CharlesMaxim | 21:0b28b9d13164 | 1309 | /*! data source 0- filter & 1 pre-filter */ |
CharlesMaxim | 21:0b28b9d13164 | 1310 | uint8_t high_data_src :1; |
CharlesMaxim | 21:0b28b9d13164 | 1311 | /*! High-g hysteresis */ |
CharlesMaxim | 21:0b28b9d13164 | 1312 | uint8_t high_hy : 2; |
CharlesMaxim | 21:0b28b9d13164 | 1313 | /*! High-g interrupt z, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1314 | uint8_t high_g_z : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1315 | /*! High-g interrupt y, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1316 | uint8_t high_g_y : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1317 | /*! High-g interrupt x, 1 - enable, 0 - disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1318 | uint8_t high_g_x : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1319 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1320 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1321 | |
CharlesMaxim | 21:0b28b9d13164 | 1322 | struct bmi160_int_pin_settg { |
CharlesMaxim | 21:0b28b9d13164 | 1323 | #if LITTLE_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1324 | /*! To enable either INT1 or INT2 pin as output. |
CharlesMaxim | 21:0b28b9d13164 | 1325 | * 0- output disabled ,1- output enabled */ |
CharlesMaxim | 21:0b28b9d13164 | 1326 | uint16_t output_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1327 | /*! 0 - push-pull 1- open drain,only valid if output_en is set 1 */ |
CharlesMaxim | 21:0b28b9d13164 | 1328 | uint16_t output_mode :1; |
CharlesMaxim | 21:0b28b9d13164 | 1329 | /*! 0 - active low , 1 - active high level. |
CharlesMaxim | 21:0b28b9d13164 | 1330 | * if output_en is 1,this applies to interrupts,else PMU_trigger */ |
CharlesMaxim | 21:0b28b9d13164 | 1331 | uint16_t output_type :1; |
CharlesMaxim | 21:0b28b9d13164 | 1332 | /*! 0 - level trigger , 1 - edge trigger */ |
CharlesMaxim | 21:0b28b9d13164 | 1333 | uint16_t edge_ctrl :1; |
CharlesMaxim | 21:0b28b9d13164 | 1334 | /*! To enable either INT1 or INT2 pin as input. |
CharlesMaxim | 21:0b28b9d13164 | 1335 | * 0 - input disabled ,1 - input enabled */ |
CharlesMaxim | 21:0b28b9d13164 | 1336 | uint16_t input_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1337 | /*! latch duration*/ |
CharlesMaxim | 21:0b28b9d13164 | 1338 | uint16_t latch_dur :4; |
CharlesMaxim | 21:0b28b9d13164 | 1339 | #elif BIG_ENDIAN == 1 |
CharlesMaxim | 21:0b28b9d13164 | 1340 | /*! latch duration*/ |
CharlesMaxim | 21:0b28b9d13164 | 1341 | uint16_t latch_dur : 4; |
CharlesMaxim | 21:0b28b9d13164 | 1342 | /*! Latched,non-latched or temporary interrupt modes */ |
CharlesMaxim | 21:0b28b9d13164 | 1343 | uint16_t input_en : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1344 | /*! 1 - edge trigger, 0 - level trigger */ |
CharlesMaxim | 21:0b28b9d13164 | 1345 | uint16_t edge_ctrl : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1346 | /*! 0 - active low , 1 - active high level. |
CharlesMaxim | 21:0b28b9d13164 | 1347 | * if output_en is 1,this applies to interrupts,else PMU_trigger */ |
CharlesMaxim | 21:0b28b9d13164 | 1348 | uint16_t output_type : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1349 | /*! 0 - push-pull , 1 - open drain,only valid if output_en is set 1 */ |
CharlesMaxim | 21:0b28b9d13164 | 1350 | uint16_t output_mode : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1351 | /*! To enable either INT1 or INT2 pin as output. |
CharlesMaxim | 21:0b28b9d13164 | 1352 | * 0 - output disabled , 1 - output enabled */ |
CharlesMaxim | 21:0b28b9d13164 | 1353 | uint16_t output_en : 1; |
CharlesMaxim | 21:0b28b9d13164 | 1354 | #endif |
CharlesMaxim | 21:0b28b9d13164 | 1355 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1356 | |
CharlesMaxim | 21:0b28b9d13164 | 1357 | union bmi160_int_type_cfg { |
CharlesMaxim | 21:0b28b9d13164 | 1358 | /*! Tap interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1359 | struct bmi160_acc_tap_int_cfg acc_tap_int; |
CharlesMaxim | 21:0b28b9d13164 | 1360 | /*! Slope interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1361 | struct bmi160_acc_any_mot_int_cfg acc_any_motion_int; |
CharlesMaxim | 21:0b28b9d13164 | 1362 | /*! Significant motion interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1363 | struct bmi160_acc_sig_mot_int_cfg acc_sig_motion_int; |
CharlesMaxim | 21:0b28b9d13164 | 1364 | /*! Step detector interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1365 | struct bmi160_acc_step_detect_int_cfg acc_step_detect_int; |
CharlesMaxim | 21:0b28b9d13164 | 1366 | /*! No motion interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1367 | struct bmi160_acc_no_motion_int_cfg acc_no_motion_int; |
CharlesMaxim | 21:0b28b9d13164 | 1368 | /*! Orientation interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1369 | struct bmi160_acc_orient_int_cfg acc_orient_int; |
CharlesMaxim | 21:0b28b9d13164 | 1370 | /*! Flat interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1371 | struct bmi160_acc_flat_detect_int_cfg acc_flat_int; |
CharlesMaxim | 21:0b28b9d13164 | 1372 | /*! Low-g interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1373 | struct bmi160_acc_low_g_int_cfg acc_low_g_int; |
CharlesMaxim | 21:0b28b9d13164 | 1374 | /*! High-g interrupt structure */ |
CharlesMaxim | 21:0b28b9d13164 | 1375 | struct bmi160_acc_high_g_int_cfg acc_high_g_int; |
CharlesMaxim | 21:0b28b9d13164 | 1376 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1377 | |
CharlesMaxim | 21:0b28b9d13164 | 1378 | struct bmi160_int_settg { |
CharlesMaxim | 21:0b28b9d13164 | 1379 | /*! Interrupt channel */ |
CharlesMaxim | 21:0b28b9d13164 | 1380 | enum bmi160_int_channel int_channel; |
CharlesMaxim | 21:0b28b9d13164 | 1381 | /*! Select Interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1382 | enum bmi160_int_types int_type; |
CharlesMaxim | 21:0b28b9d13164 | 1383 | /*! Structure configuring Interrupt pins */ |
CharlesMaxim | 21:0b28b9d13164 | 1384 | struct bmi160_int_pin_settg int_pin_settg; |
CharlesMaxim | 21:0b28b9d13164 | 1385 | /*! Union configures required interrupt */ |
CharlesMaxim | 21:0b28b9d13164 | 1386 | union bmi160_int_type_cfg int_type_cfg; |
CharlesMaxim | 21:0b28b9d13164 | 1387 | /*! FIFO FULL INT 1-enable, 0-disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1388 | uint8_t fifo_full_int_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1389 | /*! FIFO WTM INT 1-enable, 0-disable */ |
CharlesMaxim | 21:0b28b9d13164 | 1390 | uint8_t fifo_WTM_int_en :1; |
CharlesMaxim | 21:0b28b9d13164 | 1391 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1392 | |
CharlesMaxim | 21:0b28b9d13164 | 1393 | /*! |
CharlesMaxim | 21:0b28b9d13164 | 1394 | * @brief This structure holds the information for usage of |
CharlesMaxim | 21:0b28b9d13164 | 1395 | * FIFO by the user. |
CharlesMaxim | 21:0b28b9d13164 | 1396 | */ |
CharlesMaxim | 21:0b28b9d13164 | 1397 | struct bmi160_fifo_frame { |
CharlesMaxim | 21:0b28b9d13164 | 1398 | /*! Data buffer of user defined length is to be mapped here */ |
CharlesMaxim | 21:0b28b9d13164 | 1399 | uint8_t *data; |
CharlesMaxim | 21:0b28b9d13164 | 1400 | /*! While calling the API "bmi160_get_fifo_data" , length stores |
CharlesMaxim | 21:0b28b9d13164 | 1401 | * number of bytes in FIFO to be read (specified by user as input) |
CharlesMaxim | 21:0b28b9d13164 | 1402 | * and after execution of the API ,number of FIFO data bytes |
CharlesMaxim | 21:0b28b9d13164 | 1403 | * available is provided as an output to user |
CharlesMaxim | 21:0b28b9d13164 | 1404 | */ |
CharlesMaxim | 21:0b28b9d13164 | 1405 | uint16_t length; |
CharlesMaxim | 21:0b28b9d13164 | 1406 | /*! FIFO time enable */ |
CharlesMaxim | 21:0b28b9d13164 | 1407 | uint8_t fifo_time_enable; |
CharlesMaxim | 21:0b28b9d13164 | 1408 | /*! Enabling of the FIFO header to stream in header mode */ |
CharlesMaxim | 21:0b28b9d13164 | 1409 | uint8_t fifo_header_enable; |
CharlesMaxim | 21:0b28b9d13164 | 1410 | /*! Streaming of the Accelerometer, Gyroscope |
CharlesMaxim | 21:0b28b9d13164 | 1411 | sensor data or both in FIFO */ |
CharlesMaxim | 21:0b28b9d13164 | 1412 | uint8_t fifo_data_enable; |
CharlesMaxim | 21:0b28b9d13164 | 1413 | /*! Will be equal to length when no more frames are there to parse */ |
CharlesMaxim | 21:0b28b9d13164 | 1414 | uint16_t accel_byte_start_idx; |
CharlesMaxim | 21:0b28b9d13164 | 1415 | /*! Will be equal to length when no more frames are there to parse */ |
CharlesMaxim | 21:0b28b9d13164 | 1416 | uint16_t gyro_byte_start_idx; |
CharlesMaxim | 21:0b28b9d13164 | 1417 | /*! Will be equal to length when no more frames are there to parse */ |
CharlesMaxim | 21:0b28b9d13164 | 1418 | uint16_t aux_byte_start_idx; |
CharlesMaxim | 21:0b28b9d13164 | 1419 | /*! Value of FIFO sensor time time */ |
CharlesMaxim | 21:0b28b9d13164 | 1420 | uint32_t sensor_time; |
CharlesMaxim | 21:0b28b9d13164 | 1421 | /*! Value of Skipped frame counts */ |
CharlesMaxim | 21:0b28b9d13164 | 1422 | uint8_t skipped_frame_count; |
CharlesMaxim | 21:0b28b9d13164 | 1423 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1424 | |
CharlesMaxim | 21:0b28b9d13164 | 1425 | struct bmi160_dev { |
CharlesMaxim | 21:0b28b9d13164 | 1426 | /*! Chip Id */ |
CharlesMaxim | 21:0b28b9d13164 | 1427 | uint8_t chip_id; |
CharlesMaxim | 21:0b28b9d13164 | 1428 | /*! Device Id */ |
CharlesMaxim | 21:0b28b9d13164 | 1429 | uint8_t id; |
CharlesMaxim | 21:0b28b9d13164 | 1430 | /*! 0 - I2C , 1 - SPI Interface */ |
CharlesMaxim | 21:0b28b9d13164 | 1431 | uint8_t interface; |
CharlesMaxim | 21:0b28b9d13164 | 1432 | /*! Hold active interrupts status for any and sig motion |
CharlesMaxim | 21:0b28b9d13164 | 1433 | * 0 - Any-motion enable, 1 - Sig-motion enable, |
CharlesMaxim | 21:0b28b9d13164 | 1434 | * -1 neither any-motion nor sig-motion selected */ |
CharlesMaxim | 21:0b28b9d13164 | 1435 | enum bmi160_any_sig_motion_active_interrupt_state any_sig_sel; |
CharlesMaxim | 21:0b28b9d13164 | 1436 | /*! Structure to configure Accel sensor */ |
CharlesMaxim | 21:0b28b9d13164 | 1437 | struct bmi160_cfg accel_cfg; |
CharlesMaxim | 21:0b28b9d13164 | 1438 | /*! Structure to hold previous/old accel config parameters. |
CharlesMaxim | 21:0b28b9d13164 | 1439 | * This is used at driver level to prevent overwriting of same |
CharlesMaxim | 21:0b28b9d13164 | 1440 | * data, hence user does not change it in the code */ |
CharlesMaxim | 21:0b28b9d13164 | 1441 | struct bmi160_cfg prev_accel_cfg; |
CharlesMaxim | 21:0b28b9d13164 | 1442 | /*! Structure to configure Gyro sensor */ |
CharlesMaxim | 21:0b28b9d13164 | 1443 | struct bmi160_cfg gyro_cfg; |
CharlesMaxim | 21:0b28b9d13164 | 1444 | /*! Structure to hold previous/old gyro config parameters. |
CharlesMaxim | 21:0b28b9d13164 | 1445 | * This is used at driver level to prevent overwriting of same |
CharlesMaxim | 21:0b28b9d13164 | 1446 | * data, hence user does not change it in the code */ |
CharlesMaxim | 21:0b28b9d13164 | 1447 | struct bmi160_cfg prev_gyro_cfg; |
CharlesMaxim | 21:0b28b9d13164 | 1448 | /*! Structure to configure the auxiliary sensor */ |
CharlesMaxim | 21:0b28b9d13164 | 1449 | struct bmi160_aux_cfg aux_cfg; |
CharlesMaxim | 21:0b28b9d13164 | 1450 | /*! Structure to hold previous/old aux config parameters. |
CharlesMaxim | 21:0b28b9d13164 | 1451 | * This is used at driver level to prevent overwriting of same |
CharlesMaxim | 21:0b28b9d13164 | 1452 | * data, hence user does not change it in the code */ |
CharlesMaxim | 21:0b28b9d13164 | 1453 | struct bmi160_aux_cfg prev_aux_cfg; |
CharlesMaxim | 21:0b28b9d13164 | 1454 | /*! FIFO related configurations */ |
CharlesMaxim | 21:0b28b9d13164 | 1455 | struct bmi160_fifo_frame *fifo; |
CharlesMaxim | 21:0b28b9d13164 | 1456 | /*! Read function pointer */ |
CharlesMaxim | 21:0b28b9d13164 | 1457 | bmi160_com_fptr_t read; |
CharlesMaxim | 21:0b28b9d13164 | 1458 | /*! Write function pointer */ |
CharlesMaxim | 21:0b28b9d13164 | 1459 | bmi160_com_fptr_t write; |
CharlesMaxim | 21:0b28b9d13164 | 1460 | /*! Delay function pointer */ |
CharlesMaxim | 21:0b28b9d13164 | 1461 | bmi160_delay_fptr_t delay_ms; |
CharlesMaxim | 21:0b28b9d13164 | 1462 | }; |
CharlesMaxim | 21:0b28b9d13164 | 1463 | |
CharlesMaxim | 21:0b28b9d13164 | 1464 | |
CharlesMaxim | 21:0b28b9d13164 | 1465 | #endif /* BMI160_DEFS_H_ */ |