Felix Rüdiger / MPU6050_lib

Dependents:   BLE_Nano_MPU6050Service

Committer:
fruediger
Date:
Tue Jun 30 23:52:31 2015 +0000
Revision:
0:95916b07e8be
Child:
1:96a227d1ca7e
added new "MPU6050" library as an abstraction layer for the I2C communication with the MPU6050

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fruediger 0:95916b07e8be 1 #include "MPU6050.h"
fruediger 0:95916b07e8be 2
fruediger 0:95916b07e8be 3 /**
fruediger 0:95916b07e8be 4 * Read and write registers
fruediger 0:95916b07e8be 5 */
fruediger 0:95916b07e8be 6
fruediger 0:95916b07e8be 7 bool MPU6050::read(Register reg, uint8_t *data, size_t length, float timeout_secs)
fruediger 0:95916b07e8be 8 {
fruediger 0:95916b07e8be 9 float t = 0.0f;
fruediger 0:95916b07e8be 10
fruediger 0:95916b07e8be 11 uint8_t tmp = reg;
fruediger 0:95916b07e8be 12
fruediger 0:95916b07e8be 13 while (!(i2c.write(baseAddress, (char*)&tmp, 1, true) == 0))
fruediger 0:95916b07e8be 14 if ((t += retryDelay_secs) > timeout_secs)
fruediger 0:95916b07e8be 15 return false;
fruediger 0:95916b07e8be 16 else
fruediger 0:95916b07e8be 17 wait(retryDelay_secs);
fruediger 0:95916b07e8be 18
fruediger 0:95916b07e8be 19 while (!(i2c.read(baseAddress, (char*)data, length) == 0))
fruediger 0:95916b07e8be 20 if ((t += retryDelay_secs) > timeout_secs)
fruediger 0:95916b07e8be 21 return false;
fruediger 0:95916b07e8be 22 else
fruediger 0:95916b07e8be 23 wait(retryDelay_secs);
fruediger 0:95916b07e8be 24
fruediger 0:95916b07e8be 25 return true;
fruediger 0:95916b07e8be 26 }
fruediger 0:95916b07e8be 27
fruediger 0:95916b07e8be 28 bool MPU6050::read(Register reg, uint8_t *data, float timeout_secs)
fruediger 0:95916b07e8be 29 {
fruediger 0:95916b07e8be 30 return this->read(reg, data, 1, timeout_secs);
fruediger 0:95916b07e8be 31 }
fruediger 0:95916b07e8be 32
fruediger 0:95916b07e8be 33 bool MPU6050::write(Register reg, uint8_t *data, size_t length, float timeout_secs)
fruediger 0:95916b07e8be 34 {
fruediger 0:95916b07e8be 35 uint8_t tmp[length + 1];
fruediger 0:95916b07e8be 36 tmp[0] = reg;
fruediger 0:95916b07e8be 37 memcpy(&tmp[1], data, length);
fruediger 0:95916b07e8be 38
fruediger 0:95916b07e8be 39 for (float t = 0.0f; !(i2c.write(baseAddress, (char*)&tmp[0], length + 1) == 0);)
fruediger 0:95916b07e8be 40 if ((t += retryDelay_secs) > timeout_secs)
fruediger 0:95916b07e8be 41 return false;
fruediger 0:95916b07e8be 42 else
fruediger 0:95916b07e8be 43 wait(retryDelay_secs);
fruediger 0:95916b07e8be 44
fruediger 0:95916b07e8be 45 return true;
fruediger 0:95916b07e8be 46 }
fruediger 0:95916b07e8be 47
fruediger 0:95916b07e8be 48 bool MPU6050::write(Register reg, uint8_t data, float timeout_secs)
fruediger 0:95916b07e8be 49 {
fruediger 0:95916b07e8be 50 return this->write(reg, &data, 1, timeout_secs);
fruediger 0:95916b07e8be 51 }
fruediger 0:95916b07e8be 52
fruediger 0:95916b07e8be 53 /**
fruediger 0:95916b07e8be 54 * AUX_VDDIO register
fruediger 0:95916b07e8be 55 */
fruediger 0:95916b07e8be 56
fruediger 0:95916b07e8be 57 bool MPU6050::getAuxVDDIOLevel(AuxVDDIOLevel *level, float timeout_secs)
fruediger 0:95916b07e8be 58 {
fruediger 0:95916b07e8be 59 uint8_t tmp;
fruediger 0:95916b07e8be 60 if (this->read(REG_AUX_VDDIO, &tmp, timeout_secs))
fruediger 0:95916b07e8be 61 {
fruediger 0:95916b07e8be 62 level[0] = static_cast<AuxVDDIOLevel>(tmp & AUX_VDDIO_MASK);
fruediger 0:95916b07e8be 63 return true;
fruediger 0:95916b07e8be 64 }
fruediger 0:95916b07e8be 65
fruediger 0:95916b07e8be 66 return false;
fruediger 0:95916b07e8be 67 }
fruediger 0:95916b07e8be 68
fruediger 0:95916b07e8be 69 bool MPU6050::setAuxVDDIOLevel(AuxVDDIOLevel level, float timeout_secs)
fruediger 0:95916b07e8be 70 {
fruediger 0:95916b07e8be 71 uint8_t tmp;
fruediger 0:95916b07e8be 72 return (this->read(REG_AUX_VDDIO, &tmp, timeout_secs)) && (this->write(REG_AUX_VDDIO, (tmp & (~AUX_VDDIO_MASK)) | level, timeout_secs));
fruediger 0:95916b07e8be 73 }
fruediger 0:95916b07e8be 74
fruediger 0:95916b07e8be 75 /**
fruediger 0:95916b07e8be 76 * REG_SMPLRT_DIV register
fruediger 0:95916b07e8be 77 */
fruediger 0:95916b07e8be 78
fruediger 0:95916b07e8be 79 bool MPU6050::getGyroSampleRateDivider(uint8_t *rateDivider, float timeout_secs)
fruediger 0:95916b07e8be 80 {
fruediger 0:95916b07e8be 81 return this->read(REG_SMPLRT_DIV, rateDivider, timeout_secs);
fruediger 0:95916b07e8be 82 }
fruediger 0:95916b07e8be 83
fruediger 0:95916b07e8be 84 bool MPU6050::setGyroSampleRateDivider(uint8_t rateDivider, float timeout_secs)
fruediger 0:95916b07e8be 85 {
fruediger 0:95916b07e8be 86 return this->write(REG_SMPLRT_DIV, rateDivider, timeout_secs);
fruediger 0:95916b07e8be 87 }
fruediger 0:95916b07e8be 88
fruediger 0:95916b07e8be 89 /**
fruediger 0:95916b07e8be 90 * REG_CONFIG register
fruediger 0:95916b07e8be 91 */
fruediger 0:95916b07e8be 92
fruediger 0:95916b07e8be 93 bool MPU6050::getExternalFrameSync(ExtFrameSync *frameSync, float timeout_secs)
fruediger 0:95916b07e8be 94 {
fruediger 0:95916b07e8be 95 uint8_t tmp;
fruediger 0:95916b07e8be 96 if (this->read(REG_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 97 {
fruediger 0:95916b07e8be 98 frameSync[0] = static_cast<ExtFrameSync>(tmp & EXT_SYNC_MASK);
fruediger 0:95916b07e8be 99 return true;
fruediger 0:95916b07e8be 100 }
fruediger 0:95916b07e8be 101
fruediger 0:95916b07e8be 102 return false;
fruediger 0:95916b07e8be 103 }
fruediger 0:95916b07e8be 104
fruediger 0:95916b07e8be 105 bool MPU6050::setExternalFrameSync(ExtFrameSync frameSync, float timeout_secs)
fruediger 0:95916b07e8be 106 {
fruediger 0:95916b07e8be 107 uint8_t tmp;
fruediger 0:95916b07e8be 108 return (this->read(REG_CONFIG, &tmp, timeout_secs)) && (this->write(REG_CONFIG, (tmp & (~EXT_SYNC_MASK)) | frameSync, timeout_secs));
fruediger 0:95916b07e8be 109 }
fruediger 0:95916b07e8be 110
fruediger 0:95916b07e8be 111 bool MPU6050::getDLPFBandwidth(DLPFBandwidth *bandwith, float timeout_secs)
fruediger 0:95916b07e8be 112 {
fruediger 0:95916b07e8be 113 uint8_t tmp;
fruediger 0:95916b07e8be 114 if (this->read(REG_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 115 {
fruediger 0:95916b07e8be 116 bandwith[0] = static_cast<DLPFBandwidth>(tmp & DLPF_MASK);
fruediger 0:95916b07e8be 117 return true;
fruediger 0:95916b07e8be 118 }
fruediger 0:95916b07e8be 119
fruediger 0:95916b07e8be 120 return false;
fruediger 0:95916b07e8be 121 }
fruediger 0:95916b07e8be 122
fruediger 0:95916b07e8be 123 bool MPU6050::setDLPFBandwidth(DLPFBandwidth bandwith, float timeout_secs)
fruediger 0:95916b07e8be 124 {
fruediger 0:95916b07e8be 125 uint8_t tmp;
fruediger 0:95916b07e8be 126 return (this->read(REG_CONFIG, &tmp, timeout_secs)) && (this->write(REG_CONFIG, (tmp & (~DLPF_MASK)) | bandwith, timeout_secs));
fruediger 0:95916b07e8be 127 }
fruediger 0:95916b07e8be 128
fruediger 0:95916b07e8be 129 /**
fruediger 0:95916b07e8be 130 * REG_GYRO_CONFIG register
fruediger 0:95916b07e8be 131 */
fruediger 0:95916b07e8be 132
fruediger 0:95916b07e8be 133 bool MPU6050::getGyroXSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 134 {
fruediger 0:95916b07e8be 135 uint8_t tmp;
fruediger 0:95916b07e8be 136 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 137 {
fruediger 0:95916b07e8be 138 enabled[0] = ((tmp & GYRO_X_ST_MASK) != 0);
fruediger 0:95916b07e8be 139 return true;
fruediger 0:95916b07e8be 140 }
fruediger 0:95916b07e8be 141
fruediger 0:95916b07e8be 142 return false;
fruediger 0:95916b07e8be 143 }
fruediger 0:95916b07e8be 144
fruediger 0:95916b07e8be 145 bool MPU6050::setGyroXSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 146 {
fruediger 0:95916b07e8be 147 uint8_t tmp;
fruediger 0:95916b07e8be 148 if (this->read(REG_GYRO_CONFIG, &tmp))
fruediger 0:95916b07e8be 149 {
fruediger 0:95916b07e8be 150 tmp &= ~(GYRO_X_ST_MASK);
fruediger 0:95916b07e8be 151 return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_X_ST_MASK) : tmp);
fruediger 0:95916b07e8be 152 }
fruediger 0:95916b07e8be 153 return false;
fruediger 0:95916b07e8be 154 }
fruediger 0:95916b07e8be 155
fruediger 0:95916b07e8be 156 bool MPU6050::getGyroYSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 157 {
fruediger 0:95916b07e8be 158 uint8_t tmp;
fruediger 0:95916b07e8be 159 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 160 {
fruediger 0:95916b07e8be 161 enabled[0] = ((tmp & GYRO_Y_ST_MASK) != 0);
fruediger 0:95916b07e8be 162 return true;
fruediger 0:95916b07e8be 163 }
fruediger 0:95916b07e8be 164
fruediger 0:95916b07e8be 165 return false;
fruediger 0:95916b07e8be 166 }
fruediger 0:95916b07e8be 167
fruediger 0:95916b07e8be 168 bool MPU6050::setGyroYSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 169 {
fruediger 0:95916b07e8be 170 uint8_t tmp;
fruediger 0:95916b07e8be 171 if (this->read(REG_GYRO_CONFIG, &tmp))
fruediger 0:95916b07e8be 172 {
fruediger 0:95916b07e8be 173 tmp &= ~(GYRO_Y_ST_MASK);
fruediger 0:95916b07e8be 174 return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_Y_ST_MASK) : tmp);
fruediger 0:95916b07e8be 175 }
fruediger 0:95916b07e8be 176 return false;
fruediger 0:95916b07e8be 177 }
fruediger 0:95916b07e8be 178
fruediger 0:95916b07e8be 179 bool MPU6050::getGyroZSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 180 {
fruediger 0:95916b07e8be 181 uint8_t tmp;
fruediger 0:95916b07e8be 182 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 183 {
fruediger 0:95916b07e8be 184 enabled[0] = ((tmp & GYRO_Z_ST_MASK) != 0);
fruediger 0:95916b07e8be 185 return true;
fruediger 0:95916b07e8be 186 }
fruediger 0:95916b07e8be 187
fruediger 0:95916b07e8be 188 return false;
fruediger 0:95916b07e8be 189 }
fruediger 0:95916b07e8be 190
fruediger 0:95916b07e8be 191 bool MPU6050::setGyroZSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 192 {
fruediger 0:95916b07e8be 193 uint8_t tmp;
fruediger 0:95916b07e8be 194 if (this->read(REG_GYRO_CONFIG, &tmp))
fruediger 0:95916b07e8be 195 {
fruediger 0:95916b07e8be 196 tmp &= ~(GYRO_Z_ST_MASK);
fruediger 0:95916b07e8be 197 return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_Z_ST_MASK) : tmp);
fruediger 0:95916b07e8be 198 }
fruediger 0:95916b07e8be 199 return false;
fruediger 0:95916b07e8be 200 }
fruediger 0:95916b07e8be 201
fruediger 0:95916b07e8be 202 bool MPU6050::getGyroRange(GyroRange *gyroRange, float timeout_secs)
fruediger 0:95916b07e8be 203 {
fruediger 0:95916b07e8be 204 uint8_t tmp;
fruediger 0:95916b07e8be 205 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 206 {
fruediger 0:95916b07e8be 207 gyroRange[0] = static_cast<GyroRange>(tmp & GYRO_RANGE_MASK);
fruediger 0:95916b07e8be 208 return true;
fruediger 0:95916b07e8be 209 }
fruediger 0:95916b07e8be 210
fruediger 0:95916b07e8be 211 return false;
fruediger 0:95916b07e8be 212 }
fruediger 0:95916b07e8be 213
fruediger 0:95916b07e8be 214 bool MPU6050::setGyroRange(GyroRange gyroRange, float timeout_secs)
fruediger 0:95916b07e8be 215 {
fruediger 0:95916b07e8be 216 uint8_t tmp;
fruediger 0:95916b07e8be 217 return (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs)) && (this->write(REG_GYRO_CONFIG, (tmp & (~GYRO_RANGE_MASK)) | gyroRange, timeout_secs));
fruediger 0:95916b07e8be 218 }
fruediger 0:95916b07e8be 219
fruediger 0:95916b07e8be 220 /**
fruediger 0:95916b07e8be 221 * REG_ACCEL_CONFIG register
fruediger 0:95916b07e8be 222 */
fruediger 0:95916b07e8be 223
fruediger 0:95916b07e8be 224 bool MPU6050::getAccelXSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 225 {
fruediger 0:95916b07e8be 226 uint8_t tmp;
fruediger 0:95916b07e8be 227 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 228 {
fruediger 0:95916b07e8be 229 enabled[0] = ((tmp & ACCEL_X_ST_MASK) != 0);
fruediger 0:95916b07e8be 230 return true;
fruediger 0:95916b07e8be 231 }
fruediger 0:95916b07e8be 232
fruediger 0:95916b07e8be 233 return false;
fruediger 0:95916b07e8be 234 }
fruediger 0:95916b07e8be 235
fruediger 0:95916b07e8be 236 bool MPU6050::setAccelXSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 237 {
fruediger 0:95916b07e8be 238 uint8_t tmp;
fruediger 0:95916b07e8be 239 if (this->read(REG_ACCEL_CONFIG, &tmp))
fruediger 0:95916b07e8be 240 {
fruediger 0:95916b07e8be 241 tmp &= ~(ACCEL_X_ST_MASK);
fruediger 0:95916b07e8be 242 return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_X_ST_MASK) : tmp);
fruediger 0:95916b07e8be 243 }
fruediger 0:95916b07e8be 244 return false;
fruediger 0:95916b07e8be 245 }
fruediger 0:95916b07e8be 246
fruediger 0:95916b07e8be 247 bool MPU6050::getAccelYSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 248 {
fruediger 0:95916b07e8be 249 uint8_t tmp;
fruediger 0:95916b07e8be 250 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 251 {
fruediger 0:95916b07e8be 252 enabled[0] = ((tmp & ACCEL_Y_ST_MASK) != 0);
fruediger 0:95916b07e8be 253 return true;
fruediger 0:95916b07e8be 254 }
fruediger 0:95916b07e8be 255
fruediger 0:95916b07e8be 256 return false;
fruediger 0:95916b07e8be 257 }
fruediger 0:95916b07e8be 258
fruediger 0:95916b07e8be 259 bool MPU6050::setAccelYSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 260 {
fruediger 0:95916b07e8be 261 uint8_t tmp;
fruediger 0:95916b07e8be 262 if (this->read(REG_ACCEL_CONFIG, &tmp))
fruediger 0:95916b07e8be 263 {
fruediger 0:95916b07e8be 264 tmp &= ~(ACCEL_Y_ST_MASK);
fruediger 0:95916b07e8be 265 return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_Y_ST_MASK) : tmp);
fruediger 0:95916b07e8be 266 }
fruediger 0:95916b07e8be 267 return false;
fruediger 0:95916b07e8be 268 }
fruediger 0:95916b07e8be 269
fruediger 0:95916b07e8be 270 bool MPU6050::getAccelZSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 271 {
fruediger 0:95916b07e8be 272 uint8_t tmp;
fruediger 0:95916b07e8be 273 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 274 {
fruediger 0:95916b07e8be 275 enabled[0] = ((tmp & ACCEL_Z_ST_MASK) != 0);
fruediger 0:95916b07e8be 276 return true;
fruediger 0:95916b07e8be 277 }
fruediger 0:95916b07e8be 278
fruediger 0:95916b07e8be 279 return false;
fruediger 0:95916b07e8be 280 }
fruediger 0:95916b07e8be 281
fruediger 0:95916b07e8be 282 bool MPU6050::setAccelZSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 283 {
fruediger 0:95916b07e8be 284 uint8_t tmp;
fruediger 0:95916b07e8be 285 if (this->read(REG_ACCEL_CONFIG, &tmp))
fruediger 0:95916b07e8be 286 {
fruediger 0:95916b07e8be 287 tmp &= ~(ACCEL_Z_ST_MASK);
fruediger 0:95916b07e8be 288 return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_Z_ST_MASK) : tmp);
fruediger 0:95916b07e8be 289 }
fruediger 0:95916b07e8be 290 return false;
fruediger 0:95916b07e8be 291 }
fruediger 0:95916b07e8be 292
fruediger 0:95916b07e8be 293 bool MPU6050::getAccelHPFCutOff(AccelHPFCutOff *frequency, float timeout_secs)
fruediger 0:95916b07e8be 294 {
fruediger 0:95916b07e8be 295 uint8_t tmp;
fruediger 0:95916b07e8be 296 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 297 {
fruediger 0:95916b07e8be 298 frequency[0] = static_cast<AccelHPFCutOff>(tmp & ACCEL_HPF_MASK);
fruediger 0:95916b07e8be 299 return true;
fruediger 0:95916b07e8be 300 }
fruediger 0:95916b07e8be 301
fruediger 0:95916b07e8be 302 return false;
fruediger 0:95916b07e8be 303 }
fruediger 0:95916b07e8be 304
fruediger 0:95916b07e8be 305 bool MPU6050::setAccelHPFCutOff(AccelHPFCutOff frequency, float timeout_secs)
fruediger 0:95916b07e8be 306 {
fruediger 0:95916b07e8be 307 uint8_t tmp;
fruediger 0:95916b07e8be 308 return (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) && (this->write(REG_ACCEL_CONFIG, (tmp & (~ACCEL_HPF_MASK)) | frequency, timeout_secs));
fruediger 0:95916b07e8be 309 }
fruediger 0:95916b07e8be 310
fruediger 0:95916b07e8be 311 bool MPU6050::getAccelRange(AccelRange *accelRange, float timeout_secs)
fruediger 0:95916b07e8be 312 {
fruediger 0:95916b07e8be 313 uint8_t tmp;
fruediger 0:95916b07e8be 314 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 315 {
fruediger 0:95916b07e8be 316 accelRange[0] = static_cast<AccelRange>(tmp & ACCEL_RANGE_MASK);
fruediger 0:95916b07e8be 317 return true;
fruediger 0:95916b07e8be 318 }
fruediger 0:95916b07e8be 319
fruediger 0:95916b07e8be 320 return false;
fruediger 0:95916b07e8be 321 }
fruediger 0:95916b07e8be 322
fruediger 0:95916b07e8be 323 bool MPU6050::setAccelRange(AccelRange accelRange, float timeout_secs)
fruediger 0:95916b07e8be 324 {
fruediger 0:95916b07e8be 325 uint8_t tmp;
fruediger 0:95916b07e8be 326 return (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) && (this->write(REG_ACCEL_CONFIG, (tmp & (~ACCEL_RANGE_MASK)) | accelRange, timeout_secs));
fruediger 0:95916b07e8be 327 }
fruediger 0:95916b07e8be 328
fruediger 0:95916b07e8be 329 /**
fruediger 0:95916b07e8be 330 * REG_FF_THR register
fruediger 0:95916b07e8be 331 */
fruediger 0:95916b07e8be 332
fruediger 0:95916b07e8be 333 bool MPU6050::getFreefallDetectionThreshold(uint8_t *threshold, float timeout_secs)
fruediger 0:95916b07e8be 334 {
fruediger 0:95916b07e8be 335 return this->read(REG_FF_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 336 }
fruediger 0:95916b07e8be 337
fruediger 0:95916b07e8be 338 bool MPU6050::setFreefallDetectionThreshold(uint8_t threshold, float timeout_secs)
fruediger 0:95916b07e8be 339 {
fruediger 0:95916b07e8be 340 return this->write(REG_FF_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 341 }
fruediger 0:95916b07e8be 342
fruediger 0:95916b07e8be 343 /**
fruediger 0:95916b07e8be 344 * REG_FF_DUR register
fruediger 0:95916b07e8be 345 */
fruediger 0:95916b07e8be 346
fruediger 0:95916b07e8be 347 bool MPU6050::getFreefallDetectionDuration(uint8_t *duration, float timeout_secs)
fruediger 0:95916b07e8be 348 {
fruediger 0:95916b07e8be 349 return this->read(REG_FF_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 350 }
fruediger 0:95916b07e8be 351
fruediger 0:95916b07e8be 352 bool MPU6050::setFreefallDetectionDuration(uint8_t duration, float timeout_secs)
fruediger 0:95916b07e8be 353 {
fruediger 0:95916b07e8be 354 return this->write(REG_FF_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 355 }
fruediger 0:95916b07e8be 356
fruediger 0:95916b07e8be 357 /**
fruediger 0:95916b07e8be 358 * REG_MOT_THR register
fruediger 0:95916b07e8be 359 */
fruediger 0:95916b07e8be 360
fruediger 0:95916b07e8be 361 bool MPU6050::getMotionDetectionThreshold(uint8_t *threshold, float timeout_secs)
fruediger 0:95916b07e8be 362 {
fruediger 0:95916b07e8be 363 return this->read(REG_MOT_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 364 }
fruediger 0:95916b07e8be 365
fruediger 0:95916b07e8be 366 bool MPU6050::setMotionDetectionThreshold(uint8_t threshold, float timeout_secs)
fruediger 0:95916b07e8be 367 {
fruediger 0:95916b07e8be 368 return this->write(REG_MOT_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 369 }
fruediger 0:95916b07e8be 370
fruediger 0:95916b07e8be 371 /**
fruediger 0:95916b07e8be 372 * REG_MOT_DUR register
fruediger 0:95916b07e8be 373 */
fruediger 0:95916b07e8be 374
fruediger 0:95916b07e8be 375 bool MPU6050::getMotionDetectionDuration(uint8_t *duration, float timeout_secs)
fruediger 0:95916b07e8be 376 {
fruediger 0:95916b07e8be 377 return this->read(REG_MOT_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 378 }
fruediger 0:95916b07e8be 379
fruediger 0:95916b07e8be 380 bool MPU6050::setMotionDetectionDuration(uint8_t duration, float timeout_secs)
fruediger 0:95916b07e8be 381 {
fruediger 0:95916b07e8be 382 return this->write(REG_MOT_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 383 }
fruediger 0:95916b07e8be 384
fruediger 0:95916b07e8be 385 /**
fruediger 0:95916b07e8be 386 * REG_ZRMOT_THR register
fruediger 0:95916b07e8be 387 */
fruediger 0:95916b07e8be 388
fruediger 0:95916b07e8be 389 bool MPU6050::getZeroMotionDetectionThreshold(uint8_t *threshold, float timeout_secs)
fruediger 0:95916b07e8be 390 {
fruediger 0:95916b07e8be 391 return this->read(REG_ZRMOT_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 392 }
fruediger 0:95916b07e8be 393
fruediger 0:95916b07e8be 394 bool MPU6050::setZeroMotionDetectionThreshold(uint8_t threshold, float timeout_secs)
fruediger 0:95916b07e8be 395 {
fruediger 0:95916b07e8be 396 return this->write(REG_ZRMOT_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 397 }
fruediger 0:95916b07e8be 398
fruediger 0:95916b07e8be 399 /**
fruediger 0:95916b07e8be 400 * REG_ZRMOT_DUR register
fruediger 0:95916b07e8be 401 */
fruediger 0:95916b07e8be 402
fruediger 0:95916b07e8be 403 bool MPU6050::getZeroMotionDetectionDuration(uint8_t *duration, float timeout_secs)
fruediger 0:95916b07e8be 404 {
fruediger 0:95916b07e8be 405 return this->read(REG_ZRMOT_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 406 }
fruediger 0:95916b07e8be 407
fruediger 0:95916b07e8be 408 bool MPU6050::setZeroMotionDetectionDuration(uint8_t duration, float timeout_secs)
fruediger 0:95916b07e8be 409 {
fruediger 0:95916b07e8be 410 return this->write(REG_ZRMOT_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 411 }
fruediger 0:95916b07e8be 412
fruediger 0:95916b07e8be 413 /**
fruediger 0:95916b07e8be 414 * REG_FIFO_EN register
fruediger 0:95916b07e8be 415 */
fruediger 0:95916b07e8be 416
fruediger 0:95916b07e8be 417 bool MPU6050::getTempFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 418 {
fruediger 0:95916b07e8be 419 uint8_t tmp;
fruediger 0:95916b07e8be 420 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 421 {
fruediger 0:95916b07e8be 422 enabled[0] = ((tmp & TEMP_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 423 return true;
fruediger 0:95916b07e8be 424 }
fruediger 0:95916b07e8be 425
fruediger 0:95916b07e8be 426 return false;
fruediger 0:95916b07e8be 427 }
fruediger 0:95916b07e8be 428
fruediger 0:95916b07e8be 429 bool MPU6050::setTempFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 430 {
fruediger 0:95916b07e8be 431 uint8_t tmp;
fruediger 0:95916b07e8be 432 if (this->read(REG_FIFO_EN, &tmp))
fruediger 0:95916b07e8be 433 {
fruediger 0:95916b07e8be 434 tmp &= ~(TEMP_FIFO_EN_MASK);
fruediger 0:95916b07e8be 435 return this->write(REG_FIFO_EN, enabled ? (tmp | TEMP_FIFO_EN_MASK) : tmp);
fruediger 0:95916b07e8be 436 }
fruediger 0:95916b07e8be 437 return false;
fruediger 0:95916b07e8be 438 }
fruediger 0:95916b07e8be 439
fruediger 0:95916b07e8be 440 bool MPU6050::getGyroXFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 441 {
fruediger 0:95916b07e8be 442 uint8_t tmp;
fruediger 0:95916b07e8be 443 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 444 {
fruediger 0:95916b07e8be 445 enabled[0] = ((tmp & GYRO_X_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 446 return true;
fruediger 0:95916b07e8be 447 }
fruediger 0:95916b07e8be 448
fruediger 0:95916b07e8be 449 return false;
fruediger 0:95916b07e8be 450 }
fruediger 0:95916b07e8be 451
fruediger 0:95916b07e8be 452 bool MPU6050::setGyroXFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 453 {
fruediger 0:95916b07e8be 454 uint8_t tmp;
fruediger 0:95916b07e8be 455 if (this->read(REG_FIFO_EN, &tmp))
fruediger 0:95916b07e8be 456 {
fruediger 0:95916b07e8be 457 tmp &= ~(GYRO_X_FIFO_EN_MASK);
fruediger 0:95916b07e8be 458 return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_X_FIFO_EN_MASK) : tmp);
fruediger 0:95916b07e8be 459 }
fruediger 0:95916b07e8be 460 return false;
fruediger 0:95916b07e8be 461 }
fruediger 0:95916b07e8be 462
fruediger 0:95916b07e8be 463 bool MPU6050::getGyroYFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 464 {
fruediger 0:95916b07e8be 465 uint8_t tmp;
fruediger 0:95916b07e8be 466 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 467 {
fruediger 0:95916b07e8be 468 enabled[0] = ((tmp & GYRO_Y_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 469 return true;
fruediger 0:95916b07e8be 470 }
fruediger 0:95916b07e8be 471
fruediger 0:95916b07e8be 472 return false;
fruediger 0:95916b07e8be 473 }
fruediger 0:95916b07e8be 474
fruediger 0:95916b07e8be 475 bool MPU6050::setGyroYFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 476 {
fruediger 0:95916b07e8be 477 uint8_t tmp;
fruediger 0:95916b07e8be 478 if (this->read(REG_FIFO_EN, &tmp))
fruediger 0:95916b07e8be 479 {
fruediger 0:95916b07e8be 480 tmp &= ~(GYRO_Y_FIFO_EN_MASK);
fruediger 0:95916b07e8be 481 return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_Y_FIFO_EN_MASK) : tmp);
fruediger 0:95916b07e8be 482 }
fruediger 0:95916b07e8be 483 return false;
fruediger 0:95916b07e8be 484 }
fruediger 0:95916b07e8be 485
fruediger 0:95916b07e8be 486 bool MPU6050::getGyroZFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 487 {
fruediger 0:95916b07e8be 488 uint8_t tmp;
fruediger 0:95916b07e8be 489 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 490 {
fruediger 0:95916b07e8be 491 enabled[0] = ((tmp & GYRO_Z_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 492 return true;
fruediger 0:95916b07e8be 493 }
fruediger 0:95916b07e8be 494
fruediger 0:95916b07e8be 495 return false;
fruediger 0:95916b07e8be 496 }
fruediger 0:95916b07e8be 497
fruediger 0:95916b07e8be 498 bool MPU6050::setGyroZFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 499 {
fruediger 0:95916b07e8be 500 uint8_t tmp;
fruediger 0:95916b07e8be 501 if (this->read(REG_FIFO_EN, &tmp))
fruediger 0:95916b07e8be 502 {
fruediger 0:95916b07e8be 503 tmp &= ~(GYRO_Z_FIFO_EN_MASK);
fruediger 0:95916b07e8be 504 return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_Z_FIFO_EN_MASK) : tmp);
fruediger 0:95916b07e8be 505 }
fruediger 0:95916b07e8be 506 return false;
fruediger 0:95916b07e8be 507 }
fruediger 0:95916b07e8be 508
fruediger 0:95916b07e8be 509 bool MPU6050::getAccelFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 510 {
fruediger 0:95916b07e8be 511 uint8_t tmp;
fruediger 0:95916b07e8be 512 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 513 {
fruediger 0:95916b07e8be 514 enabled[0] = ((tmp & ACCEL_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 515 return true;
fruediger 0:95916b07e8be 516 }
fruediger 0:95916b07e8be 517
fruediger 0:95916b07e8be 518 return false;
fruediger 0:95916b07e8be 519 }
fruediger 0:95916b07e8be 520
fruediger 0:95916b07e8be 521 bool MPU6050::setAccelFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 522 {
fruediger 0:95916b07e8be 523 uint8_t tmp;
fruediger 0:95916b07e8be 524 if (this->read(REG_FIFO_EN, &tmp))
fruediger 0:95916b07e8be 525 {
fruediger 0:95916b07e8be 526 tmp &= ~(ACCEL_FIFO_EN_MASK);
fruediger 0:95916b07e8be 527 return this->write(REG_FIFO_EN, enabled ? (tmp | ACCEL_FIFO_EN_MASK) : tmp);
fruediger 0:95916b07e8be 528 }
fruediger 0:95916b07e8be 529 return false;
fruediger 0:95916b07e8be 530 }