Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: BLE_Nano_MPU6050Service
MPU6050.h@5:5739a7a6d0e9, 2015-07-22 (annotated)
- Committer:
- fruediger
- Date:
- Wed Jul 22 16:02:20 2015 +0000
- Revision:
- 5:5739a7a6d0e9
- Parent:
- 3:a6e53ab2c8c0
- Child:
- 6:73c2cfe26ed8
no idea what was changed, sry :/
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fruediger | 0:95916b07e8be | 1 | #pragma once |
fruediger | 0:95916b07e8be | 2 | #ifndef __MPU6050_H__ |
fruediger | 0:95916b07e8be | 3 | #define __MPU6050_H__ |
fruediger | 0:95916b07e8be | 4 | |
fruediger | 0:95916b07e8be | 5 | /** |
fruediger | 0:95916b07e8be | 6 | * Based on the work of authors of |
fruediger | 0:95916b07e8be | 7 | * https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050 |
fruediger | 0:95916b07e8be | 8 | * |
fruediger | 0:95916b07e8be | 9 | * Ported by Felix Rüdiger, 2015 |
fruediger | 0:95916b07e8be | 10 | * (scrapping all the I2C-slave-bus stuff) |
fruediger | 0:95916b07e8be | 11 | * |
fruediger | 0:95916b07e8be | 12 | */ |
fruediger | 0:95916b07e8be | 13 | |
fruediger | 0:95916b07e8be | 14 | #include "mbed.h" |
fruediger | 0:95916b07e8be | 15 | #include "helpers.h" |
fruediger | 2:32b13cc64cb0 | 16 | |
fruediger | 0:95916b07e8be | 17 | class MPU6050 |
fruediger | 0:95916b07e8be | 18 | { |
fruediger | 0:95916b07e8be | 19 | public: |
fruediger | 1:96a227d1ca7e | 20 | /** |
fruediger | 1:96a227d1ca7e | 21 | * Constants |
fruediger | 2:32b13cc64cb0 | 22 | */ |
fruediger | 1:96a227d1ca7e | 23 | |
fruediger | 0:95916b07e8be | 24 | enum BaseAddress |
fruediger | 0:95916b07e8be | 25 | { |
fruediger | 0:95916b07e8be | 26 | // left shift by 1 bit is neccessary for mbed's I2C abstraction class |
fruediger | 0:95916b07e8be | 27 | // look at https://developer.mbed.org/users/okano/notebook/i2c-access-examples/ |
fruediger | 0:95916b07e8be | 28 | ADDRESS_0 = BYTE(01101000) << 1, |
fruediger | 0:95916b07e8be | 29 | ADRESSS_1 = BYTE(01101001) << 1 |
fruediger | 5:5739a7a6d0e9 | 30 | }; |
fruediger | 5:5739a7a6d0e9 | 31 | |
fruediger | 5:5739a7a6d0e9 | 32 | typedef struct |
fruediger | 5:5739a7a6d0e9 | 33 | { |
fruediger | 5:5739a7a6d0e9 | 34 | int16_t ax, ay, az; |
fruediger | 5:5739a7a6d0e9 | 35 | int16_t temp; |
fruediger | 5:5739a7a6d0e9 | 36 | int16_t ox, oy, oz; |
fruediger | 5:5739a7a6d0e9 | 37 | } SensorReading; |
fruediger | 0:95916b07e8be | 38 | |
fruediger | 0:95916b07e8be | 39 | enum Register |
fruediger | 0:95916b07e8be | 40 | { |
fruediger | 0:95916b07e8be | 41 | REG_AUX_VDDIO = 0x01, // R/W |
fruediger | 0:95916b07e8be | 42 | REG_SMPLRT_DIV = 0x19, // R/W |
fruediger | 0:95916b07e8be | 43 | REG_CONFIG = 0x1A, // R/W |
fruediger | 0:95916b07e8be | 44 | REG_GYRO_CONFIG = 0x1B, // R/W |
fruediger | 0:95916b07e8be | 45 | REG_ACCEL_CONFIG = 0x1C, // R/W |
fruediger | 0:95916b07e8be | 46 | REG_FF_THR = 0x1D, // R/W |
fruediger | 0:95916b07e8be | 47 | REG_FF_DUR = 0x1E, // R/W |
fruediger | 0:95916b07e8be | 48 | REG_MOT_THR = 0x1F, // R/W |
fruediger | 0:95916b07e8be | 49 | REG_MOT_DUR = 0x20, // R/W |
fruediger | 0:95916b07e8be | 50 | REG_ZRMOT_THR = 0x21, // R/W |
fruediger | 0:95916b07e8be | 51 | REG_ZRMOT_DUR = 0x22, // R/W |
fruediger | 0:95916b07e8be | 52 | REG_FIFO_EN = 0x23, // R/W |
fruediger | 0:95916b07e8be | 53 | /* REG_I2C_MST_CTRL = 0x24, // R/W |
fruediger | 0:95916b07e8be | 54 | REG_I2C_SLV0_ADDR = 0x25, // R/W |
fruediger | 0:95916b07e8be | 55 | REG_I2C_SLV0_REG = 0x26, // R/W |
fruediger | 0:95916b07e8be | 56 | REG_I2C_SLV0_CTRL = 0x27, // R/W |
fruediger | 0:95916b07e8be | 57 | REG_I2C_SLV1_ADDR = 0x28, // R/W |
fruediger | 0:95916b07e8be | 58 | REG_I2C_SLV1_REG = 0x29, // R/W |
fruediger | 0:95916b07e8be | 59 | REG_I2C_SLV1_CTRL = 0x2A, // R/W |
fruediger | 0:95916b07e8be | 60 | REG_I2C_SLV2_ADDR = 0x2B, // R/W |
fruediger | 0:95916b07e8be | 61 | REG_I2C_SLV2_REG = 0x2C, // R/W |
fruediger | 0:95916b07e8be | 62 | REG_I2C_SLV2_CTRL = 0x2D, // R/W |
fruediger | 0:95916b07e8be | 63 | REG_I2C_SLV3_ADDR = 0x2E, // R/W |
fruediger | 0:95916b07e8be | 64 | REG_I2C_SLV3_REG = 0x2F, // R/W |
fruediger | 0:95916b07e8be | 65 | REG_I2C_SLV3_CTRL = 0x30, // R/W |
fruediger | 0:95916b07e8be | 66 | REG_I2C_SLV4_ADDR = 0x31, // R/W |
fruediger | 0:95916b07e8be | 67 | REG_I2C_SLV4_REG = 0x32, // R/W |
fruediger | 0:95916b07e8be | 68 | REG_I2C_SLV4_DO = 0x33, // R/W |
fruediger | 0:95916b07e8be | 69 | REG_I2C_SLV4_CTRL = 0x34, // R/W |
fruediger | 0:95916b07e8be | 70 | REG_I2C_SLV4_DI = 0x35, // R |
fruediger | 1:96a227d1ca7e | 71 | REG_I2C_MST_STATUS = 0x36, // R */ |
fruediger | 0:95916b07e8be | 72 | REG_INT_PIN_CFG = 0x37, // R/W |
fruediger | 0:95916b07e8be | 73 | REG_INT_ENABLE = 0x38, // R/W |
fruediger | 0:95916b07e8be | 74 | REG_INT_STATUS = 0x3A, // R |
fruediger | 0:95916b07e8be | 75 | REG_ACCEL_XOUT_H = 0x3B, // R |
fruediger | 0:95916b07e8be | 76 | REG_ACCEL_XOUT_L = 0x3C, // R |
fruediger | 0:95916b07e8be | 77 | REG_ACCEL_YOUT_H = 0x3D, // R |
fruediger | 0:95916b07e8be | 78 | REG_ACCEL_YOUT_L = 0x3E, // R |
fruediger | 0:95916b07e8be | 79 | REG_ACCEL_ZOUT_H = 0x3F, // R |
fruediger | 0:95916b07e8be | 80 | REG_ACCEL_ZOUT_L = 0x40, // R |
fruediger | 0:95916b07e8be | 81 | REG_TEMP_OUT_H = 0x41, // R |
fruediger | 0:95916b07e8be | 82 | REG_TEMP_OUT_L = 0x42, // R |
fruediger | 0:95916b07e8be | 83 | REG_GYRO_XOUT_H = 0x43, // R |
fruediger | 0:95916b07e8be | 84 | REG_GYRO_XOUT_L = 0x44, // R |
fruediger | 0:95916b07e8be | 85 | REG_GYRO_YOUT_H = 0x45, // R |
fruediger | 0:95916b07e8be | 86 | REG_GYRO_YOUT_L = 0x46, // R |
fruediger | 0:95916b07e8be | 87 | REG_GYRO_ZOUT_H = 0x47, // R |
fruediger | 0:95916b07e8be | 88 | REG_GYRO_ZOUT_L = 0x48, // R |
fruediger | 1:96a227d1ca7e | 89 | /* REG_EXT_SENS_DATA_00 = 0x49, // R |
fruediger | 0:95916b07e8be | 90 | REG_EXT_SENS_DATA_01 = 0x4A, // R |
fruediger | 0:95916b07e8be | 91 | REG_EXT_SENS_DATA_02 = 0x4B, // R |
fruediger | 0:95916b07e8be | 92 | REG_EXT_SENS_DATA_03 = 0x4C, // R |
fruediger | 0:95916b07e8be | 93 | REG_EXT_SENS_DATA_04 = 0x4D, // R |
fruediger | 0:95916b07e8be | 94 | REG_EXT_SENS_DATA_05 = 0x4E, // R |
fruediger | 0:95916b07e8be | 95 | REG_EXT_SENS_DATA_06 = 0x4F, // R |
fruediger | 0:95916b07e8be | 96 | REG_EXT_SENS_DATA_07 = 0x50, // R |
fruediger | 0:95916b07e8be | 97 | REG_EXT_SENS_DATA_08 = 0x51, // R |
fruediger | 0:95916b07e8be | 98 | REG_EXT_SENS_DATA_09 = 0x52, // R |
fruediger | 0:95916b07e8be | 99 | REG_EXT_SENS_DATA_10 = 0x53, // R |
fruediger | 0:95916b07e8be | 100 | REG_EXT_SENS_DATA_11 = 0x54, // R |
fruediger | 0:95916b07e8be | 101 | REG_EXT_SENS_DATA_12 = 0x55, // R |
fruediger | 0:95916b07e8be | 102 | REG_EXT_SENS_DATA_13 = 0x56, // R |
fruediger | 0:95916b07e8be | 103 | REG_EXT_SENS_DATA_14 = 0x57, // R |
fruediger | 0:95916b07e8be | 104 | REG_EXT_SENS_DATA_15 = 0x58, // R |
fruediger | 0:95916b07e8be | 105 | REG_EXT_SENS_DATA_16 = 0x59, // R |
fruediger | 0:95916b07e8be | 106 | REG_EXT_SENS_DATA_17 = 0x5A, // R |
fruediger | 0:95916b07e8be | 107 | REG_EXT_SENS_DATA_18 = 0x5B, // R |
fruediger | 0:95916b07e8be | 108 | REG_EXT_SENS_DATA_19 = 0x5C, // R |
fruediger | 0:95916b07e8be | 109 | REG_EXT_SENS_DATA_20 = 0x5D, // R |
fruediger | 0:95916b07e8be | 110 | REG_EXT_SENS_DATA_21 = 0x5E, // R |
fruediger | 0:95916b07e8be | 111 | REG_EXT_SENS_DATA_22 = 0x5F, // R |
fruediger | 1:96a227d1ca7e | 112 | REG_EXT_SENS_DATA_23 = 0x60, // R */ |
fruediger | 0:95916b07e8be | 113 | REG_MOT_DETECT_STATUS = 0x61, // R |
fruediger | 2:32b13cc64cb0 | 114 | /* REG_I2C_SLV0_DO = 0x63, // R/W |
fruediger | 0:95916b07e8be | 115 | REG_I2C_SLV1_DO = 0x64, // R/W |
fruediger | 0:95916b07e8be | 116 | REG_I2C_SLV2_DO = 0x65, // R/W |
fruediger | 2:32b13cc64cb0 | 117 | REG_I2C_SLV3_DO = 0x66, // R/W |
fruediger | 2:32b13cc64cb0 | 118 | REG_I2C_MST_DELAY_CTRL = 0x67, // R/W */ |
fruediger | 0:95916b07e8be | 119 | REG_SIGNAL_PATH_RESET = 0x68, // R/W |
fruediger | 0:95916b07e8be | 120 | REG_MOT_DETECT_CTRL = 0x69, // R/W |
fruediger | 0:95916b07e8be | 121 | REG_USER_CTRL = 0x6A, // R/W |
fruediger | 0:95916b07e8be | 122 | REG_PWR_MGMT_1 = 0x6B, // R/W |
fruediger | 0:95916b07e8be | 123 | REG_PWR_MGMT_2 = 0x6C, // R/W |
fruediger | 0:95916b07e8be | 124 | REG_FIFO_COUNTH = 0x72, // R/W |
fruediger | 0:95916b07e8be | 125 | REG_FIFO_COUNTL = 0x73, // R/W |
fruediger | 0:95916b07e8be | 126 | REG_FIFO_R_W = 0x74, // R/W |
fruediger | 0:95916b07e8be | 127 | REG_WHO_AM_I = 0x75 // R |
fruediger | 0:95916b07e8be | 128 | }; |
fruediger | 0:95916b07e8be | 129 | |
fruediger | 0:95916b07e8be | 130 | static const uint8_t AUX_VDDIO_MASK = BYTE(10000000); |
fruediger | 0:95916b07e8be | 131 | enum AuxVDDIOLevel |
fruediger | 0:95916b07e8be | 132 | { |
fruediger | 0:95916b07e8be | 133 | AUX_VDDIO_VLOGIC = BYTE(00000000), |
fruediger | 0:95916b07e8be | 134 | AUX_VDDIO_VDD = BYTE(10000000) |
fruediger | 0:95916b07e8be | 135 | }; |
fruediger | 0:95916b07e8be | 136 | |
fruediger | 0:95916b07e8be | 137 | static const uint8_t EXT_SYNC_MASK = BYTE(00111000); |
fruediger | 0:95916b07e8be | 138 | enum ExtFrameSync |
fruediger | 0:95916b07e8be | 139 | { |
fruediger | 0:95916b07e8be | 140 | EXT_SYNC_DISABLED = BYTE(00000000), |
fruediger | 0:95916b07e8be | 141 | EXT_SYNC_TEMP_OUT_L = BYTE(00001000), |
fruediger | 0:95916b07e8be | 142 | EXT_SYNC_GYRO_XOUT_L = BYTE(00010000), |
fruediger | 0:95916b07e8be | 143 | EXT_SYNC_GYRO_YOUT_L = BYTE(00011000), |
fruediger | 0:95916b07e8be | 144 | EXT_SYNC_GYRO_ZOUT_L = BYTE(00100000), |
fruediger | 0:95916b07e8be | 145 | EXT_SYNC_ACCEL_XOUT_L = BYTE(00101000), |
fruediger | 0:95916b07e8be | 146 | EXT_SYNC_ACCEL_YOUT_L = BYTE(00110000), |
fruediger | 0:95916b07e8be | 147 | EXT_SYNC_ACCEL_ZOUT_L = BYTE(00111000) |
fruediger | 0:95916b07e8be | 148 | }; |
fruediger | 0:95916b07e8be | 149 | |
fruediger | 0:95916b07e8be | 150 | static const uint8_t DLPF_MASK = BYTE(00000111); |
fruediger | 0:95916b07e8be | 151 | enum DLPFBandwidth |
fruediger | 0:95916b07e8be | 152 | { |
fruediger | 0:95916b07e8be | 153 | DLPF_260HZ_256Hz = BYTE(00000000), |
fruediger | 0:95916b07e8be | 154 | DLPF_184HZ_188Hz = BYTE(00000001), |
fruediger | 0:95916b07e8be | 155 | DLPF_94HZ_98HZ = BYTE(00000010), |
fruediger | 0:95916b07e8be | 156 | DLPF_44HZ_42HZ = BYTE(00000011), |
fruediger | 0:95916b07e8be | 157 | DLPF_21HZ_20HZ = BYTE(00000100), |
fruediger | 0:95916b07e8be | 158 | DLPF_10HZ_10HZ = BYTE(00000101), |
fruediger | 0:95916b07e8be | 159 | DLPF_5HZ_5HZ = BYTE(00000110), |
fruediger | 0:95916b07e8be | 160 | DLPF_RESERVED = BYTE(00000111) |
fruediger | 0:95916b07e8be | 161 | }; |
fruediger | 0:95916b07e8be | 162 | |
fruediger | 0:95916b07e8be | 163 | static const uint8_t GYRO_X_ST_MASK = BYTE(10000000); |
fruediger | 0:95916b07e8be | 164 | static const uint8_t GYRO_Y_ST_MASK = BYTE(01000000); |
fruediger | 0:95916b07e8be | 165 | static const uint8_t GYRO_Z_ST_MASK = BYTE(00100000); |
fruediger | 0:95916b07e8be | 166 | |
fruediger | 0:95916b07e8be | 167 | static const uint8_t GYRO_RANGE_MASK = BYTE(00011000); |
fruediger | 0:95916b07e8be | 168 | enum GyroRange |
fruediger | 0:95916b07e8be | 169 | { |
fruediger | 0:95916b07e8be | 170 | GYRO_RANGE_250 = BYTE(00000000), |
fruediger | 0:95916b07e8be | 171 | GYRO_RANGE_500 = BYTE(00001000), |
fruediger | 0:95916b07e8be | 172 | GYRO_RANGE_1000 = BYTE(00010000), |
fruediger | 0:95916b07e8be | 173 | GYRO_RANGE_2000 = BYTE(00011000) |
fruediger | 0:95916b07e8be | 174 | }; |
fruediger | 0:95916b07e8be | 175 | |
fruediger | 0:95916b07e8be | 176 | static const uint8_t ACCEL_X_ST_MASK = BYTE(10000000); |
fruediger | 0:95916b07e8be | 177 | static const uint8_t ACCEL_Y_ST_MASK = BYTE(01000000); |
fruediger | 0:95916b07e8be | 178 | static const uint8_t ACCEL_Z_ST_MASK = BYTE(00100000); |
fruediger | 0:95916b07e8be | 179 | |
fruediger | 0:95916b07e8be | 180 | static const uint8_t ACCEL_HPF_MASK = BYTE(00000111); |
fruediger | 0:95916b07e8be | 181 | enum AccelHPFCutOff |
fruediger | 0:95916b07e8be | 182 | { |
fruediger | 0:95916b07e8be | 183 | ACCEL_HPF_RESET = BYTE(00000000), |
fruediger | 0:95916b07e8be | 184 | ACCEL_HPF_5HZ = BYTE(00000001), |
fruediger | 0:95916b07e8be | 185 | ACCEL_HPF_2_5HZ = BYTE(00000010), |
fruediger | 0:95916b07e8be | 186 | ACCEL_HPF_1_25HZ = BYTE(00000011), |
fruediger | 0:95916b07e8be | 187 | ACCEL_HPF_0_63HZ = BYTE(00000100), |
fruediger | 0:95916b07e8be | 188 | ACCEL_HPF_HOLD = BYTE(00000111) |
fruediger | 0:95916b07e8be | 189 | }; |
fruediger | 0:95916b07e8be | 190 | |
fruediger | 0:95916b07e8be | 191 | static const uint8_t ACCEL_RANGE_MASK = BYTE(00011000); |
fruediger | 0:95916b07e8be | 192 | enum AccelRange |
fruediger | 0:95916b07e8be | 193 | { |
fruediger | 0:95916b07e8be | 194 | ACCEL_RANGE_2G = BYTE(00000000), |
fruediger | 0:95916b07e8be | 195 | ACCEL_RANGE_4G = BYTE(00001000), |
fruediger | 0:95916b07e8be | 196 | ACCEL_RANGE_8G = BYTE(00010000), |
fruediger | 0:95916b07e8be | 197 | ACCEL_RANGE_16G = BYTE(00011000) |
fruediger | 0:95916b07e8be | 198 | }; |
fruediger | 0:95916b07e8be | 199 | |
fruediger | 0:95916b07e8be | 200 | static const uint8_t TEMP_FIFO_EN_MASK = BYTE(10000000); |
fruediger | 0:95916b07e8be | 201 | static const uint8_t GYRO_X_FIFO_EN_MASK = BYTE(01000000); |
fruediger | 0:95916b07e8be | 202 | static const uint8_t GYRO_Y_FIFO_EN_MASK = BYTE(00100000); |
fruediger | 0:95916b07e8be | 203 | static const uint8_t GYRO_Z_FIFO_EN_MASK = BYTE(00010000); |
fruediger | 0:95916b07e8be | 204 | static const uint8_t ACCEL_FIFO_EN_MASK = BYTE(00001000); |
fruediger | 0:95916b07e8be | 205 | |
fruediger | 1:96a227d1ca7e | 206 | static const uint8_t INT_LEVEL_MASK = BYTE(10000000); |
fruediger | 1:96a227d1ca7e | 207 | enum InterruptLevel |
fruediger | 1:96a227d1ca7e | 208 | { |
fruediger | 1:96a227d1ca7e | 209 | INT_LEVEL_ACTIVE_HIGH = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 210 | INT_LEVEL_ACTIVE_LOW = BYTE(10000000) |
fruediger | 1:96a227d1ca7e | 211 | }; |
fruediger | 1:96a227d1ca7e | 212 | |
fruediger | 1:96a227d1ca7e | 213 | static const uint8_t INT_DRIVE_MASK = BYTE(01000000); |
fruediger | 1:96a227d1ca7e | 214 | enum InterruptDrive |
fruediger | 1:96a227d1ca7e | 215 | { |
fruediger | 1:96a227d1ca7e | 216 | INT_DRIVE_PUSH_PULL = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 217 | INT_DRIVE_OPEN_DRAIN = BYTE(01000000) |
fruediger | 1:96a227d1ca7e | 218 | }; |
fruediger | 1:96a227d1ca7e | 219 | |
fruediger | 1:96a227d1ca7e | 220 | static const uint8_t INT_LATCH_MASK = BYTE(00100000); |
fruediger | 1:96a227d1ca7e | 221 | enum InterruptLatch |
fruediger | 1:96a227d1ca7e | 222 | { |
fruediger | 1:96a227d1ca7e | 223 | INT_LATCH_50US_PULSE = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 224 | INT_LATCH_WAIT_CLEARED = BYTE(00100000) |
fruediger | 1:96a227d1ca7e | 225 | }; |
fruediger | 1:96a227d1ca7e | 226 | |
fruediger | 1:96a227d1ca7e | 227 | static const uint8_t INT_CLEAR_MASK = BYTE(00010000); |
fruediger | 1:96a227d1ca7e | 228 | enum InterruptClear |
fruediger | 1:96a227d1ca7e | 229 | { |
fruediger | 1:96a227d1ca7e | 230 | INT_CLEAR_STATUS_ONLY_READ = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 231 | INT_CLEAR_ANY_READ = BYTE(00010000) |
fruediger | 1:96a227d1ca7e | 232 | }; |
fruediger | 1:96a227d1ca7e | 233 | |
fruediger | 1:96a227d1ca7e | 234 | static const uint8_t INT_FSYNC_LEVEL_MASK = BYTE(00001000); |
fruediger | 1:96a227d1ca7e | 235 | enum InterruptFSyncLevel |
fruediger | 1:96a227d1ca7e | 236 | { |
fruediger | 1:96a227d1ca7e | 237 | INT_FSYNC_LEVEL_ACTIVE_HIGH = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 238 | INT_FSYNC_LEVEL_ACTIVE_LOW = BYTE(00001000) |
fruediger | 1:96a227d1ca7e | 239 | }; |
fruediger | 1:96a227d1ca7e | 240 | |
fruediger | 1:96a227d1ca7e | 241 | static const uint8_t INT_FSYNC_EN_MASK = BYTE(00000100); |
fruediger | 1:96a227d1ca7e | 242 | |
fruediger | 1:96a227d1ca7e | 243 | enum Interrupt |
fruediger | 1:96a227d1ca7e | 244 | { |
fruediger | 1:96a227d1ca7e | 245 | INT_FREEFALL = BYTE(10000000), |
fruediger | 1:96a227d1ca7e | 246 | INT_MOTION = BYTE(01000000), |
fruediger | 1:96a227d1ca7e | 247 | INT_ZERO_MOTION = BYTE(00100000), |
fruediger | 1:96a227d1ca7e | 248 | INT_FIFO_OVERFLOW = BYTE(00010000), |
fruediger | 1:96a227d1ca7e | 249 | /* INT_I2C_MASTER = BYTE(00001000), |
fruediger | 1:96a227d1ca7e | 250 | INT_PLL_READY = BYTE(00000100), |
fruediger | 1:96a227d1ca7e | 251 | INT_DMP_INIT = BYTE(00000010), */ |
fruediger | 1:96a227d1ca7e | 252 | INT_DATA_READY = BYTE(00000001) |
fruediger | 1:96a227d1ca7e | 253 | }; |
fruediger | 1:96a227d1ca7e | 254 | friend inline Interrupt operator|(Interrupt a, Interrupt b) { return static_cast<Interrupt>(static_cast<int>(a) | static_cast<int>(b)); } |
fruediger | 1:96a227d1ca7e | 255 | friend inline Interrupt operator&(Interrupt a, Interrupt b) { return static_cast<Interrupt>(static_cast<int>(a) & static_cast<int>(b)); } |
fruediger | 1:96a227d1ca7e | 256 | |
fruediger | 2:32b13cc64cb0 | 257 | enum Motion |
fruediger | 2:32b13cc64cb0 | 258 | { |
fruediger | 2:32b13cc64cb0 | 259 | MOT_NEGATIVE_X = BYTE(10000000), |
fruediger | 2:32b13cc64cb0 | 260 | MOT_POSITIVE_X = BYTE(01000000), |
fruediger | 2:32b13cc64cb0 | 261 | MOT_NEGATIVE_Y = BYTE(00100000), |
fruediger | 2:32b13cc64cb0 | 262 | MOT_POSITIVE_Y = BYTE(00010000), |
fruediger | 2:32b13cc64cb0 | 263 | MOT_NEGATIVE_Z = BYTE(00001000), |
fruediger | 2:32b13cc64cb0 | 264 | MOT_POSITIVE_Z = BYTE(00000100), |
fruediger | 2:32b13cc64cb0 | 265 | MOT_ZERO = BYTE(00000001) |
fruediger | 2:32b13cc64cb0 | 266 | }; |
fruediger | 2:32b13cc64cb0 | 267 | friend inline Motion operator|(Motion a, Motion b) { return static_cast<Motion>(static_cast<int>(a) | static_cast<int>(b)); } |
fruediger | 2:32b13cc64cb0 | 268 | friend inline Motion operator&(Motion a, Motion b) { return static_cast<Motion>(static_cast<int>(a) & static_cast<int>(b)); } |
fruediger | 2:32b13cc64cb0 | 269 | |
fruediger | 2:32b13cc64cb0 | 270 | static const uint8_t GYRO_PATH_RESET_MASK = BYTE(00000100); |
fruediger | 2:32b13cc64cb0 | 271 | static const uint8_t ACCEL_PATH_RESET_MASK = BYTE(00000010); |
fruediger | 2:32b13cc64cb0 | 272 | static const uint8_t TEMP_PATH_RESET_MASK = BYTE(00000001); |
fruediger | 2:32b13cc64cb0 | 273 | |
fruediger | 3:a6e53ab2c8c0 | 274 | static const uint8_t POWER_ON_DELAY_MASK = BYTE(00110000); |
fruediger | 3:a6e53ab2c8c0 | 275 | enum PowerOnDelay |
fruediger | 3:a6e53ab2c8c0 | 276 | { |
fruediger | 3:a6e53ab2c8c0 | 277 | POWER_ON_DELAY_0MS = BYTE(00000000), |
fruediger | 3:a6e53ab2c8c0 | 278 | POWER_ON_DELAY_1MS = BYTE(00010000), |
fruediger | 3:a6e53ab2c8c0 | 279 | POWER_ON_DELAY_2MS = BYTE(00100000), |
fruediger | 3:a6e53ab2c8c0 | 280 | POWER_ON_DELAY_3MS = BYTE(00110000) |
fruediger | 3:a6e53ab2c8c0 | 281 | }; |
fruediger | 3:a6e53ab2c8c0 | 282 | |
fruediger | 3:a6e53ab2c8c0 | 283 | static const uint8_t FF_DETECTION_DEC_MASK = BYTE(00001100); |
fruediger | 3:a6e53ab2c8c0 | 284 | enum FreefallDetectionDecrement |
fruediger | 3:a6e53ab2c8c0 | 285 | { |
fruediger | 3:a6e53ab2c8c0 | 286 | FF_DETECTION_DEC_RESET = BYTE(00000000), |
fruediger | 3:a6e53ab2c8c0 | 287 | FF_DETECTION_DEC_1 = BYTE(00000100), |
fruediger | 3:a6e53ab2c8c0 | 288 | FF_DETECTION_DEC_2 = BYTE(00001000), |
fruediger | 3:a6e53ab2c8c0 | 289 | FF_DETECTION_DEC_4 = BYTE(00001100) |
fruediger | 3:a6e53ab2c8c0 | 290 | }; |
fruediger | 3:a6e53ab2c8c0 | 291 | |
fruediger | 3:a6e53ab2c8c0 | 292 | static const uint8_t MOT_DETECTION_DEC_MASK = BYTE(00000011); |
fruediger | 3:a6e53ab2c8c0 | 293 | enum MotionDetectionDecrement |
fruediger | 3:a6e53ab2c8c0 | 294 | { |
fruediger | 3:a6e53ab2c8c0 | 295 | MOT_DETECTION_DEC_RESET = BYTE(00000000), |
fruediger | 3:a6e53ab2c8c0 | 296 | MOT_DETECTION_DEC_1 = BYTE(00000001), |
fruediger | 3:a6e53ab2c8c0 | 297 | MOT_DETECTION_DEC_2 = BYTE(00000010), |
fruediger | 3:a6e53ab2c8c0 | 298 | MOT_DETECTION_DEC_4 = BYTE(00000011) |
fruediger | 3:a6e53ab2c8c0 | 299 | }; |
fruediger | 3:a6e53ab2c8c0 | 300 | |
fruediger | 3:a6e53ab2c8c0 | 301 | static const uint8_t FIFO_EN_MASK = BYTE(01000000); |
fruediger | 3:a6e53ab2c8c0 | 302 | static const uint8_t FIFO_RESET_MASK = BYTE(00000100); |
fruediger | 3:a6e53ab2c8c0 | 303 | static const uint8_t SIG_COND_RESET_MASK = BYTE(00000001); |
fruediger | 3:a6e53ab2c8c0 | 304 | |
fruediger | 3:a6e53ab2c8c0 | 305 | static const uint8_t RESET_MASK = BYTE(10000000); |
fruediger | 3:a6e53ab2c8c0 | 306 | static const uint8_t SLEEP_EN_MASK = BYTE(01000000); |
fruediger | 3:a6e53ab2c8c0 | 307 | static const uint8_t WAKE_CYCLE_EN_MASK = BYTE(00100000); |
fruediger | 3:a6e53ab2c8c0 | 308 | static const uint8_t TEMP_EN_MASK = BYTE(00001000); |
fruediger | 3:a6e53ab2c8c0 | 309 | |
fruediger | 3:a6e53ab2c8c0 | 310 | static const uint8_t CLOCK_SOURCE_MASK = BYTE(00000111); |
fruediger | 3:a6e53ab2c8c0 | 311 | enum ClockSource |
fruediger | 3:a6e53ab2c8c0 | 312 | { |
fruediger | 3:a6e53ab2c8c0 | 313 | CLOCK_SRC_INTERNAL_8MHZ = BYTE(00000000), |
fruediger | 3:a6e53ab2c8c0 | 314 | CLOCK_SRC_PLL_GYRO_X_REF = BYTE(00000001), |
fruediger | 3:a6e53ab2c8c0 | 315 | CLOCK_SRC_PLL_GYRO_Y_REF = BYTE(00000010), |
fruediger | 3:a6e53ab2c8c0 | 316 | CLOCK_SRC_PLL_GYRO_Z_REF = BYTE(00000011), |
fruediger | 3:a6e53ab2c8c0 | 317 | CLOCK_SRC_EXTERNAL_32KHZ = BYTE(00000100), |
fruediger | 3:a6e53ab2c8c0 | 318 | CLOCK_SRC_EXTERNAL_19MHZ = BYTE(00000101), |
fruediger | 3:a6e53ab2c8c0 | 319 | CLOCK_SRC_KEEP_RESET = BYTE(00000111) |
fruediger | 3:a6e53ab2c8c0 | 320 | }; |
fruediger | 3:a6e53ab2c8c0 | 321 | |
fruediger | 3:a6e53ab2c8c0 | 322 | static const uint8_t WAKE_FREQ_MASK = BYTE(11000000); |
fruediger | 3:a6e53ab2c8c0 | 323 | enum WakeFrequency |
fruediger | 3:a6e53ab2c8c0 | 324 | { |
fruediger | 3:a6e53ab2c8c0 | 325 | WAKE_FREQ_1_25Hz = BYTE(00000000), |
fruediger | 3:a6e53ab2c8c0 | 326 | WAKE_FREQ_2_5Hz = BYTE(01000000), |
fruediger | 3:a6e53ab2c8c0 | 327 | WAKE_FREQ_5Hz = BYTE(10000000), |
fruediger | 3:a6e53ab2c8c0 | 328 | WAKE_FREQ_10HZ = BYTE(11000000) |
fruediger | 3:a6e53ab2c8c0 | 329 | }; |
fruediger | 3:a6e53ab2c8c0 | 330 | |
fruediger | 3:a6e53ab2c8c0 | 331 | static const uint8_t ACCEL_X_STB_EN_MASK = BYTE(00100000); |
fruediger | 3:a6e53ab2c8c0 | 332 | static const uint8_t ACCEL_Y_STB_EN_MASK = BYTE(00010000); |
fruediger | 3:a6e53ab2c8c0 | 333 | static const uint8_t ACCEL_Z_STB_EN_MASK = BYTE(00001000); |
fruediger | 3:a6e53ab2c8c0 | 334 | static const uint8_t GYRO_X_STB_EN_MASK = BYTE(00000100); |
fruediger | 3:a6e53ab2c8c0 | 335 | static const uint8_t GYRO_Y_STB_EN_MASK = BYTE(00000010); |
fruediger | 3:a6e53ab2c8c0 | 336 | static const uint8_t GYRO_Z_STB_EN_MASK = BYTE(00000001); |
fruediger | 3:a6e53ab2c8c0 | 337 | |
fruediger | 3:a6e53ab2c8c0 | 338 | static const uint8_t DEVICE_ID_MASK = BYTE(01111110); |
fruediger | 3:a6e53ab2c8c0 | 339 | |
fruediger | 3:a6e53ab2c8c0 | 340 | static const uint8_t MPU6050_ID = BYTE(00110100); // should be 0x34 |
fruediger | 3:a6e53ab2c8c0 | 341 | |
fruediger | 1:96a227d1ca7e | 342 | /** |
fruediger | 1:96a227d1ca7e | 343 | * basic members |
fruediger | 1:96a227d1ca7e | 344 | */ |
fruediger | 1:96a227d1ca7e | 345 | |
fruediger | 0:95916b07e8be | 346 | MPU6050(PinName sda, PinName scl, BaseAddress address = ADDRESS_0) : i2c(sda, scl), baseAddress(address) |
fruediger | 3:a6e53ab2c8c0 | 347 | { } |
fruediger | 0:95916b07e8be | 348 | |
fruediger | 3:a6e53ab2c8c0 | 349 | BaseAddress getAddress() { return baseAddress; } |
fruediger | 0:95916b07e8be | 350 | |
fruediger | 0:95916b07e8be | 351 | /** |
fruediger | 0:95916b07e8be | 352 | * REG_AUX_VDDIO register |
fruediger | 0:95916b07e8be | 353 | */ |
fruediger | 0:95916b07e8be | 354 | |
fruediger | 0:95916b07e8be | 355 | bool getAuxVDDIOLevel(AuxVDDIOLevel *level, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 356 | bool setAuxVDDIOLevel(AuxVDDIOLevel level, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 357 | |
fruediger | 0:95916b07e8be | 358 | /** |
fruediger | 0:95916b07e8be | 359 | * REG_SMPLRT_DIV register |
fruediger | 0:95916b07e8be | 360 | */ |
fruediger | 0:95916b07e8be | 361 | |
fruediger | 0:95916b07e8be | 362 | bool getGyroSampleRateDivider(uint8_t *rateDivider, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 363 | bool setGyroSampleRateDivider(uint8_t rateDivider, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 364 | |
fruediger | 0:95916b07e8be | 365 | /** |
fruediger | 0:95916b07e8be | 366 | * REG_CONFIG register |
fruediger | 0:95916b07e8be | 367 | */ |
fruediger | 0:95916b07e8be | 368 | |
fruediger | 0:95916b07e8be | 369 | bool getExternalFrameSync(ExtFrameSync *frameSync, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 370 | bool setExternalFrameSync(ExtFrameSync frameSync, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 371 | |
fruediger | 0:95916b07e8be | 372 | bool getDLPFBandwidth(DLPFBandwidth *bandwidth, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 373 | bool setDLPFBandwidth(DLPFBandwidth bandwidth, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 374 | |
fruediger | 0:95916b07e8be | 375 | /** |
fruediger | 0:95916b07e8be | 376 | * REG_GYRO_CONFIG register |
fruediger | 3:a6e53ab2c8c0 | 377 | */ |
fruediger | 0:95916b07e8be | 378 | |
fruediger | 0:95916b07e8be | 379 | bool getGyroXSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 380 | bool setGyroXSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 381 | |
fruediger | 0:95916b07e8be | 382 | bool getGyroYSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 383 | bool setGyroYSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 384 | |
fruediger | 0:95916b07e8be | 385 | bool getGyroZSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 386 | bool setGyroZSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 387 | |
fruediger | 0:95916b07e8be | 388 | bool getGyroRange(GyroRange *gyroRange, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 389 | bool setGyroRange(GyroRange gyroRange, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 390 | |
fruediger | 0:95916b07e8be | 391 | /** |
fruediger | 0:95916b07e8be | 392 | * REG_ACCEL_CONFIG register |
fruediger | 0:95916b07e8be | 393 | */ |
fruediger | 0:95916b07e8be | 394 | |
fruediger | 0:95916b07e8be | 395 | bool getAccelXSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 396 | bool setAccelXSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 397 | |
fruediger | 0:95916b07e8be | 398 | bool getAccelYSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 399 | bool setAccelYSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 400 | |
fruediger | 0:95916b07e8be | 401 | bool getAccelZSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 402 | bool setAccelZSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 403 | |
fruediger | 0:95916b07e8be | 404 | bool getAccelHPFCutOff(AccelHPFCutOff *frequency, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 405 | bool setAccelHPFCutOff(AccelHPFCutOff frequency, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 406 | |
fruediger | 0:95916b07e8be | 407 | bool getAccelRange(AccelRange *accelRange, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 408 | bool setAccelRange(AccelRange accelRange, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 409 | |
fruediger | 0:95916b07e8be | 410 | /** |
fruediger | 0:95916b07e8be | 411 | * REG_FF_THR register |
fruediger | 0:95916b07e8be | 412 | */ |
fruediger | 0:95916b07e8be | 413 | |
fruediger | 0:95916b07e8be | 414 | bool getFreefallDetectionThreshold(uint8_t *threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 415 | bool setFreefallDetectionThreshold(uint8_t threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 416 | |
fruediger | 0:95916b07e8be | 417 | /** |
fruediger | 0:95916b07e8be | 418 | * REG_FF_DUR register |
fruediger | 0:95916b07e8be | 419 | */ |
fruediger | 0:95916b07e8be | 420 | |
fruediger | 0:95916b07e8be | 421 | bool getFreefallDetectionDuration(uint8_t *duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 422 | bool setFreefallDetectionDuration(uint8_t duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 423 | |
fruediger | 0:95916b07e8be | 424 | /** |
fruediger | 0:95916b07e8be | 425 | * REG_MOT_THR register |
fruediger | 0:95916b07e8be | 426 | */ |
fruediger | 0:95916b07e8be | 427 | |
fruediger | 0:95916b07e8be | 428 | bool getMotionDetectionThreshold(uint8_t *threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 429 | bool setMotionDetectionThreshold(uint8_t threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 430 | |
fruediger | 0:95916b07e8be | 431 | /** |
fruediger | 0:95916b07e8be | 432 | * REG_MOT_DUR register |
fruediger | 0:95916b07e8be | 433 | */ |
fruediger | 0:95916b07e8be | 434 | |
fruediger | 0:95916b07e8be | 435 | bool getMotionDetectionDuration(uint8_t *duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 436 | bool setMotionDetectionDuration(uint8_t duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 437 | |
fruediger | 0:95916b07e8be | 438 | /** |
fruediger | 0:95916b07e8be | 439 | * REG_ZRMOT_THR register |
fruediger | 0:95916b07e8be | 440 | */ |
fruediger | 0:95916b07e8be | 441 | |
fruediger | 0:95916b07e8be | 442 | bool getZeroMotionDetectionThreshold(uint8_t *threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 443 | bool setZeroMotionDetectionThreshold(uint8_t threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 444 | |
fruediger | 0:95916b07e8be | 445 | /** |
fruediger | 0:95916b07e8be | 446 | * REG_ZRMOT_DUR register |
fruediger | 0:95916b07e8be | 447 | */ |
fruediger | 0:95916b07e8be | 448 | |
fruediger | 0:95916b07e8be | 449 | bool getZeroMotionDetectionDuration(uint8_t *duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 450 | bool setZeroMotionDetectionDuration(uint8_t duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 451 | |
fruediger | 0:95916b07e8be | 452 | /** |
fruediger | 0:95916b07e8be | 453 | * REG_FIFO_EN register |
fruediger | 0:95916b07e8be | 454 | */ |
fruediger | 0:95916b07e8be | 455 | |
fruediger | 0:95916b07e8be | 456 | bool getTempFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 457 | bool setTempFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 458 | |
fruediger | 0:95916b07e8be | 459 | bool getGyroXFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 460 | bool setGyroXFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 461 | |
fruediger | 0:95916b07e8be | 462 | bool getGyroYFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 463 | bool setGyroYFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 464 | |
fruediger | 0:95916b07e8be | 465 | bool getGyroZFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 466 | bool setGyroZFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 467 | |
fruediger | 0:95916b07e8be | 468 | bool getAccelFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 469 | bool setAccelFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 470 | |
fruediger | 0:95916b07e8be | 471 | /** |
fruediger | 1:96a227d1ca7e | 472 | * REG_INT_PIN_CFG register |
fruediger | 1:96a227d1ca7e | 473 | */ |
fruediger | 1:96a227d1ca7e | 474 | |
fruediger | 1:96a227d1ca7e | 475 | bool getInterruptLevel(InterruptLevel *level, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 476 | bool setInterruptLevel(InterruptLevel level, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 477 | |
fruediger | 1:96a227d1ca7e | 478 | bool getInterruptDrive(InterruptDrive *drive, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 479 | bool setInterruptDrive(InterruptDrive drive, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 480 | |
fruediger | 1:96a227d1ca7e | 481 | bool getInterruptLatch(InterruptLatch *latch, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 482 | bool setInterruptLatch(InterruptLatch latch, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 483 | |
fruediger | 1:96a227d1ca7e | 484 | bool getInterruptLatchClear(InterruptClear *latchClear, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 485 | bool setInterruptLatchClear(InterruptClear latchClear, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 486 | |
fruediger | 1:96a227d1ca7e | 487 | bool getInterruptFSyncLevel(InterruptFSyncLevel *fsyncLevel, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 488 | bool setInterruptFSyncLevel(InterruptFSyncLevel fsyncLevel, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 489 | |
fruediger | 1:96a227d1ca7e | 490 | bool getInterruptFSyncEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 491 | bool setInterruptFSyncEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 492 | |
fruediger | 1:96a227d1ca7e | 493 | /** |
fruediger | 1:96a227d1ca7e | 494 | * REG_INT_ENABLE register |
fruediger | 1:96a227d1ca7e | 495 | */ |
fruediger | 1:96a227d1ca7e | 496 | |
fruediger | 1:96a227d1ca7e | 497 | bool getInterruptsEnabled(Interrupt *interruptSet, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 498 | bool setInterruptsEnabled(Interrupt interruptSet, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 499 | |
fruediger | 1:96a227d1ca7e | 500 | bool getInterruptFreefallEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 501 | bool setInterruptFreefallEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 502 | |
fruediger | 1:96a227d1ca7e | 503 | bool getInterruptMotionEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 504 | bool setInterruptMotionEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 505 | |
fruediger | 1:96a227d1ca7e | 506 | bool getInterruptZeroMotionEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 507 | bool setInterruptZeroMotionEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 508 | |
fruediger | 1:96a227d1ca7e | 509 | bool getInterruptFIFOOverflowEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 510 | bool setInterruptFIFOOverflowEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 511 | |
fruediger | 1:96a227d1ca7e | 512 | bool getInterruptDataReadyEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 513 | bool setInterruptDataReadyEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 514 | |
fruediger | 1:96a227d1ca7e | 515 | /** |
fruediger | 1:96a227d1ca7e | 516 | * REG_INT_STATUS register |
fruediger | 1:96a227d1ca7e | 517 | */ |
fruediger | 1:96a227d1ca7e | 518 | |
fruediger | 1:96a227d1ca7e | 519 | bool getInterruptStatuses(Interrupt *interruptSet, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 520 | |
fruediger | 1:96a227d1ca7e | 521 | bool getInterruptFreefallStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 522 | |
fruediger | 1:96a227d1ca7e | 523 | bool getInterruptMotionStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 524 | |
fruediger | 1:96a227d1ca7e | 525 | bool getInterruptZeroMotionStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 526 | |
fruediger | 1:96a227d1ca7e | 527 | bool getInterruptFIFOOverflowStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 528 | |
fruediger | 1:96a227d1ca7e | 529 | bool getInterruptDataReadyStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 530 | |
fruediger | 1:96a227d1ca7e | 531 | /** |
fruediger | 1:96a227d1ca7e | 532 | * REG_ACCEL_XOUT_H |
fruediger | 1:96a227d1ca7e | 533 | * REG_ACCEL_XOUT_L |
fruediger | 1:96a227d1ca7e | 534 | * REG_ACCEL_YOUT_H |
fruediger | 1:96a227d1ca7e | 535 | * REG_ACCEL_YOUT_L |
fruediger | 1:96a227d1ca7e | 536 | * REG_ACCEL_ZOUT_H |
fruediger | 1:96a227d1ca7e | 537 | * REG_ACCEL_ZOUT_L |
fruediger | 1:96a227d1ca7e | 538 | * REG_TEMP_OUT_H |
fruediger | 1:96a227d1ca7e | 539 | * REG_TEMP_OUT_L |
fruediger | 1:96a227d1ca7e | 540 | * REG_GYRO_XOUT_H |
fruediger | 1:96a227d1ca7e | 541 | * REG_GYRO_XOUT_L |
fruediger | 1:96a227d1ca7e | 542 | * REG_GYRO_YOUT_H |
fruediger | 1:96a227d1ca7e | 543 | * REG_GYRO_YOUT_L |
fruediger | 1:96a227d1ca7e | 544 | * REG_GYRO_ZOUT_H |
fruediger | 1:96a227d1ca7e | 545 | * REG_GYRO_ZOUT_L registers |
fruediger | 1:96a227d1ca7e | 546 | */ |
fruediger | 1:96a227d1ca7e | 547 | |
fruediger | 1:96a227d1ca7e | 548 | /** Acceleration */ |
fruediger | 1:96a227d1ca7e | 549 | |
fruediger | 1:96a227d1ca7e | 550 | bool getAcceleration(int16_t *ax, int16_t *ay, int16_t *az, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 551 | |
fruediger | 1:96a227d1ca7e | 552 | bool getAccelerationX(int16_t* ax, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 553 | |
fruediger | 1:96a227d1ca7e | 554 | bool getAccelerationY(int16_t* ay, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 555 | |
fruediger | 1:96a227d1ca7e | 556 | bool getAccelerationZ(int16_t* az, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 557 | |
fruediger | 1:96a227d1ca7e | 558 | /** Temperature */ |
fruediger | 1:96a227d1ca7e | 559 | |
fruediger | 1:96a227d1ca7e | 560 | bool getTemperature(int16_t* temp, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 561 | |
fruediger | 1:96a227d1ca7e | 562 | /** Rotation speed */ |
fruediger | 1:96a227d1ca7e | 563 | |
fruediger | 1:96a227d1ca7e | 564 | bool getRotationSpeed(int16_t *ox, int16_t *oy, int16_t *oz, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 565 | |
fruediger | 1:96a227d1ca7e | 566 | bool getRotationSpeedX(int16_t* ox, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 567 | |
fruediger | 1:96a227d1ca7e | 568 | bool getRotationSpeedY(int16_t* oy, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 569 | |
fruediger | 1:96a227d1ca7e | 570 | bool getRotationSpeedZ(int16_t* oz, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 571 | |
fruediger | 1:96a227d1ca7e | 572 | /** All three */ |
fruediger | 1:96a227d1ca7e | 573 | |
fruediger | 1:96a227d1ca7e | 574 | bool getMotionAndTemperature(int16_t* ax, int16_t* ay, int16_t* az, |
fruediger | 1:96a227d1ca7e | 575 | int16_t* ox, int16_t* oy, int16_t* oz, |
fruediger | 1:96a227d1ca7e | 576 | int16_t* temp, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 577 | |
fruediger | 5:5739a7a6d0e9 | 578 | bool getMotionAndTemperature(SensorReading *sensorReading, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 579 | |
fruediger | 2:32b13cc64cb0 | 580 | /** |
fruediger | 2:32b13cc64cb0 | 581 | * REG_MOT_DETECT_STATUS register |
fruediger | 2:32b13cc64cb0 | 582 | */ |
fruediger | 2:32b13cc64cb0 | 583 | |
fruediger | 2:32b13cc64cb0 | 584 | bool getMotionStatus(Motion *motionSet, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 585 | |
fruediger | 2:32b13cc64cb0 | 586 | bool getNegativeXMotionDetected(bool *detected, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 587 | |
fruediger | 2:32b13cc64cb0 | 588 | bool getPositiveXMotionDetected(bool *detected, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 589 | |
fruediger | 2:32b13cc64cb0 | 590 | bool getNegativeYMotionDetected(bool *detected, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 591 | |
fruediger | 2:32b13cc64cb0 | 592 | bool getPositiveYMotionDetected(bool *detected, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 593 | |
fruediger | 2:32b13cc64cb0 | 594 | bool getNegativeZMotionDetected(bool *detected, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 595 | |
fruediger | 2:32b13cc64cb0 | 596 | bool getPositiveZMotionDetected(bool *detected, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 597 | |
fruediger | 2:32b13cc64cb0 | 598 | bool getZeroMotionDetected(bool *detected, float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 599 | |
fruediger | 2:32b13cc64cb0 | 600 | /** |
fruediger | 2:32b13cc64cb0 | 601 | * REG_SIGNAL_PATH_RESET register |
fruediger | 2:32b13cc64cb0 | 602 | */ |
fruediger | 2:32b13cc64cb0 | 603 | |
fruediger | 2:32b13cc64cb0 | 604 | bool resetGyroscopeSignalPath(float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 605 | |
fruediger | 2:32b13cc64cb0 | 606 | bool resetAccelerometerSignalPath(float timeout_secs = defaultTimeout_secs); |
fruediger | 2:32b13cc64cb0 | 607 | |
fruediger | 2:32b13cc64cb0 | 608 | bool resetTemperatureSignalPath(float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 609 | |
fruediger | 1:96a227d1ca7e | 610 | /** |
fruediger | 3:a6e53ab2c8c0 | 611 | * REG_MOT_DETECT_CTRL register |
fruediger | 3:a6e53ab2c8c0 | 612 | */ |
fruediger | 3:a6e53ab2c8c0 | 613 | |
fruediger | 3:a6e53ab2c8c0 | 614 | bool getAccelerometerPowerOnDelay(PowerOnDelay* delay, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 615 | bool setAccelerometerPowerOnDelay(PowerOnDelay delay, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 616 | |
fruediger | 3:a6e53ab2c8c0 | 617 | bool getFreefallDetectionDecrement(FreefallDetectionDecrement* dec, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 618 | bool setFreefallDetectionDecrement(FreefallDetectionDecrement dec, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 619 | |
fruediger | 3:a6e53ab2c8c0 | 620 | bool getMotionDetectionDecrement(MotionDetectionDecrement* dec, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 621 | bool setMotionDetectionDecrement(MotionDetectionDecrement dec, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 622 | |
fruediger | 3:a6e53ab2c8c0 | 623 | /** |
fruediger | 3:a6e53ab2c8c0 | 624 | * REG_USER_CTRL register |
fruediger | 3:a6e53ab2c8c0 | 625 | */ |
fruediger | 3:a6e53ab2c8c0 | 626 | |
fruediger | 3:a6e53ab2c8c0 | 627 | bool getFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 628 | bool setFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 629 | |
fruediger | 3:a6e53ab2c8c0 | 630 | bool resetFIFO(float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 631 | |
fruediger | 3:a6e53ab2c8c0 | 632 | bool resetSensors(float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 633 | |
fruediger | 3:a6e53ab2c8c0 | 634 | /** |
fruediger | 3:a6e53ab2c8c0 | 635 | * REG_PWR_MGMT_1 register |
fruediger | 3:a6e53ab2c8c0 | 636 | */ |
fruediger | 3:a6e53ab2c8c0 | 637 | |
fruediger | 3:a6e53ab2c8c0 | 638 | bool reset(float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 639 | |
fruediger | 3:a6e53ab2c8c0 | 640 | bool getSleepEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 641 | bool setSleepEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 642 | |
fruediger | 3:a6e53ab2c8c0 | 643 | bool getWakeCycleEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 644 | bool setWakeCycleEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 645 | |
fruediger | 3:a6e53ab2c8c0 | 646 | bool getTemperatureSensorEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 647 | bool setTemperatureSensorEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 648 | |
fruediger | 3:a6e53ab2c8c0 | 649 | bool getClockSource(ClockSource* clockSource, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 650 | bool setClockSource(ClockSource clockSource, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 651 | |
fruediger | 3:a6e53ab2c8c0 | 652 | /** |
fruediger | 3:a6e53ab2c8c0 | 653 | * REG_PWR_MGMT_2 register |
fruediger | 3:a6e53ab2c8c0 | 654 | */ |
fruediger | 3:a6e53ab2c8c0 | 655 | |
fruediger | 3:a6e53ab2c8c0 | 656 | bool getWakeFrequency(WakeFrequency* wakeFrequency, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 657 | bool setWakeFrequency(WakeFrequency wakeFrequency, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 658 | |
fruediger | 3:a6e53ab2c8c0 | 659 | bool getGyroXStandbyEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 660 | bool setGyroXStandbyEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 661 | |
fruediger | 3:a6e53ab2c8c0 | 662 | bool getGyroYStandbyEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 663 | bool setGyroYStandbyEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 664 | |
fruediger | 3:a6e53ab2c8c0 | 665 | bool getGyroZStandbyEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 666 | bool setGyroZStandbyEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 667 | |
fruediger | 3:a6e53ab2c8c0 | 668 | bool getAccelXStandbyEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 669 | bool setAccelXStandbyEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 670 | |
fruediger | 3:a6e53ab2c8c0 | 671 | bool getAccelYStandbyEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 672 | bool setAccelYStandbyEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 673 | |
fruediger | 3:a6e53ab2c8c0 | 674 | bool getAccelZStandbyEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 675 | bool setAccelZStandbyEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 676 | |
fruediger | 3:a6e53ab2c8c0 | 677 | /** |
fruediger | 3:a6e53ab2c8c0 | 678 | * REG_FIFO_COUNTH |
fruediger | 3:a6e53ab2c8c0 | 679 | * REG_FIFO_COUNTL registers |
fruediger | 3:a6e53ab2c8c0 | 680 | */ |
fruediger | 3:a6e53ab2c8c0 | 681 | |
fruediger | 3:a6e53ab2c8c0 | 682 | bool getFIFOCount(uint16_t *count, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 683 | |
fruediger | 3:a6e53ab2c8c0 | 684 | /** |
fruediger | 3:a6e53ab2c8c0 | 685 | * REG_FIFO_R_W register |
fruediger | 3:a6e53ab2c8c0 | 686 | */ |
fruediger | 3:a6e53ab2c8c0 | 687 | |
fruediger | 3:a6e53ab2c8c0 | 688 | bool readFIFO(uint8_t *data, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 689 | bool writeFIFO(uint8_t data, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 690 | |
fruediger | 3:a6e53ab2c8c0 | 691 | bool readFIFO(uint8_t *data, size_t length, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 692 | bool writeFIFO(uint8_t *data, size_t length, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 693 | |
fruediger | 3:a6e53ab2c8c0 | 694 | /** |
fruediger | 3:a6e53ab2c8c0 | 695 | * REG_WHO_AM_I register |
fruediger | 3:a6e53ab2c8c0 | 696 | */ |
fruediger | 3:a6e53ab2c8c0 | 697 | |
fruediger | 3:a6e53ab2c8c0 | 698 | bool getDeviceId(uint8_t *id, float timeout_secs = defaultTimeout_secs); |
fruediger | 3:a6e53ab2c8c0 | 699 | |
fruediger | 3:a6e53ab2c8c0 | 700 | /** |
fruediger | 3:a6e53ab2c8c0 | 701 | * read and write registers |
fruediger | 0:95916b07e8be | 702 | */ |
fruediger | 0:95916b07e8be | 703 | |
fruediger | 0:95916b07e8be | 704 | bool read(Register reg, uint8_t *data, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 705 | bool read(Register reg, uint8_t *data, size_t length, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 706 | |
fruediger | 0:95916b07e8be | 707 | bool write(Register reg, uint8_t data, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 708 | bool write(Register reg, uint8_t *data, size_t length, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 709 | |
fruediger | 0:95916b07e8be | 710 | private: |
fruediger | 0:95916b07e8be | 711 | static const float retryDelay_secs = 0.005; |
fruediger | 0:95916b07e8be | 712 | static const float defaultTimeout_secs = 0.1; // makes a maximum of 20 tries |
fruediger | 0:95916b07e8be | 713 | |
fruediger | 0:95916b07e8be | 714 | I2C i2c; |
fruediger | 0:95916b07e8be | 715 | BaseAddress baseAddress; |
fruediger | 2:32b13cc64cb0 | 716 | |
fruediger | 2:32b13cc64cb0 | 717 | union |
fruediger | 2:32b13cc64cb0 | 718 | { |
fruediger | 2:32b13cc64cb0 | 719 | struct |
fruediger | 2:32b13cc64cb0 | 720 | { |
fruediger | 2:32b13cc64cb0 | 721 | uint8_t ax_h, ax_l; |
fruediger | 2:32b13cc64cb0 | 722 | uint8_t ay_h, ay_l; |
fruediger | 2:32b13cc64cb0 | 723 | uint8_t az_h, az_l; |
fruediger | 2:32b13cc64cb0 | 724 | |
fruediger | 2:32b13cc64cb0 | 725 | uint8_t temp_h, temp_l; |
fruediger | 2:32b13cc64cb0 | 726 | |
fruediger | 2:32b13cc64cb0 | 727 | uint8_t ox_h, ox_l; |
fruediger | 2:32b13cc64cb0 | 728 | uint8_t oy_h, oy_l; |
fruediger | 2:32b13cc64cb0 | 729 | uint8_t oz_h, oz_l; |
fruediger | 5:5739a7a6d0e9 | 730 | } reg; |
fruediger | 2:32b13cc64cb0 | 731 | |
fruediger | 5:5739a7a6d0e9 | 732 | SensorReading value; |
fruediger | 2:32b13cc64cb0 | 733 | } converter; |
fruediger | 0:95916b07e8be | 734 | }; |
fruediger | 0:95916b07e8be | 735 | |
fruediger | 0:95916b07e8be | 736 | #endif |