Utility library for HSP SPo2 HR demo including user interface, board support adn accelerometer.
demoAccelerometer/bmi160.h@0:a12d6976d64c, 2018-12-17 (annotated)
- Committer:
- gmehmet
- Date:
- Mon Dec 17 13:58:56 2018 +0300
- Revision:
- 0:a12d6976d64c
create and put source to HSP demo utility repo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gmehmet | 0:a12d6976d64c | 1 | /********************************************************************** |
gmehmet | 0:a12d6976d64c | 2 | * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. |
gmehmet | 0:a12d6976d64c | 3 | * |
gmehmet | 0:a12d6976d64c | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
gmehmet | 0:a12d6976d64c | 5 | * copy of this software and associated documentation files (the "Software"), |
gmehmet | 0:a12d6976d64c | 6 | * to deal in the Software without restriction, including without limitation |
gmehmet | 0:a12d6976d64c | 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
gmehmet | 0:a12d6976d64c | 8 | * and/or sell copies of the Software, and to permit persons to whom the |
gmehmet | 0:a12d6976d64c | 9 | * Software is furnished to do so, subject to the following conditions: |
gmehmet | 0:a12d6976d64c | 10 | * |
gmehmet | 0:a12d6976d64c | 11 | * The above copyright notice and this permission notice shall be included |
gmehmet | 0:a12d6976d64c | 12 | * in all copies or substantial portions of the Software. |
gmehmet | 0:a12d6976d64c | 13 | * |
gmehmet | 0:a12d6976d64c | 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
gmehmet | 0:a12d6976d64c | 15 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
gmehmet | 0:a12d6976d64c | 16 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
gmehmet | 0:a12d6976d64c | 17 | * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES |
gmehmet | 0:a12d6976d64c | 18 | * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
gmehmet | 0:a12d6976d64c | 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
gmehmet | 0:a12d6976d64c | 20 | * OTHER DEALINGS IN THE SOFTWARE. |
gmehmet | 0:a12d6976d64c | 21 | * |
gmehmet | 0:a12d6976d64c | 22 | * Except as contained in this notice, the name of Maxim Integrated |
gmehmet | 0:a12d6976d64c | 23 | * Products, Inc. shall not be used except as stated in the Maxim Integrated |
gmehmet | 0:a12d6976d64c | 24 | * Products, Inc. Branding Policy. |
gmehmet | 0:a12d6976d64c | 25 | * |
gmehmet | 0:a12d6976d64c | 26 | * The mere transfer of this software does not imply any licenses |
gmehmet | 0:a12d6976d64c | 27 | * of trade secrets, proprietary technology, copyrights, patents, |
gmehmet | 0:a12d6976d64c | 28 | * trademarks, maskwork rights, or any other form of intellectual |
gmehmet | 0:a12d6976d64c | 29 | * property whatsoever. Maxim Integrated Products, Inc. retains all |
gmehmet | 0:a12d6976d64c | 30 | * ownership rights. |
gmehmet | 0:a12d6976d64c | 31 | **********************************************************************/ |
gmehmet | 0:a12d6976d64c | 32 | |
gmehmet | 0:a12d6976d64c | 33 | |
gmehmet | 0:a12d6976d64c | 34 | #ifndef BMI160_H |
gmehmet | 0:a12d6976d64c | 35 | #define BMI160_H |
gmehmet | 0:a12d6976d64c | 36 | |
gmehmet | 0:a12d6976d64c | 37 | #include "mbed.h" |
gmehmet | 0:a12d6976d64c | 38 | |
gmehmet | 0:a12d6976d64c | 39 | /** |
gmehmet | 0:a12d6976d64c | 40 | @brief The BMI160 is a small, low power, low noise 16-bit inertial measurement |
gmehmet | 0:a12d6976d64c | 41 | unit designed for use in mobile applications like augmented reality or indoor |
gmehmet | 0:a12d6976d64c | 42 | navigation which require highly accurate, real-time sensor data. |
gmehmet | 0:a12d6976d64c | 43 | |
gmehmet | 0:a12d6976d64c | 44 | In full operation mode, with both the accelerometer and gyroscope enabled, the |
gmehmet | 0:a12d6976d64c | 45 | current consumption is typically 950 μA, enabling always-on applications in |
gmehmet | 0:a12d6976d64c | 46 | battery driven devices. It is available in a compact 14-pin 2.5 x 3.0 x 0.8 mm³ |
gmehmet | 0:a12d6976d64c | 47 | LGA package." |
gmehmet | 0:a12d6976d64c | 48 | |
gmehmet | 0:a12d6976d64c | 49 | This class is an abstract base class and can not be instaniated, use BMI160_I2C |
gmehmet | 0:a12d6976d64c | 50 | or BMI160_SPI. |
gmehmet | 0:a12d6976d64c | 51 | */ |
gmehmet | 0:a12d6976d64c | 52 | class BMI160 |
gmehmet | 0:a12d6976d64c | 53 | { |
gmehmet | 0:a12d6976d64c | 54 | public: |
gmehmet | 0:a12d6976d64c | 55 | |
gmehmet | 0:a12d6976d64c | 56 | ///Return value on success. |
gmehmet | 0:a12d6976d64c | 57 | static const uint8_t RTN_NO_ERROR = 0; |
gmehmet | 0:a12d6976d64c | 58 | |
gmehmet | 0:a12d6976d64c | 59 | ///Sensor types |
gmehmet | 0:a12d6976d64c | 60 | enum Sensors |
gmehmet | 0:a12d6976d64c | 61 | { |
gmehmet | 0:a12d6976d64c | 62 | MAG = 0, ///<Optional external sensor |
gmehmet | 0:a12d6976d64c | 63 | GYRO, ///<Angular rate sensor |
gmehmet | 0:a12d6976d64c | 64 | ACC ///<g sensor |
gmehmet | 0:a12d6976d64c | 65 | }; |
gmehmet | 0:a12d6976d64c | 66 | |
gmehmet | 0:a12d6976d64c | 67 | ///Sensor Axis |
gmehmet | 0:a12d6976d64c | 68 | enum SensorAxis |
gmehmet | 0:a12d6976d64c | 69 | { |
gmehmet | 0:a12d6976d64c | 70 | X_AXIS = 0, |
gmehmet | 0:a12d6976d64c | 71 | Y_AXIS, |
gmehmet | 0:a12d6976d64c | 72 | Z_AXIS |
gmehmet | 0:a12d6976d64c | 73 | }; |
gmehmet | 0:a12d6976d64c | 74 | |
gmehmet | 0:a12d6976d64c | 75 | ///Structure for axis data |
gmehmet | 0:a12d6976d64c | 76 | struct AxisData |
gmehmet | 0:a12d6976d64c | 77 | { |
gmehmet | 0:a12d6976d64c | 78 | int16_t raw; ///<Axis raw data |
gmehmet | 0:a12d6976d64c | 79 | float scaled; ///<Axis scaled data |
gmehmet | 0:a12d6976d64c | 80 | }; |
gmehmet | 0:a12d6976d64c | 81 | |
gmehmet | 0:a12d6976d64c | 82 | ///Structure for sensor time data |
gmehmet | 0:a12d6976d64c | 83 | struct SensorTime |
gmehmet | 0:a12d6976d64c | 84 | { |
gmehmet | 0:a12d6976d64c | 85 | uint32_t raw; ///<raw SensorTime |
gmehmet | 0:a12d6976d64c | 86 | float seconds; ///<SensorTime as seconds |
gmehmet | 0:a12d6976d64c | 87 | }; |
gmehmet | 0:a12d6976d64c | 88 | |
gmehmet | 0:a12d6976d64c | 89 | ///Period of internal counter |
gmehmet | 0:a12d6976d64c | 90 | static const float SENSOR_TIME_LSB = 39e-6; |
gmehmet | 0:a12d6976d64c | 91 | |
gmehmet | 0:a12d6976d64c | 92 | ///Structure for holding sensor data |
gmehmet | 0:a12d6976d64c | 93 | struct SensorData |
gmehmet | 0:a12d6976d64c | 94 | { |
gmehmet | 0:a12d6976d64c | 95 | AxisData xAxis; ///<Sensor X axis data |
gmehmet | 0:a12d6976d64c | 96 | AxisData yAxis; ///<Sensor Y axis data |
gmehmet | 0:a12d6976d64c | 97 | AxisData zAxis; ///<Sensor Z axis data |
gmehmet | 0:a12d6976d64c | 98 | }; |
gmehmet | 0:a12d6976d64c | 99 | |
gmehmet | 0:a12d6976d64c | 100 | |
gmehmet | 0:a12d6976d64c | 101 | ///BMI160 registers |
gmehmet | 0:a12d6976d64c | 102 | enum Registers |
gmehmet | 0:a12d6976d64c | 103 | { |
gmehmet | 0:a12d6976d64c | 104 | CHIP_ID = 0x00, ///<Chip Identification. |
gmehmet | 0:a12d6976d64c | 105 | ERR_REG = 0x02, ///<Reports sensor error flags. Flags reset when read. |
gmehmet | 0:a12d6976d64c | 106 | PMU_STATUS, ///<Reports current power mode for sensors. |
gmehmet | 0:a12d6976d64c | 107 | DATA_0, ///<MAG_X axis bits7:0 |
gmehmet | 0:a12d6976d64c | 108 | DATA_1, ///<MAG_X axis bits15:8 |
gmehmet | 0:a12d6976d64c | 109 | DATA_2, ///<MAG_Y axis bits7:0 |
gmehmet | 0:a12d6976d64c | 110 | DATA_3, ///<MAG_Y axis bits15:8 |
gmehmet | 0:a12d6976d64c | 111 | DATA_4, ///<MAG_Z axis bits7:0 |
gmehmet | 0:a12d6976d64c | 112 | DATA_5, ///<MAG_Z axis bits15:8 |
gmehmet | 0:a12d6976d64c | 113 | DATA_6, ///<RHALL bits7:0 |
gmehmet | 0:a12d6976d64c | 114 | DATA_7, ///<RHALL bits15:8 |
gmehmet | 0:a12d6976d64c | 115 | DATA_8, ///<GYR_X axis bits7:0 |
gmehmet | 0:a12d6976d64c | 116 | DATA_9, ///<GYR_X axis bits15:8 |
gmehmet | 0:a12d6976d64c | 117 | DATA_10, ///<GYR_Y axis bits7:0 |
gmehmet | 0:a12d6976d64c | 118 | DATA_11, ///<GYR_Y axis bits15:8 |
gmehmet | 0:a12d6976d64c | 119 | DATA_12, ///<GYR_Z axis bits7:0 |
gmehmet | 0:a12d6976d64c | 120 | DATA_13, ///<GYR_Z axis bits15:8 |
gmehmet | 0:a12d6976d64c | 121 | DATA_14, ///<ACC_X axis bits7:0 |
gmehmet | 0:a12d6976d64c | 122 | DATA_15, ///<ACC_X axis bits15:8 |
gmehmet | 0:a12d6976d64c | 123 | DATA_16, ///<ACC_Y axis bits7:0 |
gmehmet | 0:a12d6976d64c | 124 | DATA_17, ///<ACC_Y axis bits15:8 |
gmehmet | 0:a12d6976d64c | 125 | DATA_18, ///<ACC_Z axis bits7:0 |
gmehmet | 0:a12d6976d64c | 126 | DATA_19, ///<ACC_Z axis bits15:8 |
gmehmet | 0:a12d6976d64c | 127 | SENSORTIME_0, ///<24bit counter synchronized with data, bits7:0 |
gmehmet | 0:a12d6976d64c | 128 | SENSORTIME_1, ///<24bit counter synchronized with data, bits15:8 |
gmehmet | 0:a12d6976d64c | 129 | SENSORTIME_2, ///<24bit counter synchronized with data, bits23:16 |
gmehmet | 0:a12d6976d64c | 130 | STATUS, ///<Reports sensors status flags |
gmehmet | 0:a12d6976d64c | 131 | INT_STATUS_0, ///<Contains interrupt status flags |
gmehmet | 0:a12d6976d64c | 132 | INT_STATUS_1, ///<Contains interrupt status flags |
gmehmet | 0:a12d6976d64c | 133 | INT_STATUS_2, ///<Contains interrupt status flags |
gmehmet | 0:a12d6976d64c | 134 | INT_STATUS_3, ///<Contains interrupt status flags |
gmehmet | 0:a12d6976d64c | 135 | TEMPERATURE_0, ///<Contains temperature of sensor, bits7:0 |
gmehmet | 0:a12d6976d64c | 136 | TEMPERATURE_1, ///<Contains temperature of sensor, bits15:8 |
gmehmet | 0:a12d6976d64c | 137 | FIFO_LENGTH_0, ///<Current fill level of FIFO, bits7:0 |
gmehmet | 0:a12d6976d64c | 138 | FIFO_LENGTH_1, ///<Current fill level of FIFO, bits10:8 |
gmehmet | 0:a12d6976d64c | 139 | FIFO_DATA, ///<FIFO data read out register, burst read |
gmehmet | 0:a12d6976d64c | 140 | ACC_CONF = 0x40, ///<Set ODR, bandwidth, and read mode of accelerometer |
gmehmet | 0:a12d6976d64c | 141 | ACC_RANGE, ///<Sets accelerometer g-range |
gmehmet | 0:a12d6976d64c | 142 | GYR_CONF, ///<Set ODR, bandwidth, and read mode of gyroscope |
gmehmet | 0:a12d6976d64c | 143 | GYR_RANGE, ///<Sets gyroscope angular rate measurement range |
gmehmet | 0:a12d6976d64c | 144 | MAG_CONF, ///<Sets ODR of magnetometer interface |
gmehmet | 0:a12d6976d64c | 145 | FIFO_DOWNS, ///<Sets down sampling ratios of accel and gyro data |
gmehmet | 0:a12d6976d64c | 146 | ///<for FIFO |
gmehmet | 0:a12d6976d64c | 147 | FIFO_CONFIG_0, ///<Sets FIFO Watermark |
gmehmet | 0:a12d6976d64c | 148 | FIFO_CONFIG_1, ///<Sets which sensor data is available in FIFO, |
gmehmet | 0:a12d6976d64c | 149 | ///<Header/Headerless mode, Ext Int tagging, Sensortime |
gmehmet | 0:a12d6976d64c | 150 | MAG_IF_0 = 0x4B, ///<Magnetometer 7-bit I2C address, bits7:1 |
gmehmet | 0:a12d6976d64c | 151 | MAG_IF_1, ///<Magnetometer interface configuration |
gmehmet | 0:a12d6976d64c | 152 | MAG_IF_2, ///<Magnetometer address to read |
gmehmet | 0:a12d6976d64c | 153 | MAG_IF_3, ///<Magnetometer address to write |
gmehmet | 0:a12d6976d64c | 154 | MAG_IF_4, ///<Magnetometer data to write |
gmehmet | 0:a12d6976d64c | 155 | INT_EN_0, ///<Interrupt enable bits |
gmehmet | 0:a12d6976d64c | 156 | INT_EN_1, ///<Interrupt enable bits |
gmehmet | 0:a12d6976d64c | 157 | INT_EN_2, ///<Interrupt enable bits |
gmehmet | 0:a12d6976d64c | 158 | INT_OUT_CTRL, ///<Contains the behavioral configuration of INT pins |
gmehmet | 0:a12d6976d64c | 159 | INT_LATCH, ///<Contains the interrupt rest bit and the interrupt |
gmehmet | 0:a12d6976d64c | 160 | ///<mode selection |
gmehmet | 0:a12d6976d64c | 161 | INT_MAP_0, ///<Controls which interrupt signals are mapped to the |
gmehmet | 0:a12d6976d64c | 162 | ///<INT1 and INT2 pins |
gmehmet | 0:a12d6976d64c | 163 | INT_MAP_1, ///<Controls which interrupt signals are mapped to the |
gmehmet | 0:a12d6976d64c | 164 | ///<INT1 and INT2 pins |
gmehmet | 0:a12d6976d64c | 165 | INT_MAP_2, ///<Controls which interrupt signals are mapped to the |
gmehmet | 0:a12d6976d64c | 166 | ///<INT1 and INT2 pins |
gmehmet | 0:a12d6976d64c | 167 | INT_DATA_0, ///<Contains the data source definition for the two |
gmehmet | 0:a12d6976d64c | 168 | ///<interrupt groups |
gmehmet | 0:a12d6976d64c | 169 | INT_DATA_1, ///<Contains the data source definition for the two |
gmehmet | 0:a12d6976d64c | 170 | ///<interrupt groups |
gmehmet | 0:a12d6976d64c | 171 | INT_LOWHIGH_0, ///<Contains the configuration for the low g interrupt |
gmehmet | 0:a12d6976d64c | 172 | INT_LOWHIGH_1, ///<Contains the configuration for the low g interrupt |
gmehmet | 0:a12d6976d64c | 173 | INT_LOWHIGH_2, ///<Contains the configuration for the low g interrupt |
gmehmet | 0:a12d6976d64c | 174 | INT_LOWHIGH_3, ///<Contains the configuration for the low g interrupt |
gmehmet | 0:a12d6976d64c | 175 | INT_LOWHIGH_4, ///<Contains the configuration for the low g interrupt |
gmehmet | 0:a12d6976d64c | 176 | INT_MOTION_0, ///<Contains the configuration for the any motion and |
gmehmet | 0:a12d6976d64c | 177 | ///<no motion interrupts |
gmehmet | 0:a12d6976d64c | 178 | INT_MOTION_1, ///<Contains the configuration for the any motion and |
gmehmet | 0:a12d6976d64c | 179 | ///<no motion interrupts |
gmehmet | 0:a12d6976d64c | 180 | INT_MOTION_2, ///<Contains the configuration for the any motion and |
gmehmet | 0:a12d6976d64c | 181 | ///<no motion interrupts |
gmehmet | 0:a12d6976d64c | 182 | INT_MOTION_3, ///<Contains the configuration for the any motion and |
gmehmet | 0:a12d6976d64c | 183 | ///<no motion interrupts |
gmehmet | 0:a12d6976d64c | 184 | INT_TAP_0, ///<Contains the configuration for the tap interrupts |
gmehmet | 0:a12d6976d64c | 185 | INT_TAP_1, ///<Contains the configuration for the tap interrupts |
gmehmet | 0:a12d6976d64c | 186 | INT_ORIENT_0, ///<Contains the configuration for the oeientation |
gmehmet | 0:a12d6976d64c | 187 | ///<interrupt |
gmehmet | 0:a12d6976d64c | 188 | INT_ORIENT_1, ///<Contains the configuration for the oeientation |
gmehmet | 0:a12d6976d64c | 189 | ///<interrupt |
gmehmet | 0:a12d6976d64c | 190 | INT_FLAT_0, ///<Contains the configuration for the flat interrupt |
gmehmet | 0:a12d6976d64c | 191 | INT_FLAT_1, ///<Contains the configuration for the flat interrupt |
gmehmet | 0:a12d6976d64c | 192 | FOC_CONF, ///<Contains configuration for the fast offset |
gmehmet | 0:a12d6976d64c | 193 | ///<compensation for the accelerometer and gyroscope |
gmehmet | 0:a12d6976d64c | 194 | CONF, ///<Configuration of sensor, nvm_prog_en bit |
gmehmet | 0:a12d6976d64c | 195 | IF_CONF, ///<Contains settings for the digital interface |
gmehmet | 0:a12d6976d64c | 196 | PMU_TRIGGER, ///<Sets trigger conditions to change gyro power modes |
gmehmet | 0:a12d6976d64c | 197 | SELF_TEST, ///<Self test configuration |
gmehmet | 0:a12d6976d64c | 198 | NV_CONF = 0x70, ///<Contains settings for the digital interface |
gmehmet | 0:a12d6976d64c | 199 | OFFSET_0, ///<Contains offset comp values for acc_off_x7:0 |
gmehmet | 0:a12d6976d64c | 200 | OFFSET_1, ///<Contains offset comp values for acc_off_y7:0 |
gmehmet | 0:a12d6976d64c | 201 | OFFSET_2, ///<Contains offset comp values for acc_off_z7:0 |
gmehmet | 0:a12d6976d64c | 202 | OFFSET_3, ///<Contains offset comp values for gyr_off_x7:0 |
gmehmet | 0:a12d6976d64c | 203 | OFFSET_4, ///<Contains offset comp values for gyr_off_y7:0 |
gmehmet | 0:a12d6976d64c | 204 | OFFSET_5, ///<Contains offset comp values for gyr_off_z7:0 |
gmehmet | 0:a12d6976d64c | 205 | OFFSET_6, ///<gyr/acc offset enable bit and gyr_off_(zyx) bits9:8 |
gmehmet | 0:a12d6976d64c | 206 | STEP_CNT_0, ///<Step counter bits 15:8 |
gmehmet | 0:a12d6976d64c | 207 | STEP_CNT_1, ///<Step counter bits 7:0 |
gmehmet | 0:a12d6976d64c | 208 | STEP_CONF_0, ///<Contains configuration of the step detector |
gmehmet | 0:a12d6976d64c | 209 | STEP_CONF_1, ///<Contains configuration of the step detector |
gmehmet | 0:a12d6976d64c | 210 | CMD = 0x7E ///<Command register triggers operations like |
gmehmet | 0:a12d6976d64c | 211 | ///<softreset, NVM programming, etc. |
gmehmet | 0:a12d6976d64c | 212 | }; |
gmehmet | 0:a12d6976d64c | 213 | |
gmehmet | 0:a12d6976d64c | 214 | |
gmehmet | 0:a12d6976d64c | 215 | ///@name ERR_REG(0x02) |
gmehmet | 0:a12d6976d64c | 216 | ///Error register data |
gmehmet | 0:a12d6976d64c | 217 | ///@{ |
gmehmet | 0:a12d6976d64c | 218 | |
gmehmet | 0:a12d6976d64c | 219 | static const uint8_t FATAL_ERR_MASK = 0x01; |
gmehmet | 0:a12d6976d64c | 220 | static const uint8_t FATAL_ERR_POS = 0x00; |
gmehmet | 0:a12d6976d64c | 221 | static const uint8_t ERR_CODE_MASK = 0x1E; |
gmehmet | 0:a12d6976d64c | 222 | static const uint8_t ERR_CODE_POS = 0x01; |
gmehmet | 0:a12d6976d64c | 223 | static const uint8_t I2C_FAIL_ERR_MASK = 0x20; |
gmehmet | 0:a12d6976d64c | 224 | static const uint8_t I2C_FAIL_ERR_POS = 0x05; |
gmehmet | 0:a12d6976d64c | 225 | static const uint8_t DROP_CMD_ERR_MASK = 0x40; |
gmehmet | 0:a12d6976d64c | 226 | static const uint8_t DROP_CMD_ERR_POS = 0x06; |
gmehmet | 0:a12d6976d64c | 227 | static const uint8_t MAG_DRDY_ERR_MASK = 0x80; |
gmehmet | 0:a12d6976d64c | 228 | static const uint8_t MAG_DRDY_ERR_POS = 0x08; |
gmehmet | 0:a12d6976d64c | 229 | |
gmehmet | 0:a12d6976d64c | 230 | ///Enumerated error codes |
gmehmet | 0:a12d6976d64c | 231 | enum ErrorCodes |
gmehmet | 0:a12d6976d64c | 232 | { |
gmehmet | 0:a12d6976d64c | 233 | NO_ERROR = 0, ///<No Error |
gmehmet | 0:a12d6976d64c | 234 | ERROR_1, ///<Listed as error |
gmehmet | 0:a12d6976d64c | 235 | ERROR_2, ///<Listed as error |
gmehmet | 0:a12d6976d64c | 236 | LPM_INT_PFD, ///<Low-power mode and interrupt uses pre-filtered |
gmehmet | 0:a12d6976d64c | 237 | ///<data |
gmehmet | 0:a12d6976d64c | 238 | ODR_MISMATCH = 0x06, ///<ODRs of enabled sensors in headerless mode do |
gmehmet | 0:a12d6976d64c | 239 | ///<not match |
gmehmet | 0:a12d6976d64c | 240 | PFD_USED_LPM ///<Pre-filtered data are used in low power mode |
gmehmet | 0:a12d6976d64c | 241 | }; |
gmehmet | 0:a12d6976d64c | 242 | ///@} |
gmehmet | 0:a12d6976d64c | 243 | |
gmehmet | 0:a12d6976d64c | 244 | |
gmehmet | 0:a12d6976d64c | 245 | ///@name ACC_CONF(0x40) and ACC_RANGE(0x41) |
gmehmet | 0:a12d6976d64c | 246 | ///Data for configuring accelerometer |
gmehmet | 0:a12d6976d64c | 247 | ///@{ |
gmehmet | 0:a12d6976d64c | 248 | |
gmehmet | 0:a12d6976d64c | 249 | static const uint8_t ACC_ODR_MASK = 0x0F; |
gmehmet | 0:a12d6976d64c | 250 | static const uint8_t ACC_ODR_POS = 0x00; |
gmehmet | 0:a12d6976d64c | 251 | static const uint8_t ACC_BWP_MASK = 0x70; |
gmehmet | 0:a12d6976d64c | 252 | static const uint8_t ACC_BWP_POS = 0x04; |
gmehmet | 0:a12d6976d64c | 253 | static const uint8_t ACC_US_MASK = 0x80; |
gmehmet | 0:a12d6976d64c | 254 | static const uint8_t ACC_US_POS = 0x07; |
gmehmet | 0:a12d6976d64c | 255 | static const uint8_t ACC_RANGE_MASK = 0x0F; |
gmehmet | 0:a12d6976d64c | 256 | static const uint8_t ACC_RANGE_POS = 0x00; |
gmehmet | 0:a12d6976d64c | 257 | |
gmehmet | 0:a12d6976d64c | 258 | ///Accelerometer output data rates |
gmehmet | 0:a12d6976d64c | 259 | enum AccOutputDataRate |
gmehmet | 0:a12d6976d64c | 260 | { |
gmehmet | 0:a12d6976d64c | 261 | ACC_ODR_1 = 1, ///< 25/32Hz |
gmehmet | 0:a12d6976d64c | 262 | ACC_ODR_2, ///< 25/16Hz |
gmehmet | 0:a12d6976d64c | 263 | ACC_ODR_3, ///< 25/8Hz |
gmehmet | 0:a12d6976d64c | 264 | ACC_ODR_4, ///< 25/4Hz |
gmehmet | 0:a12d6976d64c | 265 | ACC_ODR_5, ///< 25/2Hz |
gmehmet | 0:a12d6976d64c | 266 | ACC_ODR_6, ///< 25Hz |
gmehmet | 0:a12d6976d64c | 267 | ACC_ODR_7, ///< 50Hz |
gmehmet | 0:a12d6976d64c | 268 | ACC_ODR_8, ///< 100Hz |
gmehmet | 0:a12d6976d64c | 269 | ACC_ODR_9, ///< 200Hz |
gmehmet | 0:a12d6976d64c | 270 | ACC_ODR_10, ///< 400Hz |
gmehmet | 0:a12d6976d64c | 271 | ACC_ODR_11, ///< 800Hz |
gmehmet | 0:a12d6976d64c | 272 | ACC_ODR_12 ///< 1600Hz |
gmehmet | 0:a12d6976d64c | 273 | }; |
gmehmet | 0:a12d6976d64c | 274 | |
gmehmet | 0:a12d6976d64c | 275 | ///Accelerometer bandwidth parameters |
gmehmet | 0:a12d6976d64c | 276 | enum AccBandWidthParam |
gmehmet | 0:a12d6976d64c | 277 | { |
gmehmet | 0:a12d6976d64c | 278 | ACC_BWP_0 = 0, ///< Average 1 cycle; when acc_us = 0 OSR4 |
gmehmet | 0:a12d6976d64c | 279 | ACC_BWP_1, ///< Average 2 cycles; when acc_us = 0 OSR2 |
gmehmet | 0:a12d6976d64c | 280 | ACC_BWP_2, ///< Average 4 cycles; when acc_us = 0 normal mode |
gmehmet | 0:a12d6976d64c | 281 | ACC_BWP_3, ///< Average 8 cycles |
gmehmet | 0:a12d6976d64c | 282 | ACC_BWP_4, ///< Average 16 cycles |
gmehmet | 0:a12d6976d64c | 283 | ACC_BWP_5, ///< Average 32 cycles |
gmehmet | 0:a12d6976d64c | 284 | ACC_BWP_6, ///< Average 64 cycles |
gmehmet | 0:a12d6976d64c | 285 | ACC_BWP_7 ///< Average 128 cycles |
gmehmet | 0:a12d6976d64c | 286 | }; |
gmehmet | 0:a12d6976d64c | 287 | |
gmehmet | 0:a12d6976d64c | 288 | ///Accelerometer undersampling |
gmehmet | 0:a12d6976d64c | 289 | enum AccUnderSampling |
gmehmet | 0:a12d6976d64c | 290 | { |
gmehmet | 0:a12d6976d64c | 291 | ACC_US_OFF = 0, |
gmehmet | 0:a12d6976d64c | 292 | ACC_US_ON |
gmehmet | 0:a12d6976d64c | 293 | }; |
gmehmet | 0:a12d6976d64c | 294 | |
gmehmet | 0:a12d6976d64c | 295 | ///Accelerometer ranges |
gmehmet | 0:a12d6976d64c | 296 | enum AccRange |
gmehmet | 0:a12d6976d64c | 297 | { |
gmehmet | 0:a12d6976d64c | 298 | SENS_2G = 0x03, ///<Accelerometer range +-2G |
gmehmet | 0:a12d6976d64c | 299 | SENS_4G = 0x05, ///<Accelerometer range +-4G |
gmehmet | 0:a12d6976d64c | 300 | SENS_8G = 0x08, ///<Accelerometer range +-8G |
gmehmet | 0:a12d6976d64c | 301 | SENS_16G = 0x0C ///<Accelerometer range +-16G |
gmehmet | 0:a12d6976d64c | 302 | }; |
gmehmet | 0:a12d6976d64c | 303 | |
gmehmet | 0:a12d6976d64c | 304 | static const float SENS_2G_LSB_PER_G = 16384.0F; |
gmehmet | 0:a12d6976d64c | 305 | static const float SENS_4G_LSB_PER_G = 8192.0F; |
gmehmet | 0:a12d6976d64c | 306 | static const float SENS_8G_LSB_PER_G = 4096.0F; |
gmehmet | 0:a12d6976d64c | 307 | static const float SENS_16G_LSB_PER_G = 2048.0F; |
gmehmet | 0:a12d6976d64c | 308 | |
gmehmet | 0:a12d6976d64c | 309 | ///Accelerometer configuration data structure |
gmehmet | 0:a12d6976d64c | 310 | struct AccConfig |
gmehmet | 0:a12d6976d64c | 311 | { |
gmehmet | 0:a12d6976d64c | 312 | AccRange range; ///<Accelerometer range |
gmehmet | 0:a12d6976d64c | 313 | AccUnderSampling us; ///<Accelerometr undersampling mode |
gmehmet | 0:a12d6976d64c | 314 | AccBandWidthParam bwp; ///<Accelerometer bandwidth param |
gmehmet | 0:a12d6976d64c | 315 | AccOutputDataRate odr; ///<Accelerometr output data rate |
gmehmet | 0:a12d6976d64c | 316 | }; |
gmehmet | 0:a12d6976d64c | 317 | |
gmehmet | 0:a12d6976d64c | 318 | ///Accelerometer default configuration |
gmehmet | 0:a12d6976d64c | 319 | static const AccConfig DEFAULT_ACC_CONFIG; |
gmehmet | 0:a12d6976d64c | 320 | ///@} |
gmehmet | 0:a12d6976d64c | 321 | |
gmehmet | 0:a12d6976d64c | 322 | |
gmehmet | 0:a12d6976d64c | 323 | ///@name GYR_CONF(0x42) and GYR_RANGE(0x43) |
gmehmet | 0:a12d6976d64c | 324 | ///Data for configuring gyroscope |
gmehmet | 0:a12d6976d64c | 325 | ///@{ |
gmehmet | 0:a12d6976d64c | 326 | |
gmehmet | 0:a12d6976d64c | 327 | static const uint8_t GYRO_ODR_MASK = 0x0F; |
gmehmet | 0:a12d6976d64c | 328 | static const uint8_t GYRO_ODR_POS = 0x00; |
gmehmet | 0:a12d6976d64c | 329 | static const uint8_t GYRO_BWP_MASK = 0x30; |
gmehmet | 0:a12d6976d64c | 330 | static const uint8_t GYRO_BWP_POS = 0x04; |
gmehmet | 0:a12d6976d64c | 331 | static const uint8_t GYRO_RANGE_MASK = 0x07; |
gmehmet | 0:a12d6976d64c | 332 | static const uint8_t GYRO_RANGE_POS = 0x00; |
gmehmet | 0:a12d6976d64c | 333 | |
gmehmet | 0:a12d6976d64c | 334 | ///Gyroscope output data rates |
gmehmet | 0:a12d6976d64c | 335 | enum GyroOutputDataRate |
gmehmet | 0:a12d6976d64c | 336 | { |
gmehmet | 0:a12d6976d64c | 337 | GYRO_ODR_6 = 0x06, ///<25Hz |
gmehmet | 0:a12d6976d64c | 338 | GYRO_ODR_7 = 0x07, ///<50Hz |
gmehmet | 0:a12d6976d64c | 339 | GYRO_ODR_8 = 0x08, ///<100Hz |
gmehmet | 0:a12d6976d64c | 340 | GYRO_ODR_9 = 0x09, ///<200Hz |
gmehmet | 0:a12d6976d64c | 341 | GYRO_ODR_10 = 0x0A, ///<400Hz |
gmehmet | 0:a12d6976d64c | 342 | GYRO_ODR_11 = 0x0B, ///<800Hz |
gmehmet | 0:a12d6976d64c | 343 | GYRO_ODR_12 = 0x0C, ///<1600Hz |
gmehmet | 0:a12d6976d64c | 344 | GYRO_ODR_13 = 0x0D ///<3200Hz |
gmehmet | 0:a12d6976d64c | 345 | }; |
gmehmet | 0:a12d6976d64c | 346 | |
gmehmet | 0:a12d6976d64c | 347 | ///Gyroscope bandwidth paramaters |
gmehmet | 0:a12d6976d64c | 348 | enum GyroBandWidthParam |
gmehmet | 0:a12d6976d64c | 349 | { |
gmehmet | 0:a12d6976d64c | 350 | GYRO_BWP_0 = 0, ///<OSR4 Over Sampling Rate of 4 |
gmehmet | 0:a12d6976d64c | 351 | GYRO_BWP_1, ///<OSR2 Over Sampling Rate of 2 |
gmehmet | 0:a12d6976d64c | 352 | GYRO_BWP_2 ///<Normal Mode, Equidistant Sampling |
gmehmet | 0:a12d6976d64c | 353 | }; |
gmehmet | 0:a12d6976d64c | 354 | |
gmehmet | 0:a12d6976d64c | 355 | ///Gyroscope ranges |
gmehmet | 0:a12d6976d64c | 356 | enum GyroRange |
gmehmet | 0:a12d6976d64c | 357 | { |
gmehmet | 0:a12d6976d64c | 358 | DPS_2000 = 0, ///<+-2000dps, 16.4LSB/dps |
gmehmet | 0:a12d6976d64c | 359 | DPS_1000, ///<+-1000dps, 32.8LSB/dps |
gmehmet | 0:a12d6976d64c | 360 | DPS_500, ///<+-500dps, 65.6LSB/dps |
gmehmet | 0:a12d6976d64c | 361 | DPS_250, ///<+-250dps, 131.2LSB/dps |
gmehmet | 0:a12d6976d64c | 362 | DPS_125 ///<+-125dps, 262.4LSB/dps, |
gmehmet | 0:a12d6976d64c | 363 | }; |
gmehmet | 0:a12d6976d64c | 364 | |
gmehmet | 0:a12d6976d64c | 365 | static const float SENS_2000_DPS_LSB_PER_DPS = 16.4F; |
gmehmet | 0:a12d6976d64c | 366 | static const float SENS_1000_DPS_LSB_PER_DPS = 32.8F; |
gmehmet | 0:a12d6976d64c | 367 | static const float SENS_500_DPS_LSB_PER_DPS = 65.6F; |
gmehmet | 0:a12d6976d64c | 368 | static const float SENS_250_DPS_LSB_PER_DPS = 131.2F; |
gmehmet | 0:a12d6976d64c | 369 | static const float SENS_125_DPS_LSB_PER_DPS = 262.4F; |
gmehmet | 0:a12d6976d64c | 370 | |
gmehmet | 0:a12d6976d64c | 371 | ///Gyroscope configuration data structure |
gmehmet | 0:a12d6976d64c | 372 | struct GyroConfig |
gmehmet | 0:a12d6976d64c | 373 | { |
gmehmet | 0:a12d6976d64c | 374 | GyroRange range; ///<Gyroscope range |
gmehmet | 0:a12d6976d64c | 375 | GyroBandWidthParam bwp; ///<Gyroscope bandwidth param |
gmehmet | 0:a12d6976d64c | 376 | GyroOutputDataRate odr; ///<Gyroscope output data rate |
gmehmet | 0:a12d6976d64c | 377 | }; |
gmehmet | 0:a12d6976d64c | 378 | |
gmehmet | 0:a12d6976d64c | 379 | ///Gyroscope default configuration |
gmehmet | 0:a12d6976d64c | 380 | static const GyroConfig DEFAULT_GYRO_CONFIG; |
gmehmet | 0:a12d6976d64c | 381 | ///@} |
gmehmet | 0:a12d6976d64c | 382 | |
gmehmet | 0:a12d6976d64c | 383 | |
gmehmet | 0:a12d6976d64c | 384 | ///Enumerated power modes |
gmehmet | 0:a12d6976d64c | 385 | enum PowerModes |
gmehmet | 0:a12d6976d64c | 386 | { |
gmehmet | 0:a12d6976d64c | 387 | SUSPEND = 0, ///<Acc and Gyro, No sampling, No FIFO data readout |
gmehmet | 0:a12d6976d64c | 388 | NORMAL, ///<Acc and Gyro, Full chip operation |
gmehmet | 0:a12d6976d64c | 389 | LOW_POWER, ///<Acc duty-cycling between suspend and normal |
gmehmet | 0:a12d6976d64c | 390 | FAST_START_UP ///<Gyro start up delay time to normal mode <= 10 ms |
gmehmet | 0:a12d6976d64c | 391 | }; |
gmehmet | 0:a12d6976d64c | 392 | |
gmehmet | 0:a12d6976d64c | 393 | |
gmehmet | 0:a12d6976d64c | 394 | ///Enumerated commands used with CMD register |
gmehmet | 0:a12d6976d64c | 395 | enum Commands |
gmehmet | 0:a12d6976d64c | 396 | { |
gmehmet | 0:a12d6976d64c | 397 | START_FOC = 0x03, ///<Starts Fast Offset Calibrartion |
gmehmet | 0:a12d6976d64c | 398 | ACC_SET_PMU_MODE = 0x10, ///<Sets acc power mode |
gmehmet | 0:a12d6976d64c | 399 | GYR_SET_PMU_MODE = 0x14, ///<Sets gyro power mode |
gmehmet | 0:a12d6976d64c | 400 | MAG_SET_PMU_MODE = 0x18, ///<Sets mag power mode |
gmehmet | 0:a12d6976d64c | 401 | PROG_NVM = 0xA0, ///<Writes NVM backed registers into NVM |
gmehmet | 0:a12d6976d64c | 402 | FIFO_FLUSH = 0xB0, ///<Clears FIFO |
gmehmet | 0:a12d6976d64c | 403 | INT_RESET, ///<Clears interrupt engine, INT_STATUS, and |
gmehmet | 0:a12d6976d64c | 404 | ///<the interrupt pin |
gmehmet | 0:a12d6976d64c | 405 | STEP_CNT_CLR, ///<Triggers reset of the step counter |
gmehmet | 0:a12d6976d64c | 406 | SOFT_RESET = 0xB6 ///<Triggers a reset including a reboot. |
gmehmet | 0:a12d6976d64c | 407 | }; |
gmehmet | 0:a12d6976d64c | 408 | |
gmehmet | 0:a12d6976d64c | 409 | |
gmehmet | 0:a12d6976d64c | 410 | ///@brief BMI160 Destructor.\n |
gmehmet | 0:a12d6976d64c | 411 | /// |
gmehmet | 0:a12d6976d64c | 412 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 413 | ///@param[in] none |
gmehmet | 0:a12d6976d64c | 414 | /// |
gmehmet | 0:a12d6976d64c | 415 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 416 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 417 | /// |
gmehmet | 0:a12d6976d64c | 418 | ///@returns none |
gmehmet | 0:a12d6976d64c | 419 | virtual ~BMI160(){ } |
gmehmet | 0:a12d6976d64c | 420 | |
gmehmet | 0:a12d6976d64c | 421 | |
gmehmet | 0:a12d6976d64c | 422 | ///@brief Reads a single register.\n |
gmehmet | 0:a12d6976d64c | 423 | /// |
gmehmet | 0:a12d6976d64c | 424 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 425 | ///@param[in] data - pointer to memory for storing read data |
gmehmet | 0:a12d6976d64c | 426 | /// |
gmehmet | 0:a12d6976d64c | 427 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 428 | ///@param[out] data - holds contents of read register on success |
gmehmet | 0:a12d6976d64c | 429 | /// |
gmehmet | 0:a12d6976d64c | 430 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 431 | virtual int32_t readRegister(Registers reg, uint8_t *data) = 0; |
gmehmet | 0:a12d6976d64c | 432 | |
gmehmet | 0:a12d6976d64c | 433 | |
gmehmet | 0:a12d6976d64c | 434 | ///@brief Writes a single register.\n |
gmehmet | 0:a12d6976d64c | 435 | /// |
gmehmet | 0:a12d6976d64c | 436 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 437 | ///@param[in] data - data to write to register |
gmehmet | 0:a12d6976d64c | 438 | /// |
gmehmet | 0:a12d6976d64c | 439 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 440 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 441 | /// |
gmehmet | 0:a12d6976d64c | 442 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 443 | virtual int32_t writeRegister(Registers reg, const uint8_t data) = 0; |
gmehmet | 0:a12d6976d64c | 444 | |
gmehmet | 0:a12d6976d64c | 445 | |
gmehmet | 0:a12d6976d64c | 446 | ///@brief Reads a block of registers.\n |
gmehmet | 0:a12d6976d64c | 447 | ///@detail User must ensure that all registers between 'startReg' and |
gmehmet | 0:a12d6976d64c | 448 | ///'stopReg' exist and are readable. Function reads up to, including, |
gmehmet | 0:a12d6976d64c | 449 | ///'stopReg'.\n |
gmehmet | 0:a12d6976d64c | 450 | /// |
gmehmet | 0:a12d6976d64c | 451 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 452 | ///@param[in] startReg - register to start reading from |
gmehmet | 0:a12d6976d64c | 453 | ///@param[in] stopReg - register to stop reading from |
gmehmet | 0:a12d6976d64c | 454 | ///@param[in] data - pointer to memory for storing read data |
gmehmet | 0:a12d6976d64c | 455 | /// |
gmehmet | 0:a12d6976d64c | 456 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 457 | ///@param[out] data - holds contents of read registers on success |
gmehmet | 0:a12d6976d64c | 458 | /// |
gmehmet | 0:a12d6976d64c | 459 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 460 | virtual int32_t readBlock(Registers startReg, Registers stopReg, |
gmehmet | 0:a12d6976d64c | 461 | uint8_t *data) = 0; |
gmehmet | 0:a12d6976d64c | 462 | |
gmehmet | 0:a12d6976d64c | 463 | |
gmehmet | 0:a12d6976d64c | 464 | ///@brief Writes a block of registers.\n |
gmehmet | 0:a12d6976d64c | 465 | ///@detail User must ensure that all registers between 'startReg' and |
gmehmet | 0:a12d6976d64c | 466 | ///'stopReg' exist and are writeable. Function writes up to, including, |
gmehmet | 0:a12d6976d64c | 467 | ///'stopReg'.\n |
gmehmet | 0:a12d6976d64c | 468 | /// |
gmehmet | 0:a12d6976d64c | 469 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 470 | ///@param[in] startReg - register to start writing at |
gmehmet | 0:a12d6976d64c | 471 | ///@param[in] stopReg - register to stop writing at |
gmehmet | 0:a12d6976d64c | 472 | ///@param[in] data - pointer to data to write to registers |
gmehmet | 0:a12d6976d64c | 473 | /// |
gmehmet | 0:a12d6976d64c | 474 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 475 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 476 | /// |
gmehmet | 0:a12d6976d64c | 477 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 478 | virtual int32_t writeBlock(Registers startReg, Registers stopReg, |
gmehmet | 0:a12d6976d64c | 479 | const uint8_t *data) = 0; |
gmehmet | 0:a12d6976d64c | 480 | |
gmehmet | 0:a12d6976d64c | 481 | |
gmehmet | 0:a12d6976d64c | 482 | ///@brief Sets sensors power mode through CMD register.\n |
gmehmet | 0:a12d6976d64c | 483 | ///@details Observe command execution times given in datasheet.\n |
gmehmet | 0:a12d6976d64c | 484 | /// |
gmehmet | 0:a12d6976d64c | 485 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 486 | ///@param[in] sensor - Sensor which power mode we are setting |
gmehmet | 0:a12d6976d64c | 487 | ///@param[in] pwrMode - Desired powermode of the sensor |
gmehmet | 0:a12d6976d64c | 488 | /// |
gmehmet | 0:a12d6976d64c | 489 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 490 | ///@param[out] |
gmehmet | 0:a12d6976d64c | 491 | /// |
gmehmet | 0:a12d6976d64c | 492 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 493 | int32_t setSensorPowerMode(Sensors sensor, PowerModes pwrMode); |
gmehmet | 0:a12d6976d64c | 494 | |
gmehmet | 0:a12d6976d64c | 495 | |
gmehmet | 0:a12d6976d64c | 496 | ///@brief Configure sensor.\n |
gmehmet | 0:a12d6976d64c | 497 | /// |
gmehmet | 0:a12d6976d64c | 498 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 499 | ///@param[in] config - sSensor configuration data structure |
gmehmet | 0:a12d6976d64c | 500 | /// |
gmehmet | 0:a12d6976d64c | 501 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 502 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 503 | /// |
gmehmet | 0:a12d6976d64c | 504 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 505 | int32_t setSensorConfig(const AccConfig &config); |
gmehmet | 0:a12d6976d64c | 506 | int32_t setSensorConfig(const GyroConfig &config); |
gmehmet | 0:a12d6976d64c | 507 | |
gmehmet | 0:a12d6976d64c | 508 | |
gmehmet | 0:a12d6976d64c | 509 | ///@brief Get sensor configuration.\n |
gmehmet | 0:a12d6976d64c | 510 | /// |
gmehmet | 0:a12d6976d64c | 511 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 512 | ///@param[in] config - Sensor configuration data structure |
gmehmet | 0:a12d6976d64c | 513 | /// |
gmehmet | 0:a12d6976d64c | 514 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 515 | ///@param[out] config - on success, holds sensor's current |
gmehmet | 0:a12d6976d64c | 516 | ///configuration |
gmehmet | 0:a12d6976d64c | 517 | /// |
gmehmet | 0:a12d6976d64c | 518 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 519 | int32_t getSensorConfig(AccConfig &config); |
gmehmet | 0:a12d6976d64c | 520 | int32_t getSensorConfig(GyroConfig &config); |
gmehmet | 0:a12d6976d64c | 521 | |
gmehmet | 0:a12d6976d64c | 522 | |
gmehmet | 0:a12d6976d64c | 523 | ///@brief Get sensor axis.\n |
gmehmet | 0:a12d6976d64c | 524 | /// |
gmehmet | 0:a12d6976d64c | 525 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 526 | ///@param[in] axis - Sensor axis |
gmehmet | 0:a12d6976d64c | 527 | ///@param[in] data - AxisData structure |
gmehmet | 0:a12d6976d64c | 528 | ///@param[in] range - Sensor range |
gmehmet | 0:a12d6976d64c | 529 | /// |
gmehmet | 0:a12d6976d64c | 530 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 531 | ///@param[out] data - Structure holds raw and scaled axis data |
gmehmet | 0:a12d6976d64c | 532 | /// |
gmehmet | 0:a12d6976d64c | 533 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 534 | int32_t getSensorAxis(SensorAxis axis, AxisData &data, AccRange range); |
gmehmet | 0:a12d6976d64c | 535 | int32_t getSensorAxis(SensorAxis axis, AxisData &data, GyroRange range); |
gmehmet | 0:a12d6976d64c | 536 | |
gmehmet | 0:a12d6976d64c | 537 | |
gmehmet | 0:a12d6976d64c | 538 | ///@brief Get sensor xyz axis.\n |
gmehmet | 0:a12d6976d64c | 539 | /// |
gmehmet | 0:a12d6976d64c | 540 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 541 | ///@param[in] data - SensorData structure |
gmehmet | 0:a12d6976d64c | 542 | ///@param[in] range - Sensor range |
gmehmet | 0:a12d6976d64c | 543 | /// |
gmehmet | 0:a12d6976d64c | 544 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 545 | ///@param[out] data - Structure holds raw and scaled data for all three axis |
gmehmet | 0:a12d6976d64c | 546 | /// |
gmehmet | 0:a12d6976d64c | 547 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 548 | int32_t getSensorXYZ(SensorData &data, AccRange range); |
gmehmet | 0:a12d6976d64c | 549 | int32_t getSensorXYZ(SensorData &data, GyroRange range); |
gmehmet | 0:a12d6976d64c | 550 | |
gmehmet | 0:a12d6976d64c | 551 | |
gmehmet | 0:a12d6976d64c | 552 | ///@brief Get sensor xyz axis and sensor time.\n |
gmehmet | 0:a12d6976d64c | 553 | /// |
gmehmet | 0:a12d6976d64c | 554 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 555 | ///@param[in] data - SensorData structure |
gmehmet | 0:a12d6976d64c | 556 | ///@param[in] sensorTime - SensorTime structure for data |
gmehmet | 0:a12d6976d64c | 557 | ///@param[in] range - Sensor range |
gmehmet | 0:a12d6976d64c | 558 | /// |
gmehmet | 0:a12d6976d64c | 559 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 560 | ///@param[out] data - Structure holds raw and scaled data for all three axis |
gmehmet | 0:a12d6976d64c | 561 | ///@param[out] sensorTime - Holds sensor time on success |
gmehmet | 0:a12d6976d64c | 562 | /// |
gmehmet | 0:a12d6976d64c | 563 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 564 | int32_t getSensorXYZandSensorTime(SensorData &data, SensorTime &sensorTime, |
gmehmet | 0:a12d6976d64c | 565 | AccRange range); |
gmehmet | 0:a12d6976d64c | 566 | int32_t getSensorXYZandSensorTime(SensorData &data, SensorTime &sensorTime, |
gmehmet | 0:a12d6976d64c | 567 | GyroRange range); |
gmehmet | 0:a12d6976d64c | 568 | |
gmehmet | 0:a12d6976d64c | 569 | |
gmehmet | 0:a12d6976d64c | 570 | ///@brief Get Gyroscope/Accelerometer data and sensor time.\n |
gmehmet | 0:a12d6976d64c | 571 | /// |
gmehmet | 0:a12d6976d64c | 572 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 573 | ///@param[in] accData - Sensor data structure for accelerometer |
gmehmet | 0:a12d6976d64c | 574 | ///@param[in] gyroData - Sensor data structure for gyroscope |
gmehmet | 0:a12d6976d64c | 575 | ///@param[in] sensorTime - SensorTime data structure |
gmehmet | 0:a12d6976d64c | 576 | ///@param[in] accRange - Accelerometer range |
gmehmet | 0:a12d6976d64c | 577 | ///@param[in] gyroRange - Gyroscope range |
gmehmet | 0:a12d6976d64c | 578 | /// |
gmehmet | 0:a12d6976d64c | 579 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 580 | ///@param[out] accData - Synchronized accelerometer data |
gmehmet | 0:a12d6976d64c | 581 | ///@param[out] gyroData - Synchronized gyroscope data |
gmehmet | 0:a12d6976d64c | 582 | ///@param[out] sensorTime - Synchronized sensor time |
gmehmet | 0:a12d6976d64c | 583 | /// |
gmehmet | 0:a12d6976d64c | 584 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 585 | int32_t getGyroAccXYZandSensorTime(SensorData &accData, |
gmehmet | 0:a12d6976d64c | 586 | SensorData &gyroData, |
gmehmet | 0:a12d6976d64c | 587 | SensorTime &sensorTime, |
gmehmet | 0:a12d6976d64c | 588 | AccRange accRange, GyroRange gyroRange); |
gmehmet | 0:a12d6976d64c | 589 | |
gmehmet | 0:a12d6976d64c | 590 | |
gmehmet | 0:a12d6976d64c | 591 | ///@brief Get sensor time.\n |
gmehmet | 0:a12d6976d64c | 592 | /// |
gmehmet | 0:a12d6976d64c | 593 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 594 | ///@param[in] sensorTime - SensorTime structure for data |
gmehmet | 0:a12d6976d64c | 595 | /// |
gmehmet | 0:a12d6976d64c | 596 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 597 | ///@param[out] sensorTime - Holds sensor time on success |
gmehmet | 0:a12d6976d64c | 598 | /// |
gmehmet | 0:a12d6976d64c | 599 | ///@returns returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 600 | int32_t getSensorTime(SensorTime &sensorTime); |
gmehmet | 0:a12d6976d64c | 601 | |
gmehmet | 0:a12d6976d64c | 602 | |
gmehmet | 0:a12d6976d64c | 603 | ///@brief Get die temperature.\n |
gmehmet | 0:a12d6976d64c | 604 | /// |
gmehmet | 0:a12d6976d64c | 605 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 606 | ///@param[in] temp - pointer to float for temperature |
gmehmet | 0:a12d6976d64c | 607 | /// |
gmehmet | 0:a12d6976d64c | 608 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 609 | ///@param[out] temp - on success, holds the die temperature |
gmehmet | 0:a12d6976d64c | 610 | /// |
gmehmet | 0:a12d6976d64c | 611 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 612 | int32_t getTemperature(float *temp); |
gmehmet | 0:a12d6976d64c | 613 | |
gmehmet | 0:a12d6976d64c | 614 | // Initialize BMI160 with default parameters: |
gmehmet | 0:a12d6976d64c | 615 | // set GYRO: Suspended, Acc Normal Mode, ODR:25 Hz |
gmehmet | 0:a12d6976d64c | 616 | int32_t BMI160_DefaultInitalize(); |
gmehmet | 0:a12d6976d64c | 617 | |
gmehmet | 0:a12d6976d64c | 618 | // |
gmehmet | 0:a12d6976d64c | 619 | // |
gmehmet | 0:a12d6976d64c | 620 | int32_t enable_data_ready_interrupt(); |
gmehmet | 0:a12d6976d64c | 621 | |
gmehmet | 0:a12d6976d64c | 622 | // |
gmehmet | 0:a12d6976d64c | 623 | // Set sample rate |
gmehmet | 0:a12d6976d64c | 624 | // This function can be alled after BMI160_DefaultInitalize |
gmehmet | 0:a12d6976d64c | 625 | int32_t setSampleRate(int sample_rate); |
gmehmet | 0:a12d6976d64c | 626 | |
gmehmet | 0:a12d6976d64c | 627 | /// @brief Soft reset |
gmehmet | 0:a12d6976d64c | 628 | /// |
gmehmet | 0:a12d6976d64c | 629 | int32_t reset(); |
gmehmet | 0:a12d6976d64c | 630 | |
gmehmet | 0:a12d6976d64c | 631 | private: |
gmehmet | 0:a12d6976d64c | 632 | bool m_use_irq; |
gmehmet | 0:a12d6976d64c | 633 | bool bmi160_irq_asserted; |
gmehmet | 0:a12d6976d64c | 634 | InterruptIn *m_bmi160_irq; |
gmehmet | 0:a12d6976d64c | 635 | void irq_handler(); |
gmehmet | 0:a12d6976d64c | 636 | |
gmehmet | 0:a12d6976d64c | 637 | protected: |
gmehmet | 0:a12d6976d64c | 638 | BMI160(InterruptIn *int_pin): m_bmi160_irq(int_pin), m_use_irq(true) { |
gmehmet | 0:a12d6976d64c | 639 | bmi160_irq_asserted = false; |
gmehmet | 0:a12d6976d64c | 640 | } |
gmehmet | 0:a12d6976d64c | 641 | |
gmehmet | 0:a12d6976d64c | 642 | BMI160(): m_use_irq(false) { } |
gmehmet | 0:a12d6976d64c | 643 | }; |
gmehmet | 0:a12d6976d64c | 644 | |
gmehmet | 0:a12d6976d64c | 645 | |
gmehmet | 0:a12d6976d64c | 646 | /** |
gmehmet | 0:a12d6976d64c | 647 | @brief BMI160_I2C - supports BMI160 object with I2C interface |
gmehmet | 0:a12d6976d64c | 648 | */ |
gmehmet | 0:a12d6976d64c | 649 | class BMI160_I2C: public BMI160 |
gmehmet | 0:a12d6976d64c | 650 | { |
gmehmet | 0:a12d6976d64c | 651 | public: |
gmehmet | 0:a12d6976d64c | 652 | |
gmehmet | 0:a12d6976d64c | 653 | ///BMI160 default I2C address. |
gmehmet | 0:a12d6976d64c | 654 | static const uint8_t I2C_ADRS_SDO_LO = 0x68; |
gmehmet | 0:a12d6976d64c | 655 | ///BMI160 optional I2C address. |
gmehmet | 0:a12d6976d64c | 656 | static const uint8_t I2C_ADRS_SDO_HI = 0x69; |
gmehmet | 0:a12d6976d64c | 657 | |
gmehmet | 0:a12d6976d64c | 658 | |
gmehmet | 0:a12d6976d64c | 659 | ///@brief BMI160_I2C Constructor.\n |
gmehmet | 0:a12d6976d64c | 660 | /// |
gmehmet | 0:a12d6976d64c | 661 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 662 | ///@param[in] i2cBus - reference to I2C bus for this device |
gmehmet | 0:a12d6976d64c | 663 | ///@param[in] i2cAdrs - 7-bit I2C address |
gmehmet | 0:a12d6976d64c | 664 | /// |
gmehmet | 0:a12d6976d64c | 665 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 666 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 667 | /// |
gmehmet | 0:a12d6976d64c | 668 | ///@returns none |
gmehmet | 0:a12d6976d64c | 669 | BMI160_I2C(I2C *i2cBus, uint8_t i2cAdrs); |
gmehmet | 0:a12d6976d64c | 670 | |
gmehmet | 0:a12d6976d64c | 671 | ///@brief BMI160_I2C Constructor.\n |
gmehmet | 0:a12d6976d64c | 672 | /// |
gmehmet | 0:a12d6976d64c | 673 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 674 | ///@param[in] i2cBus - reference to I2C bus for this device |
gmehmet | 0:a12d6976d64c | 675 | ///@param[in] i2cAdrs - 7-bit I2C address |
gmehmet | 0:a12d6976d64c | 676 | ///@param[in] int_pin - Interrupt pin |
gmehmet | 0:a12d6976d64c | 677 | /// |
gmehmet | 0:a12d6976d64c | 678 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 679 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 680 | /// |
gmehmet | 0:a12d6976d64c | 681 | ///@returns none |
gmehmet | 0:a12d6976d64c | 682 | BMI160_I2C(I2C *i2cBus, uint8_t i2cAdrs, InterruptIn *int_pin); |
gmehmet | 0:a12d6976d64c | 683 | |
gmehmet | 0:a12d6976d64c | 684 | ///@brief Reads a single register.\n |
gmehmet | 0:a12d6976d64c | 685 | /// |
gmehmet | 0:a12d6976d64c | 686 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 687 | ///@param[in] data - pointer to memory for storing read data |
gmehmet | 0:a12d6976d64c | 688 | /// |
gmehmet | 0:a12d6976d64c | 689 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 690 | ///@param[out] data - holds contents of read register on success |
gmehmet | 0:a12d6976d64c | 691 | /// |
gmehmet | 0:a12d6976d64c | 692 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 693 | virtual int32_t readRegister(Registers reg, uint8_t *data); |
gmehmet | 0:a12d6976d64c | 694 | |
gmehmet | 0:a12d6976d64c | 695 | |
gmehmet | 0:a12d6976d64c | 696 | ///@brief Writes a single register.\n |
gmehmet | 0:a12d6976d64c | 697 | /// |
gmehmet | 0:a12d6976d64c | 698 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 699 | ///@param[in] data - data to write to register |
gmehmet | 0:a12d6976d64c | 700 | /// |
gmehmet | 0:a12d6976d64c | 701 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 702 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 703 | /// |
gmehmet | 0:a12d6976d64c | 704 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 705 | virtual int32_t writeRegister(Registers reg, const uint8_t data); |
gmehmet | 0:a12d6976d64c | 706 | |
gmehmet | 0:a12d6976d64c | 707 | |
gmehmet | 0:a12d6976d64c | 708 | ///@brief Reads a block of registers.\n |
gmehmet | 0:a12d6976d64c | 709 | ///@detail User must ensure that all registers between 'startReg' and |
gmehmet | 0:a12d6976d64c | 710 | ///'stopReg' exist and are readable. Function reads up to, including, |
gmehmet | 0:a12d6976d64c | 711 | ///'stopReg'.\n |
gmehmet | 0:a12d6976d64c | 712 | /// |
gmehmet | 0:a12d6976d64c | 713 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 714 | ///@param[in] startReg - register to start reading from |
gmehmet | 0:a12d6976d64c | 715 | ///@param[in] stopReg - register to stop reading from |
gmehmet | 0:a12d6976d64c | 716 | ///@param[in] data - pointer to memory for storing read data |
gmehmet | 0:a12d6976d64c | 717 | /// |
gmehmet | 0:a12d6976d64c | 718 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 719 | ///@param[out] data - holds contents of read registers on success |
gmehmet | 0:a12d6976d64c | 720 | /// |
gmehmet | 0:a12d6976d64c | 721 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 722 | virtual int32_t readBlock(Registers startReg, Registers stopReg, |
gmehmet | 0:a12d6976d64c | 723 | uint8_t *data); |
gmehmet | 0:a12d6976d64c | 724 | |
gmehmet | 0:a12d6976d64c | 725 | |
gmehmet | 0:a12d6976d64c | 726 | ///@brief Writes a block of registers.\n |
gmehmet | 0:a12d6976d64c | 727 | ///@detail User must ensure that all registers between 'startReg' and |
gmehmet | 0:a12d6976d64c | 728 | ///'stopReg' exist and are writeable. Function writes up to, including, |
gmehmet | 0:a12d6976d64c | 729 | ///'stopReg'.\n |
gmehmet | 0:a12d6976d64c | 730 | /// |
gmehmet | 0:a12d6976d64c | 731 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 732 | ///@param[in] startReg - register to start writing at |
gmehmet | 0:a12d6976d64c | 733 | ///@param[in] stopReg - register to stop writing at |
gmehmet | 0:a12d6976d64c | 734 | ///@param[in] data - pointer to data to write to registers |
gmehmet | 0:a12d6976d64c | 735 | /// |
gmehmet | 0:a12d6976d64c | 736 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 737 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 738 | /// |
gmehmet | 0:a12d6976d64c | 739 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 740 | virtual int32_t writeBlock(Registers startReg, Registers stopReg, |
gmehmet | 0:a12d6976d64c | 741 | const uint8_t *data); |
gmehmet | 0:a12d6976d64c | 742 | |
gmehmet | 0:a12d6976d64c | 743 | private: |
gmehmet | 0:a12d6976d64c | 744 | I2C *m_i2cBus; |
gmehmet | 0:a12d6976d64c | 745 | uint8_t m_Wadrs, m_Radrs; |
gmehmet | 0:a12d6976d64c | 746 | }; |
gmehmet | 0:a12d6976d64c | 747 | |
gmehmet | 0:a12d6976d64c | 748 | |
gmehmet | 0:a12d6976d64c | 749 | /** |
gmehmet | 0:a12d6976d64c | 750 | @brief BMI160_SPI - supports BMI160 object with SPI interface |
gmehmet | 0:a12d6976d64c | 751 | */ |
gmehmet | 0:a12d6976d64c | 752 | class BMI160_SPI: public BMI160 |
gmehmet | 0:a12d6976d64c | 753 | { |
gmehmet | 0:a12d6976d64c | 754 | public: |
gmehmet | 0:a12d6976d64c | 755 | |
gmehmet | 0:a12d6976d64c | 756 | ///@brief BMI160_SPI Constructor.\n |
gmehmet | 0:a12d6976d64c | 757 | /// |
gmehmet | 0:a12d6976d64c | 758 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 759 | ///@param[in] spiBus - reference to SPI bus for this device |
gmehmet | 0:a12d6976d64c | 760 | ///@param[in] cs - reference to DigitalOut used for chip select |
gmehmet | 0:a12d6976d64c | 761 | /// |
gmehmet | 0:a12d6976d64c | 762 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 763 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 764 | /// |
gmehmet | 0:a12d6976d64c | 765 | ///@returns none |
gmehmet | 0:a12d6976d64c | 766 | BMI160_SPI(SPI *spiBus, DigitalOut &cs); |
gmehmet | 0:a12d6976d64c | 767 | |
gmehmet | 0:a12d6976d64c | 768 | |
gmehmet | 0:a12d6976d64c | 769 | ///@brief Reads a single register.\n |
gmehmet | 0:a12d6976d64c | 770 | /// |
gmehmet | 0:a12d6976d64c | 771 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 772 | ///@param[in] data - pointer to memory for storing read data |
gmehmet | 0:a12d6976d64c | 773 | /// |
gmehmet | 0:a12d6976d64c | 774 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 775 | ///@param[out] data - holds contents of read register on success |
gmehmet | 0:a12d6976d64c | 776 | /// |
gmehmet | 0:a12d6976d64c | 777 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 778 | virtual int32_t readRegister(Registers reg, uint8_t *data); |
gmehmet | 0:a12d6976d64c | 779 | |
gmehmet | 0:a12d6976d64c | 780 | |
gmehmet | 0:a12d6976d64c | 781 | ///@brief Writes a single register.\n |
gmehmet | 0:a12d6976d64c | 782 | /// |
gmehmet | 0:a12d6976d64c | 783 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 784 | ///@param[in] data - data to write to register |
gmehmet | 0:a12d6976d64c | 785 | /// |
gmehmet | 0:a12d6976d64c | 786 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 787 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 788 | /// |
gmehmet | 0:a12d6976d64c | 789 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 790 | virtual int32_t writeRegister(Registers reg, const uint8_t data); |
gmehmet | 0:a12d6976d64c | 791 | |
gmehmet | 0:a12d6976d64c | 792 | |
gmehmet | 0:a12d6976d64c | 793 | ///@brief Reads a block of registers.\n |
gmehmet | 0:a12d6976d64c | 794 | ///@detail User must ensure that all registers between 'startReg' and |
gmehmet | 0:a12d6976d64c | 795 | ///'stopReg' exist and are readable. Function reads up to, including, |
gmehmet | 0:a12d6976d64c | 796 | ///'stopReg'.\n |
gmehmet | 0:a12d6976d64c | 797 | /// |
gmehmet | 0:a12d6976d64c | 798 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 799 | ///@param[in] startReg - register to start reading from |
gmehmet | 0:a12d6976d64c | 800 | ///@param[in] stopReg - register to stop reading from |
gmehmet | 0:a12d6976d64c | 801 | ///@param[in] data - pointer to memory for storing read data |
gmehmet | 0:a12d6976d64c | 802 | /// |
gmehmet | 0:a12d6976d64c | 803 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 804 | ///@param[out] data - holds contents of read registers on success |
gmehmet | 0:a12d6976d64c | 805 | /// |
gmehmet | 0:a12d6976d64c | 806 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 807 | virtual int32_t readBlock(Registers startReg, Registers stopReg, |
gmehmet | 0:a12d6976d64c | 808 | uint8_t *data); |
gmehmet | 0:a12d6976d64c | 809 | |
gmehmet | 0:a12d6976d64c | 810 | |
gmehmet | 0:a12d6976d64c | 811 | ///@brief Writes a block of registers.\n |
gmehmet | 0:a12d6976d64c | 812 | ///@detail User must ensure that all registers between 'startReg' and |
gmehmet | 0:a12d6976d64c | 813 | ///'stopReg' exist and are writeable. Function writes up to, including, |
gmehmet | 0:a12d6976d64c | 814 | ///'stopReg'.\n |
gmehmet | 0:a12d6976d64c | 815 | /// |
gmehmet | 0:a12d6976d64c | 816 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 817 | ///@param[in] startReg - register to start writing at |
gmehmet | 0:a12d6976d64c | 818 | ///@param[in] stopReg - register to stop writing at |
gmehmet | 0:a12d6976d64c | 819 | ///@param[in] data - pointer to data to write to registers |
gmehmet | 0:a12d6976d64c | 820 | /// |
gmehmet | 0:a12d6976d64c | 821 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 822 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 823 | /// |
gmehmet | 0:a12d6976d64c | 824 | ///@returns 0 on success, non 0 on failure |
gmehmet | 0:a12d6976d64c | 825 | virtual int32_t writeBlock(Registers startReg, Registers stopReg, |
gmehmet | 0:a12d6976d64c | 826 | const uint8_t *data); |
gmehmet | 0:a12d6976d64c | 827 | |
gmehmet | 0:a12d6976d64c | 828 | private: |
gmehmet | 0:a12d6976d64c | 829 | |
gmehmet | 0:a12d6976d64c | 830 | SPI *m_spiBus; |
gmehmet | 0:a12d6976d64c | 831 | DigitalOut m_cs; |
gmehmet | 0:a12d6976d64c | 832 | }; |
gmehmet | 0:a12d6976d64c | 833 | |
gmehmet | 0:a12d6976d64c | 834 | #endif /* BMI160_H */ |
gmehmet | 0:a12d6976d64c | 835 | |
gmehmet | 0:a12d6976d64c | 836 | |
gmehmet | 0:a12d6976d64c | 837 | ///@brief fx documentation template.\n |
gmehmet | 0:a12d6976d64c | 838 | /// |
gmehmet | 0:a12d6976d64c | 839 | ///On Entry: |
gmehmet | 0:a12d6976d64c | 840 | ///@param[in] none |
gmehmet | 0:a12d6976d64c | 841 | /// |
gmehmet | 0:a12d6976d64c | 842 | ///On Exit: |
gmehmet | 0:a12d6976d64c | 843 | ///@param[out] none |
gmehmet | 0:a12d6976d64c | 844 | /// |
gmehmet | 0:a12d6976d64c | 845 | ///@returns none |