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@1:96a227d1ca7e, 2015-07-02 (annotated)
- Committer:
- fruediger
- Date:
- Thu Jul 02 00:39:12 2015 +0000
- Revision:
- 1:96a227d1ca7e
- Parent:
- 0:95916b07e8be
- Child:
- 2:32b13cc64cb0
more complete port
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 | 0:95916b07e8be | 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 | 1:96a227d1ca7e | 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 | 0:95916b07e8be | 30 | }; |
fruediger | 0:95916b07e8be | 31 | |
fruediger | 0:95916b07e8be | 32 | enum Register |
fruediger | 0:95916b07e8be | 33 | { |
fruediger | 0:95916b07e8be | 34 | REG_AUX_VDDIO = 0x01, // R/W |
fruediger | 0:95916b07e8be | 35 | REG_SMPLRT_DIV = 0x19, // R/W |
fruediger | 0:95916b07e8be | 36 | REG_CONFIG = 0x1A, // R/W |
fruediger | 0:95916b07e8be | 37 | REG_GYRO_CONFIG = 0x1B, // R/W |
fruediger | 0:95916b07e8be | 38 | REG_ACCEL_CONFIG = 0x1C, // R/W |
fruediger | 0:95916b07e8be | 39 | REG_FF_THR = 0x1D, // R/W |
fruediger | 0:95916b07e8be | 40 | REG_FF_DUR = 0x1E, // R/W |
fruediger | 0:95916b07e8be | 41 | REG_MOT_THR = 0x1F, // R/W |
fruediger | 0:95916b07e8be | 42 | REG_MOT_DUR = 0x20, // R/W |
fruediger | 0:95916b07e8be | 43 | REG_ZRMOT_THR = 0x21, // R/W |
fruediger | 0:95916b07e8be | 44 | REG_ZRMOT_DUR = 0x22, // R/W |
fruediger | 0:95916b07e8be | 45 | REG_FIFO_EN = 0x23, // R/W |
fruediger | 0:95916b07e8be | 46 | /* REG_I2C_MST_CTRL = 0x24, // R/W |
fruediger | 0:95916b07e8be | 47 | REG_I2C_SLV0_ADDR = 0x25, // R/W |
fruediger | 0:95916b07e8be | 48 | REG_I2C_SLV0_REG = 0x26, // R/W |
fruediger | 0:95916b07e8be | 49 | REG_I2C_SLV0_CTRL = 0x27, // R/W |
fruediger | 0:95916b07e8be | 50 | REG_I2C_SLV1_ADDR = 0x28, // R/W |
fruediger | 0:95916b07e8be | 51 | REG_I2C_SLV1_REG = 0x29, // R/W |
fruediger | 0:95916b07e8be | 52 | REG_I2C_SLV1_CTRL = 0x2A, // R/W |
fruediger | 0:95916b07e8be | 53 | REG_I2C_SLV2_ADDR = 0x2B, // R/W |
fruediger | 0:95916b07e8be | 54 | REG_I2C_SLV2_REG = 0x2C, // R/W |
fruediger | 0:95916b07e8be | 55 | REG_I2C_SLV2_CTRL = 0x2D, // R/W |
fruediger | 0:95916b07e8be | 56 | REG_I2C_SLV3_ADDR = 0x2E, // R/W |
fruediger | 0:95916b07e8be | 57 | REG_I2C_SLV3_REG = 0x2F, // R/W |
fruediger | 0:95916b07e8be | 58 | REG_I2C_SLV3_CTRL = 0x30, // R/W |
fruediger | 0:95916b07e8be | 59 | REG_I2C_SLV4_ADDR = 0x31, // R/W |
fruediger | 0:95916b07e8be | 60 | REG_I2C_SLV4_REG = 0x32, // R/W |
fruediger | 0:95916b07e8be | 61 | REG_I2C_SLV4_DO = 0x33, // R/W |
fruediger | 0:95916b07e8be | 62 | REG_I2C_SLV4_CTRL = 0x34, // R/W |
fruediger | 0:95916b07e8be | 63 | REG_I2C_SLV4_DI = 0x35, // R |
fruediger | 1:96a227d1ca7e | 64 | REG_I2C_MST_STATUS = 0x36, // R */ |
fruediger | 0:95916b07e8be | 65 | REG_INT_PIN_CFG = 0x37, // R/W |
fruediger | 0:95916b07e8be | 66 | REG_INT_ENABLE = 0x38, // R/W |
fruediger | 0:95916b07e8be | 67 | REG_INT_STATUS = 0x3A, // R |
fruediger | 0:95916b07e8be | 68 | REG_ACCEL_XOUT_H = 0x3B, // R |
fruediger | 0:95916b07e8be | 69 | REG_ACCEL_XOUT_L = 0x3C, // R |
fruediger | 0:95916b07e8be | 70 | REG_ACCEL_YOUT_H = 0x3D, // R |
fruediger | 0:95916b07e8be | 71 | REG_ACCEL_YOUT_L = 0x3E, // R |
fruediger | 0:95916b07e8be | 72 | REG_ACCEL_ZOUT_H = 0x3F, // R |
fruediger | 0:95916b07e8be | 73 | REG_ACCEL_ZOUT_L = 0x40, // R |
fruediger | 0:95916b07e8be | 74 | REG_TEMP_OUT_H = 0x41, // R |
fruediger | 0:95916b07e8be | 75 | REG_TEMP_OUT_L = 0x42, // R |
fruediger | 0:95916b07e8be | 76 | REG_GYRO_XOUT_H = 0x43, // R |
fruediger | 0:95916b07e8be | 77 | REG_GYRO_XOUT_L = 0x44, // R |
fruediger | 0:95916b07e8be | 78 | REG_GYRO_YOUT_H = 0x45, // R |
fruediger | 0:95916b07e8be | 79 | REG_GYRO_YOUT_L = 0x46, // R |
fruediger | 0:95916b07e8be | 80 | REG_GYRO_ZOUT_H = 0x47, // R |
fruediger | 0:95916b07e8be | 81 | REG_GYRO_ZOUT_L = 0x48, // R |
fruediger | 1:96a227d1ca7e | 82 | /* REG_EXT_SENS_DATA_00 = 0x49, // R |
fruediger | 0:95916b07e8be | 83 | REG_EXT_SENS_DATA_01 = 0x4A, // R |
fruediger | 0:95916b07e8be | 84 | REG_EXT_SENS_DATA_02 = 0x4B, // R |
fruediger | 0:95916b07e8be | 85 | REG_EXT_SENS_DATA_03 = 0x4C, // R |
fruediger | 0:95916b07e8be | 86 | REG_EXT_SENS_DATA_04 = 0x4D, // R |
fruediger | 0:95916b07e8be | 87 | REG_EXT_SENS_DATA_05 = 0x4E, // R |
fruediger | 0:95916b07e8be | 88 | REG_EXT_SENS_DATA_06 = 0x4F, // R |
fruediger | 0:95916b07e8be | 89 | REG_EXT_SENS_DATA_07 = 0x50, // R |
fruediger | 0:95916b07e8be | 90 | REG_EXT_SENS_DATA_08 = 0x51, // R |
fruediger | 0:95916b07e8be | 91 | REG_EXT_SENS_DATA_09 = 0x52, // R |
fruediger | 0:95916b07e8be | 92 | REG_EXT_SENS_DATA_10 = 0x53, // R |
fruediger | 0:95916b07e8be | 93 | REG_EXT_SENS_DATA_11 = 0x54, // R |
fruediger | 0:95916b07e8be | 94 | REG_EXT_SENS_DATA_12 = 0x55, // R |
fruediger | 0:95916b07e8be | 95 | REG_EXT_SENS_DATA_13 = 0x56, // R |
fruediger | 0:95916b07e8be | 96 | REG_EXT_SENS_DATA_14 = 0x57, // R |
fruediger | 0:95916b07e8be | 97 | REG_EXT_SENS_DATA_15 = 0x58, // R |
fruediger | 0:95916b07e8be | 98 | REG_EXT_SENS_DATA_16 = 0x59, // R |
fruediger | 0:95916b07e8be | 99 | REG_EXT_SENS_DATA_17 = 0x5A, // R |
fruediger | 0:95916b07e8be | 100 | REG_EXT_SENS_DATA_18 = 0x5B, // R |
fruediger | 0:95916b07e8be | 101 | REG_EXT_SENS_DATA_19 = 0x5C, // R |
fruediger | 0:95916b07e8be | 102 | REG_EXT_SENS_DATA_20 = 0x5D, // R |
fruediger | 0:95916b07e8be | 103 | REG_EXT_SENS_DATA_21 = 0x5E, // R |
fruediger | 0:95916b07e8be | 104 | REG_EXT_SENS_DATA_22 = 0x5F, // R |
fruediger | 1:96a227d1ca7e | 105 | REG_EXT_SENS_DATA_23 = 0x60, // R */ |
fruediger | 0:95916b07e8be | 106 | REG_MOT_DETECT_STATUS = 0x61, // R |
fruediger | 0:95916b07e8be | 107 | REG_I2C_SLV0_DO = 0x63, // R/W |
fruediger | 0:95916b07e8be | 108 | REG_I2C_SLV1_DO = 0x64, // R/W |
fruediger | 0:95916b07e8be | 109 | REG_I2C_SLV2_DO = 0x65, // R/W |
fruediger | 0:95916b07e8be | 110 | REG_I2C_SLV3_DO = 0x66, // R/W |
fruediger | 0:95916b07e8be | 111 | REG_I2C_MST_DELAY_CTRL = 0x67, // R/W |
fruediger | 0:95916b07e8be | 112 | REG_SIGNAL_PATH_RESET = 0x68, // R/W |
fruediger | 0:95916b07e8be | 113 | REG_MOT_DETECT_CTRL = 0x69, // R/W |
fruediger | 0:95916b07e8be | 114 | REG_USER_CTRL = 0x6A, // R/W |
fruediger | 0:95916b07e8be | 115 | REG_PWR_MGMT_1 = 0x6B, // R/W |
fruediger | 0:95916b07e8be | 116 | REG_PWR_MGMT_2 = 0x6C, // R/W |
fruediger | 0:95916b07e8be | 117 | REG_FIFO_COUNTH = 0x72, // R/W |
fruediger | 0:95916b07e8be | 118 | REG_FIFO_COUNTL = 0x73, // R/W |
fruediger | 0:95916b07e8be | 119 | REG_FIFO_R_W = 0x74, // R/W |
fruediger | 0:95916b07e8be | 120 | REG_WHO_AM_I = 0x75 // R |
fruediger | 0:95916b07e8be | 121 | }; |
fruediger | 0:95916b07e8be | 122 | |
fruediger | 0:95916b07e8be | 123 | static const uint8_t AUX_VDDIO_MASK = BYTE(10000000); |
fruediger | 0:95916b07e8be | 124 | enum AuxVDDIOLevel |
fruediger | 0:95916b07e8be | 125 | { |
fruediger | 0:95916b07e8be | 126 | AUX_VDDIO_VLOGIC = BYTE(00000000), |
fruediger | 0:95916b07e8be | 127 | AUX_VDDIO_VDD = BYTE(10000000) |
fruediger | 0:95916b07e8be | 128 | }; |
fruediger | 0:95916b07e8be | 129 | |
fruediger | 0:95916b07e8be | 130 | static const uint8_t EXT_SYNC_MASK = BYTE(00111000); |
fruediger | 0:95916b07e8be | 131 | enum ExtFrameSync |
fruediger | 0:95916b07e8be | 132 | { |
fruediger | 0:95916b07e8be | 133 | EXT_SYNC_DISABLED = BYTE(00000000), |
fruediger | 0:95916b07e8be | 134 | EXT_SYNC_TEMP_OUT_L = BYTE(00001000), |
fruediger | 0:95916b07e8be | 135 | EXT_SYNC_GYRO_XOUT_L = BYTE(00010000), |
fruediger | 0:95916b07e8be | 136 | EXT_SYNC_GYRO_YOUT_L = BYTE(00011000), |
fruediger | 0:95916b07e8be | 137 | EXT_SYNC_GYRO_ZOUT_L = BYTE(00100000), |
fruediger | 0:95916b07e8be | 138 | EXT_SYNC_ACCEL_XOUT_L = BYTE(00101000), |
fruediger | 0:95916b07e8be | 139 | EXT_SYNC_ACCEL_YOUT_L = BYTE(00110000), |
fruediger | 0:95916b07e8be | 140 | EXT_SYNC_ACCEL_ZOUT_L = BYTE(00111000) |
fruediger | 0:95916b07e8be | 141 | }; |
fruediger | 0:95916b07e8be | 142 | |
fruediger | 0:95916b07e8be | 143 | static const uint8_t DLPF_MASK = BYTE(00000111); |
fruediger | 0:95916b07e8be | 144 | enum DLPFBandwidth |
fruediger | 0:95916b07e8be | 145 | { |
fruediger | 0:95916b07e8be | 146 | DLPF_260HZ_256Hz = BYTE(00000000), |
fruediger | 0:95916b07e8be | 147 | DLPF_184HZ_188Hz = BYTE(00000001), |
fruediger | 0:95916b07e8be | 148 | DLPF_94HZ_98HZ = BYTE(00000010), |
fruediger | 0:95916b07e8be | 149 | DLPF_44HZ_42HZ = BYTE(00000011), |
fruediger | 0:95916b07e8be | 150 | DLPF_21HZ_20HZ = BYTE(00000100), |
fruediger | 0:95916b07e8be | 151 | DLPF_10HZ_10HZ = BYTE(00000101), |
fruediger | 0:95916b07e8be | 152 | DLPF_5HZ_5HZ = BYTE(00000110), |
fruediger | 0:95916b07e8be | 153 | DLPF_RESERVED = BYTE(00000111) |
fruediger | 0:95916b07e8be | 154 | }; |
fruediger | 0:95916b07e8be | 155 | |
fruediger | 0:95916b07e8be | 156 | static const uint8_t GYRO_X_ST_MASK = BYTE(10000000); |
fruediger | 0:95916b07e8be | 157 | static const uint8_t GYRO_Y_ST_MASK = BYTE(01000000); |
fruediger | 0:95916b07e8be | 158 | static const uint8_t GYRO_Z_ST_MASK = BYTE(00100000); |
fruediger | 0:95916b07e8be | 159 | |
fruediger | 0:95916b07e8be | 160 | static const uint8_t GYRO_RANGE_MASK = BYTE(00011000); |
fruediger | 0:95916b07e8be | 161 | enum GyroRange |
fruediger | 0:95916b07e8be | 162 | { |
fruediger | 0:95916b07e8be | 163 | GYRO_RANGE_250 = BYTE(00000000), |
fruediger | 0:95916b07e8be | 164 | GYRO_RANGE_500 = BYTE(00001000), |
fruediger | 0:95916b07e8be | 165 | GYRO_RANGE_1000 = BYTE(00010000), |
fruediger | 0:95916b07e8be | 166 | GYRO_RANGE_2000 = BYTE(00011000) |
fruediger | 0:95916b07e8be | 167 | }; |
fruediger | 0:95916b07e8be | 168 | |
fruediger | 0:95916b07e8be | 169 | static const uint8_t ACCEL_X_ST_MASK = BYTE(10000000); |
fruediger | 0:95916b07e8be | 170 | static const uint8_t ACCEL_Y_ST_MASK = BYTE(01000000); |
fruediger | 0:95916b07e8be | 171 | static const uint8_t ACCEL_Z_ST_MASK = BYTE(00100000); |
fruediger | 0:95916b07e8be | 172 | |
fruediger | 0:95916b07e8be | 173 | static const uint8_t ACCEL_HPF_MASK = BYTE(00000111); |
fruediger | 0:95916b07e8be | 174 | enum AccelHPFCutOff |
fruediger | 0:95916b07e8be | 175 | { |
fruediger | 0:95916b07e8be | 176 | ACCEL_HPF_RESET = BYTE(00000000), |
fruediger | 0:95916b07e8be | 177 | ACCEL_HPF_5HZ = BYTE(00000001), |
fruediger | 0:95916b07e8be | 178 | ACCEL_HPF_2_5HZ = BYTE(00000010), |
fruediger | 0:95916b07e8be | 179 | ACCEL_HPF_1_25HZ = BYTE(00000011), |
fruediger | 0:95916b07e8be | 180 | ACCEL_HPF_0_63HZ = BYTE(00000100), |
fruediger | 0:95916b07e8be | 181 | ACCEL_HPF_HOLD = BYTE(00000111) |
fruediger | 0:95916b07e8be | 182 | }; |
fruediger | 0:95916b07e8be | 183 | |
fruediger | 0:95916b07e8be | 184 | static const uint8_t ACCEL_RANGE_MASK = BYTE(00011000); |
fruediger | 0:95916b07e8be | 185 | enum AccelRange |
fruediger | 0:95916b07e8be | 186 | { |
fruediger | 0:95916b07e8be | 187 | ACCEL_RANGE_2G = BYTE(00000000), |
fruediger | 0:95916b07e8be | 188 | ACCEL_RANGE_4G = BYTE(00001000), |
fruediger | 0:95916b07e8be | 189 | ACCEL_RANGE_8G = BYTE(00010000), |
fruediger | 0:95916b07e8be | 190 | ACCEL_RANGE_16G = BYTE(00011000) |
fruediger | 0:95916b07e8be | 191 | }; |
fruediger | 0:95916b07e8be | 192 | |
fruediger | 0:95916b07e8be | 193 | static const uint8_t TEMP_FIFO_EN_MASK = BYTE(10000000); |
fruediger | 0:95916b07e8be | 194 | static const uint8_t GYRO_X_FIFO_EN_MASK = BYTE(01000000); |
fruediger | 0:95916b07e8be | 195 | static const uint8_t GYRO_Y_FIFO_EN_MASK = BYTE(00100000); |
fruediger | 0:95916b07e8be | 196 | static const uint8_t GYRO_Z_FIFO_EN_MASK = BYTE(00010000); |
fruediger | 0:95916b07e8be | 197 | static const uint8_t ACCEL_FIFO_EN_MASK = BYTE(00001000); |
fruediger | 0:95916b07e8be | 198 | |
fruediger | 1:96a227d1ca7e | 199 | static const uint8_t INT_LEVEL_MASK = BYTE(10000000); |
fruediger | 1:96a227d1ca7e | 200 | enum InterruptLevel |
fruediger | 1:96a227d1ca7e | 201 | { |
fruediger | 1:96a227d1ca7e | 202 | INT_LEVEL_ACTIVE_HIGH = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 203 | INT_LEVEL_ACTIVE_LOW = BYTE(10000000) |
fruediger | 1:96a227d1ca7e | 204 | }; |
fruediger | 1:96a227d1ca7e | 205 | |
fruediger | 1:96a227d1ca7e | 206 | static const uint8_t INT_DRIVE_MASK = BYTE(01000000); |
fruediger | 1:96a227d1ca7e | 207 | enum InterruptDrive |
fruediger | 1:96a227d1ca7e | 208 | { |
fruediger | 1:96a227d1ca7e | 209 | INT_DRIVE_PUSH_PULL = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 210 | INT_DRIVE_OPEN_DRAIN = BYTE(01000000) |
fruediger | 1:96a227d1ca7e | 211 | }; |
fruediger | 1:96a227d1ca7e | 212 | |
fruediger | 1:96a227d1ca7e | 213 | static const uint8_t INT_LATCH_MASK = BYTE(00100000); |
fruediger | 1:96a227d1ca7e | 214 | enum InterruptLatch |
fruediger | 1:96a227d1ca7e | 215 | { |
fruediger | 1:96a227d1ca7e | 216 | INT_LATCH_50US_PULSE = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 217 | INT_LATCH_WAIT_CLEARED = BYTE(00100000) |
fruediger | 1:96a227d1ca7e | 218 | }; |
fruediger | 1:96a227d1ca7e | 219 | |
fruediger | 1:96a227d1ca7e | 220 | static const uint8_t INT_CLEAR_MASK = BYTE(00010000); |
fruediger | 1:96a227d1ca7e | 221 | enum InterruptClear |
fruediger | 1:96a227d1ca7e | 222 | { |
fruediger | 1:96a227d1ca7e | 223 | INT_CLEAR_STATUS_ONLY_READ = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 224 | INT_CLEAR_ANY_READ = BYTE(00010000) |
fruediger | 1:96a227d1ca7e | 225 | }; |
fruediger | 1:96a227d1ca7e | 226 | |
fruediger | 1:96a227d1ca7e | 227 | static const uint8_t INT_FSYNC_LEVEL_MASK = BYTE(00001000); |
fruediger | 1:96a227d1ca7e | 228 | enum InterruptFSyncLevel |
fruediger | 1:96a227d1ca7e | 229 | { |
fruediger | 1:96a227d1ca7e | 230 | INT_FSYNC_LEVEL_ACTIVE_HIGH = BYTE(00000000), |
fruediger | 1:96a227d1ca7e | 231 | INT_FSYNC_LEVEL_ACTIVE_LOW = BYTE(00001000) |
fruediger | 1:96a227d1ca7e | 232 | }; |
fruediger | 1:96a227d1ca7e | 233 | |
fruediger | 1:96a227d1ca7e | 234 | static const uint8_t INT_FSYNC_EN_MASK = BYTE(00000100); |
fruediger | 1:96a227d1ca7e | 235 | |
fruediger | 1:96a227d1ca7e | 236 | enum Interrupt |
fruediger | 1:96a227d1ca7e | 237 | { |
fruediger | 1:96a227d1ca7e | 238 | INT_FREEFALL = BYTE(10000000), |
fruediger | 1:96a227d1ca7e | 239 | INT_MOTION = BYTE(01000000), |
fruediger | 1:96a227d1ca7e | 240 | INT_ZERO_MOTION = BYTE(00100000), |
fruediger | 1:96a227d1ca7e | 241 | INT_FIFO_OVERFLOW = BYTE(00010000), |
fruediger | 1:96a227d1ca7e | 242 | /* INT_I2C_MASTER = BYTE(00001000), |
fruediger | 1:96a227d1ca7e | 243 | INT_PLL_READY = BYTE(00000100), |
fruediger | 1:96a227d1ca7e | 244 | INT_DMP_INIT = BYTE(00000010), */ |
fruediger | 1:96a227d1ca7e | 245 | INT_DATA_READY = BYTE(00000001) |
fruediger | 1:96a227d1ca7e | 246 | }; |
fruediger | 1:96a227d1ca7e | 247 | friend inline Interrupt operator|(Interrupt a, Interrupt b) { return static_cast<Interrupt>(static_cast<int>(a) | static_cast<int>(b)); } |
fruediger | 1:96a227d1ca7e | 248 | friend inline Interrupt operator&(Interrupt a, Interrupt b) { return static_cast<Interrupt>(static_cast<int>(a) & static_cast<int>(b)); } |
fruediger | 1:96a227d1ca7e | 249 | |
fruediger | 1:96a227d1ca7e | 250 | /** |
fruediger | 1:96a227d1ca7e | 251 | * basic members |
fruediger | 1:96a227d1ca7e | 252 | */ |
fruediger | 1:96a227d1ca7e | 253 | |
fruediger | 0:95916b07e8be | 254 | MPU6050(PinName sda, PinName scl, BaseAddress address = ADDRESS_0) : i2c(sda, scl), baseAddress(address) |
fruediger | 0:95916b07e8be | 255 | { } |
fruediger | 0:95916b07e8be | 256 | |
fruediger | 0:95916b07e8be | 257 | BaseAddress getAddress() { return baseAddress; } |
fruediger | 0:95916b07e8be | 258 | |
fruediger | 0:95916b07e8be | 259 | /** |
fruediger | 0:95916b07e8be | 260 | * REG_AUX_VDDIO register |
fruediger | 0:95916b07e8be | 261 | */ |
fruediger | 0:95916b07e8be | 262 | |
fruediger | 0:95916b07e8be | 263 | bool getAuxVDDIOLevel(AuxVDDIOLevel *level, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 264 | bool setAuxVDDIOLevel(AuxVDDIOLevel level, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 265 | |
fruediger | 0:95916b07e8be | 266 | /** |
fruediger | 0:95916b07e8be | 267 | * REG_SMPLRT_DIV register |
fruediger | 0:95916b07e8be | 268 | */ |
fruediger | 0:95916b07e8be | 269 | |
fruediger | 0:95916b07e8be | 270 | bool getGyroSampleRateDivider(uint8_t *rateDivider, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 271 | bool setGyroSampleRateDivider(uint8_t rateDivider, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 272 | |
fruediger | 0:95916b07e8be | 273 | /** |
fruediger | 0:95916b07e8be | 274 | * REG_CONFIG register |
fruediger | 0:95916b07e8be | 275 | */ |
fruediger | 0:95916b07e8be | 276 | |
fruediger | 0:95916b07e8be | 277 | bool getExternalFrameSync(ExtFrameSync *frameSync, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 278 | bool setExternalFrameSync(ExtFrameSync frameSync, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 279 | |
fruediger | 0:95916b07e8be | 280 | bool getDLPFBandwidth(DLPFBandwidth *bandwidth, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 281 | bool setDLPFBandwidth(DLPFBandwidth bandwidth, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 282 | |
fruediger | 0:95916b07e8be | 283 | /** |
fruediger | 0:95916b07e8be | 284 | * REG_GYRO_CONFIG register |
fruediger | 0:95916b07e8be | 285 | */ |
fruediger | 0:95916b07e8be | 286 | |
fruediger | 0:95916b07e8be | 287 | bool getGyroXSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 288 | bool setGyroXSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 289 | |
fruediger | 0:95916b07e8be | 290 | bool getGyroYSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 291 | bool setGyroYSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 292 | |
fruediger | 0:95916b07e8be | 293 | bool getGyroZSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 294 | bool setGyroZSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 295 | |
fruediger | 0:95916b07e8be | 296 | bool getGyroRange(GyroRange *gyroRange, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 297 | bool setGyroRange(GyroRange gyroRange, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 298 | |
fruediger | 0:95916b07e8be | 299 | /** |
fruediger | 0:95916b07e8be | 300 | * REG_ACCEL_CONFIG register |
fruediger | 0:95916b07e8be | 301 | */ |
fruediger | 0:95916b07e8be | 302 | |
fruediger | 0:95916b07e8be | 303 | bool getAccelXSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 304 | bool setAccelXSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 305 | |
fruediger | 0:95916b07e8be | 306 | bool getAccelYSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 307 | bool setAccelYSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 308 | |
fruediger | 0:95916b07e8be | 309 | bool getAccelZSelfTestEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 310 | bool setAccelZSelfTestEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 311 | |
fruediger | 0:95916b07e8be | 312 | bool getAccelHPFCutOff(AccelHPFCutOff *frequency, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 313 | bool setAccelHPFCutOff(AccelHPFCutOff frequency, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 314 | |
fruediger | 0:95916b07e8be | 315 | bool getAccelRange(AccelRange *accelRange, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 316 | bool setAccelRange(AccelRange accelRange, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 317 | |
fruediger | 0:95916b07e8be | 318 | /** |
fruediger | 0:95916b07e8be | 319 | * REG_FF_THR register |
fruediger | 0:95916b07e8be | 320 | */ |
fruediger | 0:95916b07e8be | 321 | |
fruediger | 0:95916b07e8be | 322 | bool getFreefallDetectionThreshold(uint8_t *threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 323 | bool setFreefallDetectionThreshold(uint8_t threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 324 | |
fruediger | 0:95916b07e8be | 325 | /** |
fruediger | 0:95916b07e8be | 326 | * REG_FF_DUR register |
fruediger | 0:95916b07e8be | 327 | */ |
fruediger | 0:95916b07e8be | 328 | |
fruediger | 0:95916b07e8be | 329 | bool getFreefallDetectionDuration(uint8_t *duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 330 | bool setFreefallDetectionDuration(uint8_t duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 331 | |
fruediger | 0:95916b07e8be | 332 | /** |
fruediger | 0:95916b07e8be | 333 | * REG_MOT_THR register |
fruediger | 0:95916b07e8be | 334 | */ |
fruediger | 0:95916b07e8be | 335 | |
fruediger | 0:95916b07e8be | 336 | bool getMotionDetectionThreshold(uint8_t *threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 337 | bool setMotionDetectionThreshold(uint8_t threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 338 | |
fruediger | 0:95916b07e8be | 339 | /** |
fruediger | 0:95916b07e8be | 340 | * REG_MOT_DUR register |
fruediger | 0:95916b07e8be | 341 | */ |
fruediger | 0:95916b07e8be | 342 | |
fruediger | 0:95916b07e8be | 343 | bool getMotionDetectionDuration(uint8_t *duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 344 | bool setMotionDetectionDuration(uint8_t duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 345 | |
fruediger | 0:95916b07e8be | 346 | /** |
fruediger | 0:95916b07e8be | 347 | * REG_ZRMOT_THR register |
fruediger | 0:95916b07e8be | 348 | */ |
fruediger | 0:95916b07e8be | 349 | |
fruediger | 0:95916b07e8be | 350 | bool getZeroMotionDetectionThreshold(uint8_t *threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 351 | bool setZeroMotionDetectionThreshold(uint8_t threshold, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 352 | |
fruediger | 0:95916b07e8be | 353 | /** |
fruediger | 0:95916b07e8be | 354 | * REG_ZRMOT_DUR register |
fruediger | 0:95916b07e8be | 355 | */ |
fruediger | 0:95916b07e8be | 356 | |
fruediger | 0:95916b07e8be | 357 | bool getZeroMotionDetectionDuration(uint8_t *duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 358 | bool setZeroMotionDetectionDuration(uint8_t duration, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 359 | |
fruediger | 0:95916b07e8be | 360 | /** |
fruediger | 0:95916b07e8be | 361 | * REG_FIFO_EN register |
fruediger | 0:95916b07e8be | 362 | */ |
fruediger | 0:95916b07e8be | 363 | |
fruediger | 0:95916b07e8be | 364 | bool getTempFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 365 | bool setTempFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 366 | |
fruediger | 0:95916b07e8be | 367 | bool getGyroXFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 368 | bool setGyroXFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 369 | |
fruediger | 0:95916b07e8be | 370 | bool getGyroYFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 371 | bool setGyroYFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 372 | |
fruediger | 0:95916b07e8be | 373 | bool getGyroZFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 374 | bool setGyroZFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 375 | |
fruediger | 0:95916b07e8be | 376 | bool getAccelFIFOEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 377 | bool setAccelFIFOEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 378 | |
fruediger | 0:95916b07e8be | 379 | /** |
fruediger | 1:96a227d1ca7e | 380 | * REG_INT_PIN_CFG register |
fruediger | 1:96a227d1ca7e | 381 | */ |
fruediger | 1:96a227d1ca7e | 382 | |
fruediger | 1:96a227d1ca7e | 383 | bool getInterruptLevel(InterruptLevel *level, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 384 | bool setInterruptLevel(InterruptLevel level, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 385 | |
fruediger | 1:96a227d1ca7e | 386 | bool getInterruptDrive(InterruptDrive *drive, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 387 | bool setInterruptDrive(InterruptDrive drive, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 388 | |
fruediger | 1:96a227d1ca7e | 389 | bool getInterruptLatch(InterruptLatch *latch, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 390 | bool setInterruptLatch(InterruptLatch latch, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 391 | |
fruediger | 1:96a227d1ca7e | 392 | bool getInterruptLatchClear(InterruptClear *latchClear, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 393 | bool setInterruptLatchClear(InterruptClear latchClear, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 394 | |
fruediger | 1:96a227d1ca7e | 395 | bool getInterruptFSyncLevel(InterruptFSyncLevel *fsyncLevel, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 396 | bool setInterruptFSyncLevel(InterruptFSyncLevel fsyncLevel, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 397 | |
fruediger | 1:96a227d1ca7e | 398 | bool getInterruptFSyncEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 399 | bool setInterruptFSyncEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 400 | |
fruediger | 1:96a227d1ca7e | 401 | /** |
fruediger | 1:96a227d1ca7e | 402 | * REG_INT_ENABLE register |
fruediger | 1:96a227d1ca7e | 403 | */ |
fruediger | 1:96a227d1ca7e | 404 | |
fruediger | 1:96a227d1ca7e | 405 | bool getInterruptsEnabled(Interrupt *interruptSet, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 406 | bool setInterruptsEnabled(Interrupt interruptSet, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 407 | |
fruediger | 1:96a227d1ca7e | 408 | bool getInterruptFreefallEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 409 | bool setInterruptFreefallEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 410 | |
fruediger | 1:96a227d1ca7e | 411 | bool getInterruptMotionEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 412 | bool setInterruptMotionEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 413 | |
fruediger | 1:96a227d1ca7e | 414 | bool getInterruptZeroMotionEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 415 | bool setInterruptZeroMotionEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 416 | |
fruediger | 1:96a227d1ca7e | 417 | bool getInterruptFIFOOverflowEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 418 | bool setInterruptFIFOOverflowEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 419 | |
fruediger | 1:96a227d1ca7e | 420 | bool getInterruptDataReadyEnabled(bool *enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 421 | bool setInterruptDataReadyEnabled(bool enabled, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 422 | |
fruediger | 1:96a227d1ca7e | 423 | /** |
fruediger | 1:96a227d1ca7e | 424 | * REG_INT_STATUS register |
fruediger | 1:96a227d1ca7e | 425 | */ |
fruediger | 1:96a227d1ca7e | 426 | |
fruediger | 1:96a227d1ca7e | 427 | bool getInterruptStatuses(Interrupt *interruptSet, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 428 | |
fruediger | 1:96a227d1ca7e | 429 | bool getInterruptFreefallStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 430 | |
fruediger | 1:96a227d1ca7e | 431 | bool getInterruptMotionStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 432 | |
fruediger | 1:96a227d1ca7e | 433 | bool getInterruptZeroMotionStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 434 | |
fruediger | 1:96a227d1ca7e | 435 | bool getInterruptFIFOOverflowStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 436 | |
fruediger | 1:96a227d1ca7e | 437 | bool getInterruptDataReadyStatus(bool *status, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 438 | |
fruediger | 1:96a227d1ca7e | 439 | /** |
fruediger | 1:96a227d1ca7e | 440 | * REG_ACCEL_XOUT_H |
fruediger | 1:96a227d1ca7e | 441 | * REG_ACCEL_XOUT_L |
fruediger | 1:96a227d1ca7e | 442 | * REG_ACCEL_YOUT_H |
fruediger | 1:96a227d1ca7e | 443 | * REG_ACCEL_YOUT_L |
fruediger | 1:96a227d1ca7e | 444 | * REG_ACCEL_ZOUT_H |
fruediger | 1:96a227d1ca7e | 445 | * REG_ACCEL_ZOUT_L |
fruediger | 1:96a227d1ca7e | 446 | * REG_TEMP_OUT_H |
fruediger | 1:96a227d1ca7e | 447 | * REG_TEMP_OUT_L |
fruediger | 1:96a227d1ca7e | 448 | * REG_GYRO_XOUT_H |
fruediger | 1:96a227d1ca7e | 449 | * REG_GYRO_XOUT_L |
fruediger | 1:96a227d1ca7e | 450 | * REG_GYRO_YOUT_H |
fruediger | 1:96a227d1ca7e | 451 | * REG_GYRO_YOUT_L |
fruediger | 1:96a227d1ca7e | 452 | * REG_GYRO_ZOUT_H |
fruediger | 1:96a227d1ca7e | 453 | * REG_GYRO_ZOUT_L registers |
fruediger | 1:96a227d1ca7e | 454 | */ |
fruediger | 1:96a227d1ca7e | 455 | |
fruediger | 1:96a227d1ca7e | 456 | /** Acceleration */ |
fruediger | 1:96a227d1ca7e | 457 | |
fruediger | 1:96a227d1ca7e | 458 | bool getAcceleration(int16_t *ax, int16_t *ay, int16_t *az, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 459 | |
fruediger | 1:96a227d1ca7e | 460 | bool getAccelerationX(int16_t* ax, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 461 | |
fruediger | 1:96a227d1ca7e | 462 | bool getAccelerationY(int16_t* ay, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 463 | |
fruediger | 1:96a227d1ca7e | 464 | bool getAccelerationZ(int16_t* az, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 465 | |
fruediger | 1:96a227d1ca7e | 466 | /** Temperature */ |
fruediger | 1:96a227d1ca7e | 467 | |
fruediger | 1:96a227d1ca7e | 468 | bool getTemperature(int16_t* temp, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 469 | |
fruediger | 1:96a227d1ca7e | 470 | /** Rotation speed */ |
fruediger | 1:96a227d1ca7e | 471 | |
fruediger | 1:96a227d1ca7e | 472 | bool getRotationSpeed(int16_t *ox, int16_t *oy, int16_t *oz, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 473 | |
fruediger | 1:96a227d1ca7e | 474 | bool getRotationSpeedX(int16_t* ox, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 475 | |
fruediger | 1:96a227d1ca7e | 476 | bool getRotationSpeedY(int16_t* oy, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 477 | |
fruediger | 1:96a227d1ca7e | 478 | bool getRotationSpeedZ(int16_t* oz, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 479 | |
fruediger | 1:96a227d1ca7e | 480 | /** All three */ |
fruediger | 1:96a227d1ca7e | 481 | |
fruediger | 1:96a227d1ca7e | 482 | bool getMotionAndTemperature(int16_t* ax, int16_t* ay, int16_t* az, |
fruediger | 1:96a227d1ca7e | 483 | int16_t* ox, int16_t* oy, int16_t* oz, |
fruediger | 1:96a227d1ca7e | 484 | int16_t* temp, float timeout_secs = defaultTimeout_secs); |
fruediger | 1:96a227d1ca7e | 485 | |
fruediger | 1:96a227d1ca7e | 486 | /** |
fruediger | 0:95916b07e8be | 487 | * Read and write registers |
fruediger | 0:95916b07e8be | 488 | */ |
fruediger | 0:95916b07e8be | 489 | |
fruediger | 0:95916b07e8be | 490 | bool read(Register reg, uint8_t *data, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 491 | bool read(Register reg, uint8_t *data, size_t length, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 492 | |
fruediger | 0:95916b07e8be | 493 | bool write(Register reg, uint8_t data, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 494 | bool write(Register reg, uint8_t *data, size_t length, float timeout_secs = defaultTimeout_secs); |
fruediger | 0:95916b07e8be | 495 | |
fruediger | 0:95916b07e8be | 496 | private: |
fruediger | 0:95916b07e8be | 497 | static const float retryDelay_secs = 0.005; |
fruediger | 0:95916b07e8be | 498 | static const float defaultTimeout_secs = 0.1; // makes a maximum of 20 tries |
fruediger | 0:95916b07e8be | 499 | |
fruediger | 0:95916b07e8be | 500 | I2C i2c; |
fruediger | 0:95916b07e8be | 501 | BaseAddress baseAddress; |
fruediger | 0:95916b07e8be | 502 | }; |
fruediger | 0:95916b07e8be | 503 | |
fruediger | 0:95916b07e8be | 504 | #endif |