Felix Rüdiger / MPU6050_lib

Dependents:   BLE_Nano_MPU6050Service

Committer:
fruediger
Date:
Wed Jul 22 16:02:20 2015 +0000
Revision:
5:5739a7a6d0e9
Parent:
4:5a52b575fbc6
Child:
6:73c2cfe26ed8
no idea what was changed, sry :/

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 bool MPU6050::read(Register reg, uint8_t *data, size_t length, float timeout_secs)
fruediger 0:95916b07e8be 4 {
fruediger 0:95916b07e8be 5 float t = 0.0f;
fruediger 0:95916b07e8be 6
fruediger 0:95916b07e8be 7 uint8_t tmp = reg;
fruediger 0:95916b07e8be 8
fruediger 0:95916b07e8be 9 while (!(i2c.write(baseAddress, (char*)&tmp, 1, true) == 0))
fruediger 0:95916b07e8be 10 if ((t += retryDelay_secs) > timeout_secs)
fruediger 0:95916b07e8be 11 return false;
fruediger 0:95916b07e8be 12 else
fruediger 0:95916b07e8be 13 wait(retryDelay_secs);
fruediger 0:95916b07e8be 14
fruediger 0:95916b07e8be 15 while (!(i2c.read(baseAddress, (char*)data, length) == 0))
fruediger 0:95916b07e8be 16 if ((t += retryDelay_secs) > timeout_secs)
fruediger 0:95916b07e8be 17 return false;
fruediger 0:95916b07e8be 18 else
fruediger 0:95916b07e8be 19 wait(retryDelay_secs);
fruediger 0:95916b07e8be 20
fruediger 0:95916b07e8be 21 return true;
fruediger 0:95916b07e8be 22 }
fruediger 0:95916b07e8be 23
fruediger 1:96a227d1ca7e 24 inline bool MPU6050::read(Register reg, uint8_t *data, float timeout_secs)
fruediger 0:95916b07e8be 25 {
fruediger 0:95916b07e8be 26 return this->read(reg, data, 1, timeout_secs);
fruediger 0:95916b07e8be 27 }
fruediger 0:95916b07e8be 28
fruediger 0:95916b07e8be 29 bool MPU6050::write(Register reg, uint8_t *data, size_t length, float timeout_secs)
fruediger 0:95916b07e8be 30 {
fruediger 0:95916b07e8be 31 uint8_t tmp[length + 1];
fruediger 0:95916b07e8be 32 tmp[0] = reg;
fruediger 0:95916b07e8be 33 memcpy(&tmp[1], data, length);
fruediger 0:95916b07e8be 34
fruediger 0:95916b07e8be 35 for (float t = 0.0f; !(i2c.write(baseAddress, (char*)&tmp[0], length + 1) == 0);)
fruediger 0:95916b07e8be 36 if ((t += retryDelay_secs) > timeout_secs)
fruediger 0:95916b07e8be 37 return false;
fruediger 0:95916b07e8be 38 else
fruediger 0:95916b07e8be 39 wait(retryDelay_secs);
fruediger 0:95916b07e8be 40
fruediger 0:95916b07e8be 41 return true;
fruediger 0:95916b07e8be 42 }
fruediger 0:95916b07e8be 43
fruediger 1:96a227d1ca7e 44 inline bool MPU6050::write(Register reg, uint8_t data, float timeout_secs)
fruediger 0:95916b07e8be 45 {
fruediger 0:95916b07e8be 46 return this->write(reg, &data, 1, timeout_secs);
fruediger 0:95916b07e8be 47 }
fruediger 0:95916b07e8be 48
fruediger 0:95916b07e8be 49 bool MPU6050::getAuxVDDIOLevel(AuxVDDIOLevel *level, float timeout_secs)
fruediger 0:95916b07e8be 50 {
fruediger 0:95916b07e8be 51 uint8_t tmp;
fruediger 0:95916b07e8be 52 if (this->read(REG_AUX_VDDIO, &tmp, timeout_secs))
fruediger 0:95916b07e8be 53 {
fruediger 1:96a227d1ca7e 54 *level = static_cast<AuxVDDIOLevel>(tmp & AUX_VDDIO_MASK);
fruediger 0:95916b07e8be 55 return true;
fruediger 0:95916b07e8be 56 }
fruediger 0:95916b07e8be 57
fruediger 0:95916b07e8be 58 return false;
fruediger 0:95916b07e8be 59 }
fruediger 0:95916b07e8be 60
fruediger 0:95916b07e8be 61 bool MPU6050::setAuxVDDIOLevel(AuxVDDIOLevel level, float timeout_secs)
fruediger 0:95916b07e8be 62 {
fruediger 0:95916b07e8be 63 uint8_t tmp;
fruediger 0:95916b07e8be 64 return (this->read(REG_AUX_VDDIO, &tmp, timeout_secs)) && (this->write(REG_AUX_VDDIO, (tmp & (~AUX_VDDIO_MASK)) | level, timeout_secs));
fruediger 0:95916b07e8be 65 }
fruediger 0:95916b07e8be 66
fruediger 0:95916b07e8be 67 bool MPU6050::getGyroSampleRateDivider(uint8_t *rateDivider, float timeout_secs)
fruediger 0:95916b07e8be 68 {
fruediger 0:95916b07e8be 69 return this->read(REG_SMPLRT_DIV, rateDivider, timeout_secs);
fruediger 0:95916b07e8be 70 }
fruediger 0:95916b07e8be 71
fruediger 0:95916b07e8be 72 bool MPU6050::setGyroSampleRateDivider(uint8_t rateDivider, float timeout_secs)
fruediger 0:95916b07e8be 73 {
fruediger 0:95916b07e8be 74 return this->write(REG_SMPLRT_DIV, rateDivider, timeout_secs);
fruediger 0:95916b07e8be 75 }
fruediger 0:95916b07e8be 76
fruediger 0:95916b07e8be 77 bool MPU6050::getExternalFrameSync(ExtFrameSync *frameSync, float timeout_secs)
fruediger 0:95916b07e8be 78 {
fruediger 0:95916b07e8be 79 uint8_t tmp;
fruediger 0:95916b07e8be 80 if (this->read(REG_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 81 {
fruediger 1:96a227d1ca7e 82 *frameSync = static_cast<ExtFrameSync>(tmp & EXT_SYNC_MASK);
fruediger 0:95916b07e8be 83 return true;
fruediger 0:95916b07e8be 84 }
fruediger 0:95916b07e8be 85
fruediger 0:95916b07e8be 86 return false;
fruediger 0:95916b07e8be 87 }
fruediger 0:95916b07e8be 88
fruediger 0:95916b07e8be 89 bool MPU6050::setExternalFrameSync(ExtFrameSync frameSync, float timeout_secs)
fruediger 0:95916b07e8be 90 {
fruediger 0:95916b07e8be 91 uint8_t tmp;
fruediger 0:95916b07e8be 92 return (this->read(REG_CONFIG, &tmp, timeout_secs)) && (this->write(REG_CONFIG, (tmp & (~EXT_SYNC_MASK)) | frameSync, timeout_secs));
fruediger 0:95916b07e8be 93 }
fruediger 0:95916b07e8be 94
fruediger 0:95916b07e8be 95 bool MPU6050::getDLPFBandwidth(DLPFBandwidth *bandwith, float timeout_secs)
fruediger 0:95916b07e8be 96 {
fruediger 0:95916b07e8be 97 uint8_t tmp;
fruediger 0:95916b07e8be 98 if (this->read(REG_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 99 {
fruediger 1:96a227d1ca7e 100 *bandwith = static_cast<DLPFBandwidth>(tmp & DLPF_MASK);
fruediger 0:95916b07e8be 101 return true;
fruediger 0:95916b07e8be 102 }
fruediger 0:95916b07e8be 103
fruediger 0:95916b07e8be 104 return false;
fruediger 0:95916b07e8be 105 }
fruediger 0:95916b07e8be 106
fruediger 0:95916b07e8be 107 bool MPU6050::setDLPFBandwidth(DLPFBandwidth bandwith, float timeout_secs)
fruediger 0:95916b07e8be 108 {
fruediger 0:95916b07e8be 109 uint8_t tmp;
fruediger 0:95916b07e8be 110 return (this->read(REG_CONFIG, &tmp, timeout_secs)) && (this->write(REG_CONFIG, (tmp & (~DLPF_MASK)) | bandwith, timeout_secs));
fruediger 0:95916b07e8be 111 }
fruediger 0:95916b07e8be 112
fruediger 0:95916b07e8be 113 bool MPU6050::getGyroXSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 114 {
fruediger 0:95916b07e8be 115 uint8_t tmp;
fruediger 0:95916b07e8be 116 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 117 {
fruediger 1:96a227d1ca7e 118 *enabled = ((tmp & GYRO_X_ST_MASK) != 0);
fruediger 0:95916b07e8be 119 return true;
fruediger 0:95916b07e8be 120 }
fruediger 0:95916b07e8be 121
fruediger 0:95916b07e8be 122 return false;
fruediger 0:95916b07e8be 123 }
fruediger 0:95916b07e8be 124
fruediger 0:95916b07e8be 125 bool MPU6050::setGyroXSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 126 {
fruediger 0:95916b07e8be 127 uint8_t tmp;
fruediger 2:32b13cc64cb0 128 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 129 {
fruediger 0:95916b07e8be 130 tmp &= ~(GYRO_X_ST_MASK);
fruediger 2:32b13cc64cb0 131 return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_X_ST_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 132 }
fruediger 0:95916b07e8be 133 return false;
fruediger 0:95916b07e8be 134 }
fruediger 0:95916b07e8be 135
fruediger 0:95916b07e8be 136 bool MPU6050::getGyroYSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 137 {
fruediger 0:95916b07e8be 138 uint8_t tmp;
fruediger 0:95916b07e8be 139 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 140 {
fruediger 1:96a227d1ca7e 141 *enabled = ((tmp & GYRO_Y_ST_MASK) != 0);
fruediger 0:95916b07e8be 142 return true;
fruediger 0:95916b07e8be 143 }
fruediger 0:95916b07e8be 144
fruediger 0:95916b07e8be 145 return false;
fruediger 0:95916b07e8be 146 }
fruediger 0:95916b07e8be 147
fruediger 0:95916b07e8be 148 bool MPU6050::setGyroYSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 149 {
fruediger 0:95916b07e8be 150 uint8_t tmp;
fruediger 2:32b13cc64cb0 151 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 152 {
fruediger 0:95916b07e8be 153 tmp &= ~(GYRO_Y_ST_MASK);
fruediger 2:32b13cc64cb0 154 return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_Y_ST_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 155 }
fruediger 0:95916b07e8be 156 return false;
fruediger 0:95916b07e8be 157 }
fruediger 0:95916b07e8be 158
fruediger 0:95916b07e8be 159 bool MPU6050::getGyroZSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 160 {
fruediger 0:95916b07e8be 161 uint8_t tmp;
fruediger 0:95916b07e8be 162 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 163 {
fruediger 1:96a227d1ca7e 164 *enabled = ((tmp & GYRO_Z_ST_MASK) != 0);
fruediger 0:95916b07e8be 165 return true;
fruediger 0:95916b07e8be 166 }
fruediger 0:95916b07e8be 167
fruediger 0:95916b07e8be 168 return false;
fruediger 0:95916b07e8be 169 }
fruediger 0:95916b07e8be 170
fruediger 0:95916b07e8be 171 bool MPU6050::setGyroZSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 172 {
fruediger 0:95916b07e8be 173 uint8_t tmp;
fruediger 2:32b13cc64cb0 174 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 175 {
fruediger 0:95916b07e8be 176 tmp &= ~(GYRO_Z_ST_MASK);
fruediger 2:32b13cc64cb0 177 return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_Z_ST_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 178 }
fruediger 0:95916b07e8be 179 return false;
fruediger 0:95916b07e8be 180 }
fruediger 0:95916b07e8be 181
fruediger 0:95916b07e8be 182 bool MPU6050::getGyroRange(GyroRange *gyroRange, float timeout_secs)
fruediger 0:95916b07e8be 183 {
fruediger 0:95916b07e8be 184 uint8_t tmp;
fruediger 0:95916b07e8be 185 if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 186 {
fruediger 1:96a227d1ca7e 187 *gyroRange = static_cast<GyroRange>(tmp & GYRO_RANGE_MASK);
fruediger 0:95916b07e8be 188 return true;
fruediger 0:95916b07e8be 189 }
fruediger 0:95916b07e8be 190
fruediger 0:95916b07e8be 191 return false;
fruediger 0:95916b07e8be 192 }
fruediger 0:95916b07e8be 193
fruediger 0:95916b07e8be 194 bool MPU6050::setGyroRange(GyroRange gyroRange, float timeout_secs)
fruediger 0:95916b07e8be 195 {
fruediger 0:95916b07e8be 196 uint8_t tmp;
fruediger 0:95916b07e8be 197 return (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs)) && (this->write(REG_GYRO_CONFIG, (tmp & (~GYRO_RANGE_MASK)) | gyroRange, timeout_secs));
fruediger 0:95916b07e8be 198 }
fruediger 0:95916b07e8be 199
fruediger 0:95916b07e8be 200 bool MPU6050::getAccelXSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 201 {
fruediger 0:95916b07e8be 202 uint8_t tmp;
fruediger 0:95916b07e8be 203 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 204 {
fruediger 1:96a227d1ca7e 205 *enabled = ((tmp & ACCEL_X_ST_MASK) != 0);
fruediger 0:95916b07e8be 206 return true;
fruediger 0:95916b07e8be 207 }
fruediger 0:95916b07e8be 208
fruediger 0:95916b07e8be 209 return false;
fruediger 0:95916b07e8be 210 }
fruediger 0:95916b07e8be 211
fruediger 0:95916b07e8be 212 bool MPU6050::setAccelXSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 213 {
fruediger 0:95916b07e8be 214 uint8_t tmp;
fruediger 2:32b13cc64cb0 215 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 216 {
fruediger 0:95916b07e8be 217 tmp &= ~(ACCEL_X_ST_MASK);
fruediger 2:32b13cc64cb0 218 return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_X_ST_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 219 }
fruediger 0:95916b07e8be 220 return false;
fruediger 0:95916b07e8be 221 }
fruediger 0:95916b07e8be 222
fruediger 0:95916b07e8be 223 bool MPU6050::getAccelYSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 224 {
fruediger 0:95916b07e8be 225 uint8_t tmp;
fruediger 0:95916b07e8be 226 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 227 {
fruediger 1:96a227d1ca7e 228 *enabled = ((tmp & ACCEL_Y_ST_MASK) != 0);
fruediger 0:95916b07e8be 229 return true;
fruediger 0:95916b07e8be 230 }
fruediger 0:95916b07e8be 231
fruediger 0:95916b07e8be 232 return false;
fruediger 0:95916b07e8be 233 }
fruediger 0:95916b07e8be 234
fruediger 0:95916b07e8be 235 bool MPU6050::setAccelYSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 236 {
fruediger 0:95916b07e8be 237 uint8_t tmp;
fruediger 2:32b13cc64cb0 238 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 239 {
fruediger 0:95916b07e8be 240 tmp &= ~(ACCEL_Y_ST_MASK);
fruediger 2:32b13cc64cb0 241 return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_Y_ST_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 242 }
fruediger 0:95916b07e8be 243 return false;
fruediger 0:95916b07e8be 244 }
fruediger 0:95916b07e8be 245
fruediger 0:95916b07e8be 246 bool MPU6050::getAccelZSelfTestEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 247 {
fruediger 0:95916b07e8be 248 uint8_t tmp;
fruediger 0:95916b07e8be 249 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 250 {
fruediger 1:96a227d1ca7e 251 *enabled = ((tmp & ACCEL_Z_ST_MASK) != 0);
fruediger 0:95916b07e8be 252 return true;
fruediger 0:95916b07e8be 253 }
fruediger 0:95916b07e8be 254
fruediger 0:95916b07e8be 255 return false;
fruediger 0:95916b07e8be 256 }
fruediger 0:95916b07e8be 257
fruediger 0:95916b07e8be 258 bool MPU6050::setAccelZSelfTestEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 259 {
fruediger 0:95916b07e8be 260 uint8_t tmp;
fruediger 2:32b13cc64cb0 261 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 262 {
fruediger 0:95916b07e8be 263 tmp &= ~(ACCEL_Z_ST_MASK);
fruediger 2:32b13cc64cb0 264 return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_Z_ST_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 265 }
fruediger 0:95916b07e8be 266 return false;
fruediger 0:95916b07e8be 267 }
fruediger 0:95916b07e8be 268
fruediger 0:95916b07e8be 269 bool MPU6050::getAccelHPFCutOff(AccelHPFCutOff *frequency, float timeout_secs)
fruediger 0:95916b07e8be 270 {
fruediger 0:95916b07e8be 271 uint8_t tmp;
fruediger 0:95916b07e8be 272 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 273 {
fruediger 1:96a227d1ca7e 274 *frequency = static_cast<AccelHPFCutOff>(tmp & ACCEL_HPF_MASK);
fruediger 0:95916b07e8be 275 return true;
fruediger 0:95916b07e8be 276 }
fruediger 0:95916b07e8be 277
fruediger 0:95916b07e8be 278 return false;
fruediger 0:95916b07e8be 279 }
fruediger 0:95916b07e8be 280
fruediger 0:95916b07e8be 281 bool MPU6050::setAccelHPFCutOff(AccelHPFCutOff frequency, float timeout_secs)
fruediger 0:95916b07e8be 282 {
fruediger 0:95916b07e8be 283 uint8_t tmp;
fruediger 0:95916b07e8be 284 return (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) && (this->write(REG_ACCEL_CONFIG, (tmp & (~ACCEL_HPF_MASK)) | frequency, timeout_secs));
fruediger 0:95916b07e8be 285 }
fruediger 0:95916b07e8be 286
fruediger 0:95916b07e8be 287 bool MPU6050::getAccelRange(AccelRange *accelRange, float timeout_secs)
fruediger 0:95916b07e8be 288 {
fruediger 0:95916b07e8be 289 uint8_t tmp;
fruediger 0:95916b07e8be 290 if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs))
fruediger 0:95916b07e8be 291 {
fruediger 1:96a227d1ca7e 292 *accelRange = static_cast<AccelRange>(tmp & ACCEL_RANGE_MASK);
fruediger 0:95916b07e8be 293 return true;
fruediger 0:95916b07e8be 294 }
fruediger 0:95916b07e8be 295
fruediger 0:95916b07e8be 296 return false;
fruediger 0:95916b07e8be 297 }
fruediger 0:95916b07e8be 298
fruediger 0:95916b07e8be 299 bool MPU6050::setAccelRange(AccelRange accelRange, float timeout_secs)
fruediger 0:95916b07e8be 300 {
fruediger 0:95916b07e8be 301 uint8_t tmp;
fruediger 0:95916b07e8be 302 return (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) && (this->write(REG_ACCEL_CONFIG, (tmp & (~ACCEL_RANGE_MASK)) | accelRange, timeout_secs));
fruediger 0:95916b07e8be 303 }
fruediger 0:95916b07e8be 304
fruediger 0:95916b07e8be 305 bool MPU6050::getFreefallDetectionThreshold(uint8_t *threshold, float timeout_secs)
fruediger 0:95916b07e8be 306 {
fruediger 0:95916b07e8be 307 return this->read(REG_FF_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 308 }
fruediger 0:95916b07e8be 309
fruediger 0:95916b07e8be 310 bool MPU6050::setFreefallDetectionThreshold(uint8_t threshold, float timeout_secs)
fruediger 0:95916b07e8be 311 {
fruediger 0:95916b07e8be 312 return this->write(REG_FF_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 313 }
fruediger 0:95916b07e8be 314
fruediger 0:95916b07e8be 315 bool MPU6050::getFreefallDetectionDuration(uint8_t *duration, float timeout_secs)
fruediger 0:95916b07e8be 316 {
fruediger 0:95916b07e8be 317 return this->read(REG_FF_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 318 }
fruediger 0:95916b07e8be 319
fruediger 0:95916b07e8be 320 bool MPU6050::setFreefallDetectionDuration(uint8_t duration, float timeout_secs)
fruediger 0:95916b07e8be 321 {
fruediger 0:95916b07e8be 322 return this->write(REG_FF_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 323 }
fruediger 0:95916b07e8be 324
fruediger 0:95916b07e8be 325 bool MPU6050::getMotionDetectionThreshold(uint8_t *threshold, float timeout_secs)
fruediger 0:95916b07e8be 326 {
fruediger 0:95916b07e8be 327 return this->read(REG_MOT_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 328 }
fruediger 0:95916b07e8be 329
fruediger 0:95916b07e8be 330 bool MPU6050::setMotionDetectionThreshold(uint8_t threshold, float timeout_secs)
fruediger 0:95916b07e8be 331 {
fruediger 0:95916b07e8be 332 return this->write(REG_MOT_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 333 }
fruediger 0:95916b07e8be 334
fruediger 0:95916b07e8be 335 bool MPU6050::getMotionDetectionDuration(uint8_t *duration, float timeout_secs)
fruediger 0:95916b07e8be 336 {
fruediger 0:95916b07e8be 337 return this->read(REG_MOT_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 338 }
fruediger 0:95916b07e8be 339
fruediger 0:95916b07e8be 340 bool MPU6050::setMotionDetectionDuration(uint8_t duration, float timeout_secs)
fruediger 0:95916b07e8be 341 {
fruediger 0:95916b07e8be 342 return this->write(REG_MOT_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 343 }
fruediger 0:95916b07e8be 344
fruediger 0:95916b07e8be 345 bool MPU6050::getZeroMotionDetectionThreshold(uint8_t *threshold, float timeout_secs)
fruediger 0:95916b07e8be 346 {
fruediger 0:95916b07e8be 347 return this->read(REG_ZRMOT_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 348 }
fruediger 0:95916b07e8be 349
fruediger 0:95916b07e8be 350 bool MPU6050::setZeroMotionDetectionThreshold(uint8_t threshold, float timeout_secs)
fruediger 0:95916b07e8be 351 {
fruediger 0:95916b07e8be 352 return this->write(REG_ZRMOT_THR, threshold, timeout_secs);
fruediger 0:95916b07e8be 353 }
fruediger 0:95916b07e8be 354
fruediger 0:95916b07e8be 355 bool MPU6050::getZeroMotionDetectionDuration(uint8_t *duration, float timeout_secs)
fruediger 0:95916b07e8be 356 {
fruediger 0:95916b07e8be 357 return this->read(REG_ZRMOT_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 358 }
fruediger 0:95916b07e8be 359
fruediger 0:95916b07e8be 360 bool MPU6050::setZeroMotionDetectionDuration(uint8_t duration, float timeout_secs)
fruediger 0:95916b07e8be 361 {
fruediger 0:95916b07e8be 362 return this->write(REG_ZRMOT_DUR, duration, timeout_secs);
fruediger 0:95916b07e8be 363 }
fruediger 0:95916b07e8be 364
fruediger 0:95916b07e8be 365 bool MPU6050::getTempFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 366 {
fruediger 0:95916b07e8be 367 uint8_t tmp;
fruediger 0:95916b07e8be 368 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 369 {
fruediger 1:96a227d1ca7e 370 *enabled = ((tmp & TEMP_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 371 return true;
fruediger 0:95916b07e8be 372 }
fruediger 0:95916b07e8be 373
fruediger 0:95916b07e8be 374 return false;
fruediger 0:95916b07e8be 375 }
fruediger 0:95916b07e8be 376
fruediger 0:95916b07e8be 377 bool MPU6050::setTempFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 378 {
fruediger 0:95916b07e8be 379 uint8_t tmp;
fruediger 2:32b13cc64cb0 380 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 381 {
fruediger 0:95916b07e8be 382 tmp &= ~(TEMP_FIFO_EN_MASK);
fruediger 2:32b13cc64cb0 383 return this->write(REG_FIFO_EN, enabled ? (tmp | TEMP_FIFO_EN_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 384 }
fruediger 0:95916b07e8be 385 return false;
fruediger 0:95916b07e8be 386 }
fruediger 0:95916b07e8be 387
fruediger 0:95916b07e8be 388 bool MPU6050::getGyroXFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 389 {
fruediger 0:95916b07e8be 390 uint8_t tmp;
fruediger 0:95916b07e8be 391 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 392 {
fruediger 1:96a227d1ca7e 393 *enabled = ((tmp & GYRO_X_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 394 return true;
fruediger 0:95916b07e8be 395 }
fruediger 0:95916b07e8be 396
fruediger 0:95916b07e8be 397 return false;
fruediger 0:95916b07e8be 398 }
fruediger 0:95916b07e8be 399
fruediger 0:95916b07e8be 400 bool MPU6050::setGyroXFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 401 {
fruediger 0:95916b07e8be 402 uint8_t tmp;
fruediger 2:32b13cc64cb0 403 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 404 {
fruediger 0:95916b07e8be 405 tmp &= ~(GYRO_X_FIFO_EN_MASK);
fruediger 2:32b13cc64cb0 406 return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_X_FIFO_EN_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 407 }
fruediger 0:95916b07e8be 408 return false;
fruediger 0:95916b07e8be 409 }
fruediger 0:95916b07e8be 410
fruediger 0:95916b07e8be 411 bool MPU6050::getGyroYFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 412 {
fruediger 0:95916b07e8be 413 uint8_t tmp;
fruediger 0:95916b07e8be 414 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 415 {
fruediger 1:96a227d1ca7e 416 *enabled = ((tmp & GYRO_Y_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 417 return true;
fruediger 0:95916b07e8be 418 }
fruediger 0:95916b07e8be 419
fruediger 0:95916b07e8be 420 return false;
fruediger 0:95916b07e8be 421 }
fruediger 0:95916b07e8be 422
fruediger 0:95916b07e8be 423 bool MPU6050::setGyroYFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 424 {
fruediger 0:95916b07e8be 425 uint8_t tmp;
fruediger 2:32b13cc64cb0 426 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 427 {
fruediger 0:95916b07e8be 428 tmp &= ~(GYRO_Y_FIFO_EN_MASK);
fruediger 2:32b13cc64cb0 429 return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_Y_FIFO_EN_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 430 }
fruediger 0:95916b07e8be 431 return false;
fruediger 0:95916b07e8be 432 }
fruediger 0:95916b07e8be 433
fruediger 0:95916b07e8be 434 bool MPU6050::getGyroZFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 435 {
fruediger 0:95916b07e8be 436 uint8_t tmp;
fruediger 0:95916b07e8be 437 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 438 {
fruediger 1:96a227d1ca7e 439 *enabled = ((tmp & GYRO_Z_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 440 return true;
fruediger 0:95916b07e8be 441 }
fruediger 0:95916b07e8be 442
fruediger 0:95916b07e8be 443 return false;
fruediger 0:95916b07e8be 444 }
fruediger 0:95916b07e8be 445
fruediger 0:95916b07e8be 446 bool MPU6050::setGyroZFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 447 {
fruediger 0:95916b07e8be 448 uint8_t tmp;
fruediger 2:32b13cc64cb0 449 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 450 {
fruediger 0:95916b07e8be 451 tmp &= ~(GYRO_Z_FIFO_EN_MASK);
fruediger 2:32b13cc64cb0 452 return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_Z_FIFO_EN_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 453 }
fruediger 0:95916b07e8be 454 return false;
fruediger 0:95916b07e8be 455 }
fruediger 0:95916b07e8be 456
fruediger 0:95916b07e8be 457 bool MPU6050::getAccelFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 0:95916b07e8be 458 {
fruediger 0:95916b07e8be 459 uint8_t tmp;
fruediger 0:95916b07e8be 460 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 461 {
fruediger 1:96a227d1ca7e 462 *enabled = ((tmp & ACCEL_FIFO_EN_MASK) != 0);
fruediger 0:95916b07e8be 463 return true;
fruediger 0:95916b07e8be 464 }
fruediger 0:95916b07e8be 465
fruediger 0:95916b07e8be 466 return false;
fruediger 0:95916b07e8be 467 }
fruediger 0:95916b07e8be 468
fruediger 0:95916b07e8be 469 bool MPU6050::setAccelFIFOEnabled(bool enabled, float timeout_secs)
fruediger 0:95916b07e8be 470 {
fruediger 0:95916b07e8be 471 uint8_t tmp;
fruediger 2:32b13cc64cb0 472 if (this->read(REG_FIFO_EN, &tmp, timeout_secs))
fruediger 0:95916b07e8be 473 {
fruediger 0:95916b07e8be 474 tmp &= ~(ACCEL_FIFO_EN_MASK);
fruediger 2:32b13cc64cb0 475 return this->write(REG_FIFO_EN, enabled ? (tmp | ACCEL_FIFO_EN_MASK) : tmp, timeout_secs);
fruediger 0:95916b07e8be 476 }
fruediger 0:95916b07e8be 477 return false;
fruediger 1:96a227d1ca7e 478 }
fruediger 1:96a227d1ca7e 479
fruediger 1:96a227d1ca7e 480 bool MPU6050::getInterruptLevel(InterruptLevel *level, float timeout_secs)
fruediger 1:96a227d1ca7e 481 {
fruediger 1:96a227d1ca7e 482 uint8_t tmp;
fruediger 1:96a227d1ca7e 483 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 484 {
fruediger 1:96a227d1ca7e 485 *level = static_cast<InterruptLevel>(tmp & INT_LEVEL_MASK);
fruediger 1:96a227d1ca7e 486 return true;
fruediger 1:96a227d1ca7e 487 }
fruediger 1:96a227d1ca7e 488
fruediger 1:96a227d1ca7e 489 return false;
fruediger 1:96a227d1ca7e 490 }
fruediger 1:96a227d1ca7e 491
fruediger 1:96a227d1ca7e 492 bool MPU6050::setInterruptLevel(InterruptLevel level, float timeout_secs)
fruediger 1:96a227d1ca7e 493 {
fruediger 1:96a227d1ca7e 494 uint8_t tmp;
fruediger 1:96a227d1ca7e 495 return (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs)) && (this->write(REG_INT_PIN_CFG, (tmp & (~INT_LEVEL_MASK)) | level, timeout_secs));
fruediger 1:96a227d1ca7e 496 }
fruediger 1:96a227d1ca7e 497
fruediger 1:96a227d1ca7e 498 bool MPU6050::getInterruptDrive(InterruptDrive *drive, float timeout_secs)
fruediger 1:96a227d1ca7e 499 {
fruediger 1:96a227d1ca7e 500 uint8_t tmp;
fruediger 1:96a227d1ca7e 501 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 502 {
fruediger 1:96a227d1ca7e 503 *drive = static_cast<InterruptDrive>(tmp & INT_DRIVE_MASK);
fruediger 1:96a227d1ca7e 504 return true;
fruediger 1:96a227d1ca7e 505 }
fruediger 1:96a227d1ca7e 506
fruediger 1:96a227d1ca7e 507 return false;
fruediger 1:96a227d1ca7e 508 }
fruediger 1:96a227d1ca7e 509
fruediger 1:96a227d1ca7e 510 bool MPU6050::setInterruptDrive(InterruptDrive drive, float timeout_secs)
fruediger 1:96a227d1ca7e 511 {
fruediger 1:96a227d1ca7e 512 uint8_t tmp;
fruediger 1:96a227d1ca7e 513 return (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs)) && (this->write(REG_INT_PIN_CFG, (tmp & (~INT_DRIVE_MASK)) | drive, timeout_secs));
fruediger 1:96a227d1ca7e 514 }
fruediger 1:96a227d1ca7e 515
fruediger 1:96a227d1ca7e 516 bool MPU6050::getInterruptLatch(InterruptLatch *latch, float timeout_secs)
fruediger 1:96a227d1ca7e 517 {
fruediger 1:96a227d1ca7e 518 uint8_t tmp;
fruediger 1:96a227d1ca7e 519 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 520 {
fruediger 1:96a227d1ca7e 521 *latch = static_cast<InterruptLatch>(tmp & INT_LATCH_MASK);
fruediger 1:96a227d1ca7e 522 return true;
fruediger 1:96a227d1ca7e 523 }
fruediger 1:96a227d1ca7e 524
fruediger 1:96a227d1ca7e 525 return false;
fruediger 1:96a227d1ca7e 526 }
fruediger 1:96a227d1ca7e 527
fruediger 1:96a227d1ca7e 528 bool MPU6050::setInterruptLatch(InterruptLatch latch, float timeout_secs)
fruediger 1:96a227d1ca7e 529 {
fruediger 1:96a227d1ca7e 530 uint8_t tmp;
fruediger 1:96a227d1ca7e 531 return (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs)) && (this->write(REG_INT_PIN_CFG, (tmp & (~INT_LATCH_MASK)) | latch, timeout_secs));
fruediger 1:96a227d1ca7e 532 }
fruediger 1:96a227d1ca7e 533
fruediger 1:96a227d1ca7e 534 bool MPU6050::getInterruptLatchClear(InterruptClear *latchClear, float timeout_secs)
fruediger 1:96a227d1ca7e 535 {
fruediger 1:96a227d1ca7e 536 uint8_t tmp;
fruediger 1:96a227d1ca7e 537 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 538 {
fruediger 1:96a227d1ca7e 539 *latchClear = static_cast<InterruptClear>(tmp & INT_CLEAR_MASK);
fruediger 1:96a227d1ca7e 540 return true;
fruediger 1:96a227d1ca7e 541 }
fruediger 1:96a227d1ca7e 542
fruediger 1:96a227d1ca7e 543 return false;
fruediger 1:96a227d1ca7e 544 }
fruediger 1:96a227d1ca7e 545
fruediger 1:96a227d1ca7e 546 bool MPU6050::setInterruptLatchClear(InterruptClear latchClear, float timeout_secs)
fruediger 1:96a227d1ca7e 547 {
fruediger 1:96a227d1ca7e 548 uint8_t tmp;
fruediger 1:96a227d1ca7e 549 return (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs)) && (this->write(REG_INT_PIN_CFG, (tmp & (~INT_CLEAR_MASK)) | latchClear, timeout_secs));
fruediger 1:96a227d1ca7e 550 }
fruediger 1:96a227d1ca7e 551
fruediger 1:96a227d1ca7e 552 bool MPU6050::getInterruptFSyncLevel(InterruptFSyncLevel *fsyncLevel, float timeout_secs)
fruediger 1:96a227d1ca7e 553 {
fruediger 1:96a227d1ca7e 554 uint8_t tmp;
fruediger 1:96a227d1ca7e 555 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 556 {
fruediger 1:96a227d1ca7e 557 *fsyncLevel = static_cast<InterruptFSyncLevel>(tmp & INT_FSYNC_LEVEL_MASK);
fruediger 1:96a227d1ca7e 558 return true;
fruediger 1:96a227d1ca7e 559 }
fruediger 1:96a227d1ca7e 560
fruediger 1:96a227d1ca7e 561 return false;
fruediger 1:96a227d1ca7e 562 }
fruediger 1:96a227d1ca7e 563
fruediger 1:96a227d1ca7e 564 bool MPU6050::setInterruptFSyncLevel(InterruptFSyncLevel fsyncLevel, float timeout_secs)
fruediger 1:96a227d1ca7e 565 {
fruediger 1:96a227d1ca7e 566 uint8_t tmp;
fruediger 1:96a227d1ca7e 567 return (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs)) && (this->write(REG_INT_PIN_CFG, (tmp & (~INT_FSYNC_LEVEL_MASK)) | fsyncLevel, timeout_secs));
fruediger 1:96a227d1ca7e 568 }
fruediger 1:96a227d1ca7e 569
fruediger 1:96a227d1ca7e 570 bool MPU6050::getInterruptFSyncEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 571 {
fruediger 1:96a227d1ca7e 572 uint8_t tmp;
fruediger 1:96a227d1ca7e 573 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 574 {
fruediger 1:96a227d1ca7e 575 *enabled = ((tmp & INT_FSYNC_EN_MASK) != 0);
fruediger 1:96a227d1ca7e 576 return true;
fruediger 1:96a227d1ca7e 577 }
fruediger 1:96a227d1ca7e 578
fruediger 1:96a227d1ca7e 579 return false;
fruediger 1:96a227d1ca7e 580 }
fruediger 1:96a227d1ca7e 581
fruediger 1:96a227d1ca7e 582 bool MPU6050::setInterruptFSyncEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 583 {
fruediger 1:96a227d1ca7e 584 uint8_t tmp;
fruediger 2:32b13cc64cb0 585 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 586 {
fruediger 1:96a227d1ca7e 587 tmp &= ~(INT_FSYNC_EN_MASK);
fruediger 2:32b13cc64cb0 588 return this->write(REG_FIFO_EN, enabled ? (tmp | INT_FSYNC_EN_MASK) : tmp, timeout_secs);
fruediger 1:96a227d1ca7e 589 }
fruediger 1:96a227d1ca7e 590 return false;
fruediger 1:96a227d1ca7e 591 }
fruediger 1:96a227d1ca7e 592
fruediger 1:96a227d1ca7e 593 bool MPU6050::getInterruptsEnabled(Interrupt *interruptSet, float timeout_secs)
fruediger 1:96a227d1ca7e 594 {
fruediger 1:96a227d1ca7e 595 uint8_t tmp;
fruediger 1:96a227d1ca7e 596 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 597 {
fruediger 1:96a227d1ca7e 598 *interruptSet = static_cast<Interrupt>(tmp);
fruediger 1:96a227d1ca7e 599 return true;
fruediger 1:96a227d1ca7e 600 }
fruediger 1:96a227d1ca7e 601 return false;
fruediger 1:96a227d1ca7e 602 }
fruediger 1:96a227d1ca7e 603
fruediger 1:96a227d1ca7e 604 bool MPU6050::setInterruptsEnabled(Interrupt interruptSet, float timeout_secs)
fruediger 1:96a227d1ca7e 605 {
fruediger 1:96a227d1ca7e 606 uint8_t tmp = interruptSet;
fruediger 1:96a227d1ca7e 607 return this->write(REG_INT_ENABLE, tmp, timeout_secs);
fruediger 1:96a227d1ca7e 608 }
fruediger 1:96a227d1ca7e 609
fruediger 1:96a227d1ca7e 610 bool MPU6050::getInterruptFreefallEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 611 {
fruediger 1:96a227d1ca7e 612 uint8_t tmp;
fruediger 1:96a227d1ca7e 613 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 614 {
fruediger 1:96a227d1ca7e 615 *enabled = ((tmp & INT_FREEFALL) != 0);
fruediger 1:96a227d1ca7e 616 return true;
fruediger 1:96a227d1ca7e 617 }
fruediger 1:96a227d1ca7e 618
fruediger 1:96a227d1ca7e 619 return false;
fruediger 1:96a227d1ca7e 620 }
fruediger 1:96a227d1ca7e 621
fruediger 1:96a227d1ca7e 622 bool MPU6050::setInterruptFreefallEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 623 {
fruediger 1:96a227d1ca7e 624 uint8_t tmp;
fruediger 2:32b13cc64cb0 625 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 626 {
fruediger 1:96a227d1ca7e 627 tmp &= ~(INT_FREEFALL);
fruediger 2:32b13cc64cb0 628 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_FREEFALL) : tmp, timeout_secs);
fruediger 1:96a227d1ca7e 629 }
fruediger 1:96a227d1ca7e 630 return false;
fruediger 1:96a227d1ca7e 631 }
fruediger 1:96a227d1ca7e 632
fruediger 1:96a227d1ca7e 633 bool MPU6050::getInterruptMotionEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 634 {
fruediger 1:96a227d1ca7e 635 uint8_t tmp;
fruediger 1:96a227d1ca7e 636 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 637 {
fruediger 1:96a227d1ca7e 638 *enabled = ((tmp & INT_MOTION) != 0);
fruediger 1:96a227d1ca7e 639 return true;
fruediger 1:96a227d1ca7e 640 }
fruediger 1:96a227d1ca7e 641
fruediger 1:96a227d1ca7e 642 return false;
fruediger 1:96a227d1ca7e 643 }
fruediger 1:96a227d1ca7e 644
fruediger 1:96a227d1ca7e 645 bool MPU6050::setInterruptMotionEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 646 {
fruediger 1:96a227d1ca7e 647 uint8_t tmp;
fruediger 2:32b13cc64cb0 648 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 649 {
fruediger 1:96a227d1ca7e 650 tmp &= ~(INT_MOTION);
fruediger 2:32b13cc64cb0 651 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_MOTION) : tmp, timeout_secs);
fruediger 1:96a227d1ca7e 652 }
fruediger 1:96a227d1ca7e 653 return false;
fruediger 1:96a227d1ca7e 654 }
fruediger 1:96a227d1ca7e 655
fruediger 1:96a227d1ca7e 656 bool MPU6050::getInterruptZeroMotionEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 657 {
fruediger 1:96a227d1ca7e 658 uint8_t tmp;
fruediger 1:96a227d1ca7e 659 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 660 {
fruediger 1:96a227d1ca7e 661 *enabled = ((tmp & INT_ZERO_MOTION) != 0);
fruediger 1:96a227d1ca7e 662 return true;
fruediger 1:96a227d1ca7e 663 }
fruediger 1:96a227d1ca7e 664
fruediger 1:96a227d1ca7e 665 return false;
fruediger 1:96a227d1ca7e 666 }
fruediger 1:96a227d1ca7e 667
fruediger 1:96a227d1ca7e 668 bool MPU6050::setInterruptZeroMotionEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 669 {
fruediger 1:96a227d1ca7e 670 uint8_t tmp;
fruediger 2:32b13cc64cb0 671 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 672 {
fruediger 1:96a227d1ca7e 673 tmp &= ~(INT_ZERO_MOTION);
fruediger 2:32b13cc64cb0 674 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_ZERO_MOTION) : tmp, timeout_secs);
fruediger 1:96a227d1ca7e 675 }
fruediger 1:96a227d1ca7e 676 return false;
fruediger 1:96a227d1ca7e 677 }
fruediger 1:96a227d1ca7e 678
fruediger 1:96a227d1ca7e 679 bool MPU6050::getInterruptFIFOOverflowEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 680 {
fruediger 1:96a227d1ca7e 681 uint8_t tmp;
fruediger 1:96a227d1ca7e 682 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 683 {
fruediger 1:96a227d1ca7e 684 *enabled = ((tmp & INT_FIFO_OVERFLOW) != 0);
fruediger 1:96a227d1ca7e 685 return true;
fruediger 1:96a227d1ca7e 686 }
fruediger 1:96a227d1ca7e 687
fruediger 1:96a227d1ca7e 688 return false;
fruediger 1:96a227d1ca7e 689 }
fruediger 1:96a227d1ca7e 690
fruediger 1:96a227d1ca7e 691 bool MPU6050::setInterruptFIFOOverflowEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 692 {
fruediger 1:96a227d1ca7e 693 uint8_t tmp;
fruediger 2:32b13cc64cb0 694 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 695 {
fruediger 1:96a227d1ca7e 696 tmp &= ~(INT_FIFO_OVERFLOW);
fruediger 2:32b13cc64cb0 697 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_FIFO_OVERFLOW) : tmp, timeout_secs);
fruediger 1:96a227d1ca7e 698 }
fruediger 1:96a227d1ca7e 699 return false;
fruediger 1:96a227d1ca7e 700 }
fruediger 1:96a227d1ca7e 701
fruediger 1:96a227d1ca7e 702 bool MPU6050::getInterruptDataReadyEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 703 {
fruediger 1:96a227d1ca7e 704 uint8_t tmp;
fruediger 1:96a227d1ca7e 705 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 706 {
fruediger 1:96a227d1ca7e 707 *enabled = ((tmp & INT_DATA_READY) != 0);
fruediger 1:96a227d1ca7e 708 return true;
fruediger 1:96a227d1ca7e 709 }
fruediger 1:96a227d1ca7e 710
fruediger 1:96a227d1ca7e 711 return false;
fruediger 1:96a227d1ca7e 712 }
fruediger 1:96a227d1ca7e 713
fruediger 1:96a227d1ca7e 714 bool MPU6050::setInterruptDataReadyEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 715 {
fruediger 1:96a227d1ca7e 716 uint8_t tmp;
fruediger 2:32b13cc64cb0 717 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 718 {
fruediger 1:96a227d1ca7e 719 tmp &= ~(INT_DATA_READY);
fruediger 2:32b13cc64cb0 720 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_DATA_READY) : tmp, timeout_secs);
fruediger 1:96a227d1ca7e 721 }
fruediger 1:96a227d1ca7e 722 return false;
fruediger 1:96a227d1ca7e 723 }
fruediger 1:96a227d1ca7e 724
fruediger 1:96a227d1ca7e 725 bool MPU6050::getInterruptStatuses(Interrupt *interruptSet, float timeout_secs)
fruediger 1:96a227d1ca7e 726 {
fruediger 1:96a227d1ca7e 727 uint8_t tmp;
fruediger 1:96a227d1ca7e 728 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 729 {
fruediger 1:96a227d1ca7e 730 *interruptSet = static_cast<Interrupt>(tmp);
fruediger 1:96a227d1ca7e 731 return true;
fruediger 1:96a227d1ca7e 732 }
fruediger 1:96a227d1ca7e 733 return false;
fruediger 1:96a227d1ca7e 734 }
fruediger 1:96a227d1ca7e 735
fruediger 1:96a227d1ca7e 736 bool MPU6050::getInterruptFreefallStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 737 {
fruediger 1:96a227d1ca7e 738 uint8_t tmp;
fruediger 1:96a227d1ca7e 739 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 740 {
fruediger 1:96a227d1ca7e 741 *status = ((tmp & INT_FREEFALL) != 0);
fruediger 1:96a227d1ca7e 742 return true;
fruediger 1:96a227d1ca7e 743 }
fruediger 1:96a227d1ca7e 744
fruediger 1:96a227d1ca7e 745 return false;
fruediger 1:96a227d1ca7e 746 }
fruediger 1:96a227d1ca7e 747
fruediger 1:96a227d1ca7e 748 bool MPU6050::getInterruptMotionStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 749 {
fruediger 1:96a227d1ca7e 750 uint8_t tmp;
fruediger 1:96a227d1ca7e 751 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 752 {
fruediger 1:96a227d1ca7e 753 *status = ((tmp & INT_MOTION) != 0);
fruediger 1:96a227d1ca7e 754 return true;
fruediger 1:96a227d1ca7e 755 }
fruediger 1:96a227d1ca7e 756
fruediger 1:96a227d1ca7e 757 return false;
fruediger 1:96a227d1ca7e 758 }
fruediger 1:96a227d1ca7e 759
fruediger 1:96a227d1ca7e 760 bool MPU6050::getInterruptZeroMotionStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 761 {
fruediger 1:96a227d1ca7e 762 uint8_t tmp;
fruediger 1:96a227d1ca7e 763 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 764 {
fruediger 1:96a227d1ca7e 765 *status = ((tmp & INT_ZERO_MOTION) != 0);
fruediger 1:96a227d1ca7e 766 return true;
fruediger 1:96a227d1ca7e 767 }
fruediger 1:96a227d1ca7e 768
fruediger 1:96a227d1ca7e 769 return false;
fruediger 1:96a227d1ca7e 770 }
fruediger 1:96a227d1ca7e 771
fruediger 1:96a227d1ca7e 772 bool MPU6050::getInterruptFIFOOverflowStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 773 {
fruediger 1:96a227d1ca7e 774 uint8_t tmp;
fruediger 1:96a227d1ca7e 775 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 776 {
fruediger 1:96a227d1ca7e 777 *status = ((tmp & INT_FIFO_OVERFLOW) != 0);
fruediger 1:96a227d1ca7e 778 return true;
fruediger 1:96a227d1ca7e 779 }
fruediger 1:96a227d1ca7e 780
fruediger 1:96a227d1ca7e 781 return false;
fruediger 1:96a227d1ca7e 782 }
fruediger 1:96a227d1ca7e 783
fruediger 1:96a227d1ca7e 784 bool MPU6050::getInterruptDataReadyStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 785 {
fruediger 1:96a227d1ca7e 786 uint8_t tmp;
fruediger 1:96a227d1ca7e 787 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 788 {
fruediger 1:96a227d1ca7e 789 *status = ((tmp & INT_DATA_READY) != 0);
fruediger 1:96a227d1ca7e 790 return true;
fruediger 1:96a227d1ca7e 791 }
fruediger 1:96a227d1ca7e 792
fruediger 1:96a227d1ca7e 793 return false;
fruediger 1:96a227d1ca7e 794 }
fruediger 1:96a227d1ca7e 795
fruediger 1:96a227d1ca7e 796 bool MPU6050::getAcceleration(int16_t *ax, int16_t *ay, int16_t *az, float timeout_secs)
fruediger 1:96a227d1ca7e 797 {
fruediger 1:96a227d1ca7e 798 uint8_t tmp[6];
fruediger 1:96a227d1ca7e 799 if (this->read(REG_ACCEL_XOUT_H, tmp, 6, timeout_secs))
fruediger 1:96a227d1ca7e 800 {
fruediger 1:96a227d1ca7e 801 *ax = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 802 *ay = (((int16_t)tmp[2]) << 8) | tmp[3];
fruediger 1:96a227d1ca7e 803 *az = (((int16_t)tmp[4]) << 8) | tmp[5];
fruediger 1:96a227d1ca7e 804
fruediger 1:96a227d1ca7e 805 return true;
fruediger 1:96a227d1ca7e 806 }
fruediger 1:96a227d1ca7e 807
fruediger 1:96a227d1ca7e 808 return false;
fruediger 1:96a227d1ca7e 809 }
fruediger 1:96a227d1ca7e 810
fruediger 1:96a227d1ca7e 811 bool MPU6050::getAccelerationX(int16_t *ax, float timeout_secs)
fruediger 1:96a227d1ca7e 812 {
fruediger 1:96a227d1ca7e 813 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 814 if (this->read(REG_ACCEL_XOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 815 {
fruediger 1:96a227d1ca7e 816 *ax = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 817 return true;
fruediger 1:96a227d1ca7e 818 }
fruediger 1:96a227d1ca7e 819
fruediger 1:96a227d1ca7e 820 return false;
fruediger 1:96a227d1ca7e 821 }
fruediger 1:96a227d1ca7e 822
fruediger 1:96a227d1ca7e 823 bool MPU6050::getAccelerationY(int16_t *ay, float timeout_secs)
fruediger 1:96a227d1ca7e 824 {
fruediger 1:96a227d1ca7e 825 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 826 if (this->read(REG_ACCEL_YOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 827 {
fruediger 1:96a227d1ca7e 828 *ay = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 829 return true;
fruediger 1:96a227d1ca7e 830 }
fruediger 1:96a227d1ca7e 831
fruediger 1:96a227d1ca7e 832 return false;
fruediger 1:96a227d1ca7e 833 }
fruediger 1:96a227d1ca7e 834
fruediger 1:96a227d1ca7e 835 bool MPU6050::getAccelerationZ(int16_t *az, float timeout_secs)
fruediger 1:96a227d1ca7e 836 {
fruediger 1:96a227d1ca7e 837 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 838 if (this->read(REG_ACCEL_ZOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 839 {
fruediger 1:96a227d1ca7e 840 *az = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 841 return true;
fruediger 1:96a227d1ca7e 842 }
fruediger 1:96a227d1ca7e 843
fruediger 1:96a227d1ca7e 844 return false;
fruediger 1:96a227d1ca7e 845 }
fruediger 1:96a227d1ca7e 846
fruediger 1:96a227d1ca7e 847 bool MPU6050::getTemperature(int16_t *temp, float timeout_secs)
fruediger 1:96a227d1ca7e 848 {
fruediger 1:96a227d1ca7e 849 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 850 if (this->read(REG_TEMP_OUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 851 {
fruediger 1:96a227d1ca7e 852 *temp = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 853 return true;
fruediger 1:96a227d1ca7e 854 }
fruediger 1:96a227d1ca7e 855
fruediger 1:96a227d1ca7e 856 return false;
fruediger 1:96a227d1ca7e 857 }
fruediger 1:96a227d1ca7e 858
fruediger 1:96a227d1ca7e 859 bool MPU6050::getRotationSpeed(int16_t *ox, int16_t *oy, int16_t *oz, float timeout_secs)
fruediger 1:96a227d1ca7e 860 {
fruediger 1:96a227d1ca7e 861 uint8_t tmp[6];
fruediger 1:96a227d1ca7e 862 if (this->read(REG_GYRO_XOUT_H, tmp, 6, timeout_secs))
fruediger 1:96a227d1ca7e 863 {
fruediger 1:96a227d1ca7e 864 *ox = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 865 *oy = (((int16_t)tmp[2]) << 8) | tmp[3];
fruediger 1:96a227d1ca7e 866 *oz = (((int16_t)tmp[4]) << 8) | tmp[5];
fruediger 1:96a227d1ca7e 867
fruediger 1:96a227d1ca7e 868 return true;
fruediger 1:96a227d1ca7e 869 }
fruediger 1:96a227d1ca7e 870
fruediger 1:96a227d1ca7e 871 return false;
fruediger 1:96a227d1ca7e 872 }
fruediger 1:96a227d1ca7e 873
fruediger 1:96a227d1ca7e 874 bool MPU6050::getRotationSpeedX(int16_t *ox, float timeout_secs)
fruediger 1:96a227d1ca7e 875 {
fruediger 1:96a227d1ca7e 876 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 877 if (this->read(REG_GYRO_XOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 878 {
fruediger 1:96a227d1ca7e 879 *ox = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 880 return true;
fruediger 1:96a227d1ca7e 881 }
fruediger 1:96a227d1ca7e 882
fruediger 1:96a227d1ca7e 883 return false;
fruediger 1:96a227d1ca7e 884 }
fruediger 1:96a227d1ca7e 885
fruediger 1:96a227d1ca7e 886 bool MPU6050::getRotationSpeedY(int16_t *oy, float timeout_secs)
fruediger 1:96a227d1ca7e 887 {
fruediger 1:96a227d1ca7e 888 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 889 if (this->read(REG_GYRO_YOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 890 {
fruediger 1:96a227d1ca7e 891 *oy = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 892 return true;
fruediger 1:96a227d1ca7e 893 }
fruediger 1:96a227d1ca7e 894
fruediger 1:96a227d1ca7e 895 return false;
fruediger 1:96a227d1ca7e 896 }
fruediger 1:96a227d1ca7e 897
fruediger 1:96a227d1ca7e 898 bool MPU6050::getRotationSpeedZ(int16_t *oz, float timeout_secs)
fruediger 1:96a227d1ca7e 899 {
fruediger 1:96a227d1ca7e 900 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 901 if (this->read(REG_GYRO_ZOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 902 {
fruediger 1:96a227d1ca7e 903 *oz = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 904 return true;
fruediger 1:96a227d1ca7e 905 }
fruediger 1:96a227d1ca7e 906
fruediger 1:96a227d1ca7e 907 return false;
fruediger 1:96a227d1ca7e 908 }
fruediger 1:96a227d1ca7e 909
fruediger 1:96a227d1ca7e 910 bool MPU6050::getMotionAndTemperature(int16_t *ax, int16_t *ay, int16_t *az, int16_t *ox, int16_t *oy, int16_t *oz, int16_t *temp, float timeout_secs)
fruediger 1:96a227d1ca7e 911 {
fruediger 1:96a227d1ca7e 912 uint8_t tmp[14];
fruediger 1:96a227d1ca7e 913 if (this->read(REG_GYRO_XOUT_H, tmp, 14, timeout_secs))
fruediger 1:96a227d1ca7e 914 {
fruediger 1:96a227d1ca7e 915 *ax = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 916 *ay = (((int16_t)tmp[2]) << 8) | tmp[3];
fruediger 1:96a227d1ca7e 917 *az = (((int16_t)tmp[4]) << 8) | tmp[5];
fruediger 1:96a227d1ca7e 918 *temp = (((int16_t)tmp[6]) << 8) | tmp[7];
fruediger 1:96a227d1ca7e 919 *ox = (((int16_t)tmp[8]) << 8) | tmp[9];
fruediger 1:96a227d1ca7e 920 *oy = (((int16_t)tmp[10]) << 8) | tmp[11];
fruediger 1:96a227d1ca7e 921 *oz = (((int16_t)tmp[12]) << 8) | tmp[13];
fruediger 1:96a227d1ca7e 922
fruediger 1:96a227d1ca7e 923 return true;
fruediger 1:96a227d1ca7e 924 }
fruediger 1:96a227d1ca7e 925
fruediger 1:96a227d1ca7e 926 return false;
fruediger 2:32b13cc64cb0 927 }
fruediger 2:32b13cc64cb0 928
fruediger 5:5739a7a6d0e9 929 bool MPU6050::getMotionAndTemperature(SensorReading *sensorReading, float timeout_secs)
fruediger 2:32b13cc64cb0 930 {
fruediger 2:32b13cc64cb0 931 uint8_t tmp;
fruediger 2:32b13cc64cb0 932 #define SWAP(a, b) tmp = a; a = b; b = tmp;
fruediger 2:32b13cc64cb0 933
fruediger 2:32b13cc64cb0 934 if (this->read(REG_GYRO_XOUT_H, (uint8_t*)&converter, sizeof(converter), timeout_secs))
fruediger 2:32b13cc64cb0 935 {
fruediger 2:32b13cc64cb0 936 SWAP(converter.reg.ax_h, converter.reg.ax_l);
fruediger 2:32b13cc64cb0 937 SWAP(converter.reg.ay_h, converter.reg.ay_l);
fruediger 2:32b13cc64cb0 938 SWAP(converter.reg.az_h, converter.reg.az_l);
fruediger 2:32b13cc64cb0 939 SWAP(converter.reg.temp_h, converter.reg.temp_l);
fruediger 2:32b13cc64cb0 940 SWAP(converter.reg.ox_h, converter.reg.ox_l);
fruediger 2:32b13cc64cb0 941 SWAP(converter.reg.oy_h, converter.reg.oy_l);
fruediger 2:32b13cc64cb0 942 SWAP(converter.reg.oz_h, converter.reg.oz_l);
fruediger 2:32b13cc64cb0 943
fruediger 2:32b13cc64cb0 944 *sensorReading = converter.value;
fruediger 2:32b13cc64cb0 945
fruediger 2:32b13cc64cb0 946 return true;
fruediger 2:32b13cc64cb0 947 }
fruediger 2:32b13cc64cb0 948
fruediger 2:32b13cc64cb0 949 return false;
fruediger 2:32b13cc64cb0 950
fruediger 2:32b13cc64cb0 951 #undef SWAP
fruediger 2:32b13cc64cb0 952 }
fruediger 2:32b13cc64cb0 953
fruediger 2:32b13cc64cb0 954 bool MPU6050::getMotionStatus(Motion *motionSet, float timeout_secs)
fruediger 2:32b13cc64cb0 955 {
fruediger 2:32b13cc64cb0 956 uint8_t tmp;
fruediger 2:32b13cc64cb0 957 if (this->read(REG_MOT_DETECT_STATUS, &tmp, timeout_secs))
fruediger 2:32b13cc64cb0 958 {
fruediger 2:32b13cc64cb0 959 *motionSet = static_cast<Motion>(tmp);
fruediger 2:32b13cc64cb0 960 return true;
fruediger 2:32b13cc64cb0 961 }
fruediger 2:32b13cc64cb0 962 return false;
fruediger 2:32b13cc64cb0 963 }
fruediger 2:32b13cc64cb0 964
fruediger 2:32b13cc64cb0 965 bool MPU6050::getNegativeXMotionDetected(bool *detected, float timeout_secs)
fruediger 2:32b13cc64cb0 966 {
fruediger 2:32b13cc64cb0 967 uint8_t tmp;
fruediger 2:32b13cc64cb0 968 if (this->read(REG_MOT_DETECT_STATUS, &tmp, timeout_secs))
fruediger 2:32b13cc64cb0 969 {
fruediger 2:32b13cc64cb0 970 *detected = ((tmp & MOT_NEGATIVE_X) != 0);
fruediger 2:32b13cc64cb0 971 return true;
fruediger 2:32b13cc64cb0 972 }
fruediger 2:32b13cc64cb0 973
fruediger 2:32b13cc64cb0 974 return false;
fruediger 2:32b13cc64cb0 975 }
fruediger 2:32b13cc64cb0 976
fruediger 2:32b13cc64cb0 977 bool MPU6050::getPositiveXMotionDetected(bool *detected, float timeout_secs)
fruediger 2:32b13cc64cb0 978 {
fruediger 2:32b13cc64cb0 979 uint8_t tmp;
fruediger 2:32b13cc64cb0 980 if (this->read(REG_MOT_DETECT_STATUS, &tmp, timeout_secs))
fruediger 2:32b13cc64cb0 981 {
fruediger 2:32b13cc64cb0 982 *detected = ((tmp & MOT_POSITIVE_X) != 0);
fruediger 2:32b13cc64cb0 983 return true;
fruediger 2:32b13cc64cb0 984 }
fruediger 2:32b13cc64cb0 985
fruediger 2:32b13cc64cb0 986 return false;
fruediger 2:32b13cc64cb0 987 }
fruediger 2:32b13cc64cb0 988
fruediger 2:32b13cc64cb0 989 bool MPU6050::getNegativeYMotionDetected(bool *detected, float timeout_secs)
fruediger 2:32b13cc64cb0 990 {
fruediger 2:32b13cc64cb0 991 uint8_t tmp;
fruediger 2:32b13cc64cb0 992 if (this->read(REG_MOT_DETECT_STATUS, &tmp, timeout_secs))
fruediger 2:32b13cc64cb0 993 {
fruediger 2:32b13cc64cb0 994 *detected = ((tmp & MOT_NEGATIVE_Y) != 0);
fruediger 2:32b13cc64cb0 995 return true;
fruediger 2:32b13cc64cb0 996 }
fruediger 2:32b13cc64cb0 997
fruediger 2:32b13cc64cb0 998 return false;
fruediger 2:32b13cc64cb0 999 }
fruediger 2:32b13cc64cb0 1000
fruediger 2:32b13cc64cb0 1001 bool MPU6050::getPositiveYMotionDetected(bool *detected, float timeout_secs)
fruediger 2:32b13cc64cb0 1002 {
fruediger 2:32b13cc64cb0 1003 uint8_t tmp;
fruediger 2:32b13cc64cb0 1004 if (this->read(REG_MOT_DETECT_STATUS, &tmp, timeout_secs))
fruediger 2:32b13cc64cb0 1005 {
fruediger 2:32b13cc64cb0 1006 *detected = ((tmp & MOT_POSITIVE_Y) != 0);
fruediger 2:32b13cc64cb0 1007 return true;
fruediger 2:32b13cc64cb0 1008 }
fruediger 2:32b13cc64cb0 1009
fruediger 2:32b13cc64cb0 1010 return false;
fruediger 2:32b13cc64cb0 1011 }
fruediger 2:32b13cc64cb0 1012
fruediger 2:32b13cc64cb0 1013 bool MPU6050::getNegativeZMotionDetected(bool *detected, float timeout_secs)
fruediger 2:32b13cc64cb0 1014 {
fruediger 2:32b13cc64cb0 1015 uint8_t tmp;
fruediger 2:32b13cc64cb0 1016 if (this->read(REG_MOT_DETECT_STATUS, &tmp, timeout_secs))
fruediger 2:32b13cc64cb0 1017 {
fruediger 2:32b13cc64cb0 1018 *detected = ((tmp & MOT_NEGATIVE_Z) != 0);
fruediger 2:32b13cc64cb0 1019 return true;
fruediger 2:32b13cc64cb0 1020 }
fruediger 2:32b13cc64cb0 1021
fruediger 2:32b13cc64cb0 1022 return false;
fruediger 2:32b13cc64cb0 1023 }
fruediger 2:32b13cc64cb0 1024
fruediger 2:32b13cc64cb0 1025 bool MPU6050::getPositiveZMotionDetected(bool *detected, float timeout_secs)
fruediger 2:32b13cc64cb0 1026 {
fruediger 2:32b13cc64cb0 1027 uint8_t tmp;
fruediger 2:32b13cc64cb0 1028 if (this->read(REG_MOT_DETECT_STATUS, &tmp, timeout_secs))
fruediger 2:32b13cc64cb0 1029 {
fruediger 2:32b13cc64cb0 1030 *detected = ((tmp & MOT_POSITIVE_Z) != 0);
fruediger 2:32b13cc64cb0 1031 return true;
fruediger 2:32b13cc64cb0 1032 }
fruediger 2:32b13cc64cb0 1033
fruediger 2:32b13cc64cb0 1034 return false;
fruediger 2:32b13cc64cb0 1035 }
fruediger 2:32b13cc64cb0 1036
fruediger 2:32b13cc64cb0 1037 bool MPU6050::getZeroMotionDetected(bool *detected, float timeout_secs)
fruediger 2:32b13cc64cb0 1038 {
fruediger 2:32b13cc64cb0 1039 uint8_t tmp;
fruediger 2:32b13cc64cb0 1040 if (this->read(REG_MOT_DETECT_STATUS, &tmp, timeout_secs))
fruediger 2:32b13cc64cb0 1041 {
fruediger 2:32b13cc64cb0 1042 *detected = ((tmp & MOT_ZERO) != 0);
fruediger 2:32b13cc64cb0 1043 return true;
fruediger 2:32b13cc64cb0 1044 }
fruediger 2:32b13cc64cb0 1045
fruediger 2:32b13cc64cb0 1046 return false;
fruediger 2:32b13cc64cb0 1047 }
fruediger 2:32b13cc64cb0 1048
fruediger 2:32b13cc64cb0 1049 bool MPU6050::resetGyroscopeSignalPath(float timeout_secs)
fruediger 2:32b13cc64cb0 1050 {
fruediger 2:32b13cc64cb0 1051 uint8_t tmp;
fruediger 2:32b13cc64cb0 1052 return (this->read(REG_SIGNAL_PATH_RESET, &tmp) && this->write(REG_SIGNAL_PATH_RESET, tmp | GYRO_PATH_RESET_MASK));
fruediger 2:32b13cc64cb0 1053 }
fruediger 2:32b13cc64cb0 1054
fruediger 2:32b13cc64cb0 1055 bool MPU6050::resetAccelerometerSignalPath(float timeout_secs)
fruediger 2:32b13cc64cb0 1056 {
fruediger 2:32b13cc64cb0 1057 uint8_t tmp;
fruediger 2:32b13cc64cb0 1058 return (this->read(REG_SIGNAL_PATH_RESET, &tmp) && this->write(REG_SIGNAL_PATH_RESET, tmp | ACCEL_PATH_RESET_MASK));
fruediger 2:32b13cc64cb0 1059 }
fruediger 2:32b13cc64cb0 1060
fruediger 2:32b13cc64cb0 1061 bool MPU6050::resetTemperatureSignalPath(float timeout_secs)
fruediger 2:32b13cc64cb0 1062 {
fruediger 2:32b13cc64cb0 1063 uint8_t tmp;
fruediger 2:32b13cc64cb0 1064 return (this->read(REG_SIGNAL_PATH_RESET, &tmp) && this->write(REG_SIGNAL_PATH_RESET, tmp | TEMP_PATH_RESET_MASK));
fruediger 3:a6e53ab2c8c0 1065 }
fruediger 3:a6e53ab2c8c0 1066
fruediger 3:a6e53ab2c8c0 1067 bool MPU6050::getAccelerometerPowerOnDelay(PowerOnDelay* delay, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1068 {
fruediger 3:a6e53ab2c8c0 1069 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1070 if (this->read(REG_MOT_DETECT_CTRL, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1071 {
fruediger 3:a6e53ab2c8c0 1072 *delay = static_cast<PowerOnDelay>(tmp & POWER_ON_DELAY_MASK);
fruediger 3:a6e53ab2c8c0 1073 return true;
fruediger 3:a6e53ab2c8c0 1074 }
fruediger 3:a6e53ab2c8c0 1075
fruediger 3:a6e53ab2c8c0 1076 return false;
fruediger 3:a6e53ab2c8c0 1077 }
fruediger 3:a6e53ab2c8c0 1078
fruediger 3:a6e53ab2c8c0 1079 bool MPU6050::setAccelerometerPowerOnDelay(PowerOnDelay delay, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1080 {
fruediger 3:a6e53ab2c8c0 1081 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1082 return (this->read(REG_MOT_DETECT_CTRL, &tmp, timeout_secs)) && (this->write(REG_MOT_DETECT_CTRL, (tmp & (~POWER_ON_DELAY_MASK)) | delay, timeout_secs));
fruediger 3:a6e53ab2c8c0 1083 }
fruediger 3:a6e53ab2c8c0 1084
fruediger 3:a6e53ab2c8c0 1085 bool MPU6050::getFreefallDetectionDecrement(FreefallDetectionDecrement* dec, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1086 {
fruediger 3:a6e53ab2c8c0 1087 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1088 if (this->read(REG_MOT_DETECT_CTRL, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1089 {
fruediger 3:a6e53ab2c8c0 1090 *dec = static_cast<FreefallDetectionDecrement>(tmp & FF_DETECTION_DEC_MASK);
fruediger 3:a6e53ab2c8c0 1091 return true;
fruediger 3:a6e53ab2c8c0 1092 }
fruediger 3:a6e53ab2c8c0 1093
fruediger 3:a6e53ab2c8c0 1094 return false;
fruediger 3:a6e53ab2c8c0 1095 }
fruediger 3:a6e53ab2c8c0 1096
fruediger 3:a6e53ab2c8c0 1097 bool MPU6050::setFreefallDetectionDecrement(FreefallDetectionDecrement dec, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1098 {
fruediger 3:a6e53ab2c8c0 1099 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1100 return (this->read(REG_MOT_DETECT_CTRL, &tmp, timeout_secs)) && (this->write(REG_MOT_DETECT_CTRL, (tmp & (~FF_DETECTION_DEC_MASK)) | dec, timeout_secs));
fruediger 3:a6e53ab2c8c0 1101 }
fruediger 3:a6e53ab2c8c0 1102
fruediger 3:a6e53ab2c8c0 1103 bool MPU6050::getMotionDetectionDecrement(MotionDetectionDecrement* dec, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1104 {
fruediger 3:a6e53ab2c8c0 1105 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1106 if (this->read(REG_MOT_DETECT_CTRL, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1107 {
fruediger 3:a6e53ab2c8c0 1108 *dec = static_cast<MotionDetectionDecrement>(tmp & MOT_DETECTION_DEC_MASK);
fruediger 3:a6e53ab2c8c0 1109 return true;
fruediger 3:a6e53ab2c8c0 1110 }
fruediger 3:a6e53ab2c8c0 1111
fruediger 3:a6e53ab2c8c0 1112 return false;
fruediger 3:a6e53ab2c8c0 1113 }
fruediger 3:a6e53ab2c8c0 1114
fruediger 3:a6e53ab2c8c0 1115 bool MPU6050::setMotionDetectionDecrement(MotionDetectionDecrement dec, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1116 {
fruediger 3:a6e53ab2c8c0 1117 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1118 return (this->read(REG_MOT_DETECT_CTRL, &tmp, timeout_secs)) && (this->write(REG_MOT_DETECT_CTRL, (tmp & (~MOT_DETECTION_DEC_MASK)) | dec, timeout_secs));
fruediger 3:a6e53ab2c8c0 1119 }
fruediger 3:a6e53ab2c8c0 1120
fruediger 3:a6e53ab2c8c0 1121 bool MPU6050::getFIFOEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1122 {
fruediger 3:a6e53ab2c8c0 1123 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1124 if (this->read(REG_USER_CTRL, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1125 {
fruediger 3:a6e53ab2c8c0 1126 *enabled = ((tmp & FIFO_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1127 return true;
fruediger 3:a6e53ab2c8c0 1128 }
fruediger 3:a6e53ab2c8c0 1129
fruediger 3:a6e53ab2c8c0 1130 return false;
fruediger 3:a6e53ab2c8c0 1131 }
fruediger 3:a6e53ab2c8c0 1132
fruediger 3:a6e53ab2c8c0 1133 bool MPU6050::setFIFOEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1134 {
fruediger 3:a6e53ab2c8c0 1135 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1136 if (this->read(REG_USER_CTRL, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1137 {
fruediger 3:a6e53ab2c8c0 1138 tmp &= ~(FIFO_EN_MASK);
fruediger 3:a6e53ab2c8c0 1139 return this->write(REG_USER_CTRL, enabled ? (tmp | FIFO_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1140 }
fruediger 3:a6e53ab2c8c0 1141 return false;
fruediger 3:a6e53ab2c8c0 1142 }
fruediger 3:a6e53ab2c8c0 1143
fruediger 3:a6e53ab2c8c0 1144 bool MPU6050::resetFIFO(float timeout_secs)
fruediger 3:a6e53ab2c8c0 1145 {
fruediger 3:a6e53ab2c8c0 1146 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1147 return (this->read(REG_USER_CTRL, &tmp) && this->write(REG_USER_CTRL, tmp | FIFO_RESET_MASK));
fruediger 3:a6e53ab2c8c0 1148 }
fruediger 3:a6e53ab2c8c0 1149
fruediger 3:a6e53ab2c8c0 1150 bool MPU6050::resetSensors(float timeout_secs)
fruediger 3:a6e53ab2c8c0 1151 {
fruediger 3:a6e53ab2c8c0 1152 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1153 return (this->read(REG_USER_CTRL, &tmp) && this->write(REG_USER_CTRL, tmp | SIG_COND_RESET_MASK));
fruediger 3:a6e53ab2c8c0 1154 }
fruediger 3:a6e53ab2c8c0 1155
fruediger 3:a6e53ab2c8c0 1156 bool MPU6050::reset(float timeout_secs)
fruediger 3:a6e53ab2c8c0 1157 {
fruediger 3:a6e53ab2c8c0 1158 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1159 return (this->read(REG_PWR_MGMT_1, &tmp) && this->write(REG_PWR_MGMT_1, tmp | RESET_MASK));
fruediger 3:a6e53ab2c8c0 1160 }
fruediger 3:a6e53ab2c8c0 1161
fruediger 3:a6e53ab2c8c0 1162 bool MPU6050::getSleepEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1163 {
fruediger 3:a6e53ab2c8c0 1164 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1165 if (this->read(REG_PWR_MGMT_1, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1166 {
fruediger 3:a6e53ab2c8c0 1167 *enabled = ((tmp & SLEEP_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1168 return true;
fruediger 3:a6e53ab2c8c0 1169 }
fruediger 3:a6e53ab2c8c0 1170
fruediger 3:a6e53ab2c8c0 1171 return false;
fruediger 3:a6e53ab2c8c0 1172 }
fruediger 3:a6e53ab2c8c0 1173
fruediger 3:a6e53ab2c8c0 1174 bool MPU6050::setSleepEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1175 {
fruediger 3:a6e53ab2c8c0 1176 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1177 if (this->read(REG_PWR_MGMT_1, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1178 {
fruediger 3:a6e53ab2c8c0 1179 tmp &= ~(SLEEP_EN_MASK);
fruediger 3:a6e53ab2c8c0 1180 return this->write(REG_PWR_MGMT_1, enabled ? (tmp | SLEEP_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1181 }
fruediger 3:a6e53ab2c8c0 1182 return false;
fruediger 3:a6e53ab2c8c0 1183 }
fruediger 3:a6e53ab2c8c0 1184
fruediger 3:a6e53ab2c8c0 1185 bool MPU6050::getWakeCycleEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1186 {
fruediger 3:a6e53ab2c8c0 1187 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1188 if (this->read(REG_PWR_MGMT_1, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1189 {
fruediger 3:a6e53ab2c8c0 1190 *enabled = ((tmp & WAKE_CYCLE_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1191 return true;
fruediger 3:a6e53ab2c8c0 1192 }
fruediger 3:a6e53ab2c8c0 1193
fruediger 3:a6e53ab2c8c0 1194 return false;
fruediger 3:a6e53ab2c8c0 1195 }
fruediger 3:a6e53ab2c8c0 1196
fruediger 3:a6e53ab2c8c0 1197 bool MPU6050::setWakeCycleEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1198 {
fruediger 3:a6e53ab2c8c0 1199 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1200 if (this->read(REG_PWR_MGMT_1, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1201 {
fruediger 3:a6e53ab2c8c0 1202 tmp &= ~(WAKE_CYCLE_EN_MASK);
fruediger 3:a6e53ab2c8c0 1203 return this->write(REG_PWR_MGMT_1, enabled ? (tmp | WAKE_CYCLE_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1204 }
fruediger 3:a6e53ab2c8c0 1205 return false;
fruediger 3:a6e53ab2c8c0 1206 }
fruediger 3:a6e53ab2c8c0 1207
fruediger 3:a6e53ab2c8c0 1208 bool MPU6050::getTemperatureSensorEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1209 {
fruediger 3:a6e53ab2c8c0 1210 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1211 if (this->read(REG_PWR_MGMT_1, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1212 {
fruediger 3:a6e53ab2c8c0 1213 // this is an inverted state
fruediger 3:a6e53ab2c8c0 1214 *enabled = ((tmp & TEMP_EN_MASK) == 0);
fruediger 3:a6e53ab2c8c0 1215 return true;
fruediger 3:a6e53ab2c8c0 1216 }
fruediger 3:a6e53ab2c8c0 1217
fruediger 3:a6e53ab2c8c0 1218 return false;
fruediger 3:a6e53ab2c8c0 1219 }
fruediger 3:a6e53ab2c8c0 1220
fruediger 3:a6e53ab2c8c0 1221 bool MPU6050::setTemperatureSensorEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1222 {
fruediger 3:a6e53ab2c8c0 1223 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1224 if (this->read(REG_PWR_MGMT_1, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1225 {
fruediger 3:a6e53ab2c8c0 1226 tmp &= ~(TEMP_EN_MASK);
fruediger 3:a6e53ab2c8c0 1227 //this is an incverted state
fruediger 3:a6e53ab2c8c0 1228 return this->write(REG_PWR_MGMT_1, enabled ? tmp : (tmp | TEMP_EN_MASK), timeout_secs);
fruediger 3:a6e53ab2c8c0 1229 }
fruediger 3:a6e53ab2c8c0 1230 return false;
fruediger 3:a6e53ab2c8c0 1231 }
fruediger 3:a6e53ab2c8c0 1232
fruediger 3:a6e53ab2c8c0 1233 bool MPU6050::getClockSource(ClockSource* clockSource, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1234 {
fruediger 3:a6e53ab2c8c0 1235 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1236 if (this->read(REG_PWR_MGMT_1, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1237 {
fruediger 3:a6e53ab2c8c0 1238 *clockSource = static_cast<ClockSource>(tmp & CLOCK_SOURCE_MASK);
fruediger 3:a6e53ab2c8c0 1239 return true;
fruediger 3:a6e53ab2c8c0 1240 }
fruediger 3:a6e53ab2c8c0 1241
fruediger 3:a6e53ab2c8c0 1242 return false;
fruediger 3:a6e53ab2c8c0 1243 }
fruediger 3:a6e53ab2c8c0 1244
fruediger 3:a6e53ab2c8c0 1245 bool MPU6050::setClockSource(ClockSource clockSource, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1246 {
fruediger 3:a6e53ab2c8c0 1247 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1248 return (this->read(REG_PWR_MGMT_1, &tmp, timeout_secs)) && (this->write(REG_PWR_MGMT_1, (tmp & (~CLOCK_SOURCE_MASK)) | clockSource, timeout_secs));
fruediger 3:a6e53ab2c8c0 1249 }
fruediger 3:a6e53ab2c8c0 1250
fruediger 3:a6e53ab2c8c0 1251 bool MPU6050::getWakeFrequency(WakeFrequency* wakeFrequency, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1252 {
fruediger 3:a6e53ab2c8c0 1253 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1254 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1255 {
fruediger 4:5a52b575fbc6 1256 *wakeFrequency = static_cast<WakeFrequency>(tmp & WAKE_FREQ_MASK);
fruediger 3:a6e53ab2c8c0 1257 return true;
fruediger 3:a6e53ab2c8c0 1258 }
fruediger 3:a6e53ab2c8c0 1259
fruediger 3:a6e53ab2c8c0 1260 return false;
fruediger 3:a6e53ab2c8c0 1261 }
fruediger 3:a6e53ab2c8c0 1262
fruediger 3:a6e53ab2c8c0 1263 bool MPU6050::setWakeFrequency(WakeFrequency wakeFrequency, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1264 {
fruediger 3:a6e53ab2c8c0 1265 uint8_t tmp;
fruediger 4:5a52b575fbc6 1266 return (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs)) && (this->write(REG_PWR_MGMT_2, (tmp & (~WAKE_FREQ_MASK)) | wakeFrequency, timeout_secs));
fruediger 3:a6e53ab2c8c0 1267 }
fruediger 3:a6e53ab2c8c0 1268
fruediger 3:a6e53ab2c8c0 1269 bool MPU6050::getGyroXStandbyEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1270 {
fruediger 3:a6e53ab2c8c0 1271 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1272 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1273 {
fruediger 3:a6e53ab2c8c0 1274 *enabled = ((tmp & GYRO_X_STB_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1275 return true;
fruediger 3:a6e53ab2c8c0 1276 }
fruediger 3:a6e53ab2c8c0 1277
fruediger 3:a6e53ab2c8c0 1278 return false;
fruediger 3:a6e53ab2c8c0 1279 }
fruediger 3:a6e53ab2c8c0 1280
fruediger 3:a6e53ab2c8c0 1281 bool MPU6050::setGyroXStandbyEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1282 {
fruediger 3:a6e53ab2c8c0 1283 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1284 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1285 {
fruediger 3:a6e53ab2c8c0 1286 tmp &= ~(GYRO_X_STB_EN_MASK);
fruediger 3:a6e53ab2c8c0 1287 return this->write(REG_PWR_MGMT_2, enabled ? (tmp | GYRO_X_STB_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1288 }
fruediger 3:a6e53ab2c8c0 1289 return false;
fruediger 3:a6e53ab2c8c0 1290 }
fruediger 3:a6e53ab2c8c0 1291
fruediger 3:a6e53ab2c8c0 1292 bool MPU6050::getGyroYStandbyEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1293 {
fruediger 3:a6e53ab2c8c0 1294 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1295 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1296 {
fruediger 3:a6e53ab2c8c0 1297 *enabled = ((tmp & GYRO_Y_STB_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1298 return true;
fruediger 3:a6e53ab2c8c0 1299 }
fruediger 3:a6e53ab2c8c0 1300
fruediger 3:a6e53ab2c8c0 1301 return false;
fruediger 3:a6e53ab2c8c0 1302 }
fruediger 3:a6e53ab2c8c0 1303
fruediger 3:a6e53ab2c8c0 1304 bool MPU6050::setGyroYStandbyEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1305 {
fruediger 3:a6e53ab2c8c0 1306 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1307 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1308 {
fruediger 3:a6e53ab2c8c0 1309 tmp &= ~(GYRO_Y_STB_EN_MASK);
fruediger 3:a6e53ab2c8c0 1310 return this->write(REG_PWR_MGMT_2, enabled ? (tmp | GYRO_Y_STB_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1311 }
fruediger 3:a6e53ab2c8c0 1312 return false;
fruediger 3:a6e53ab2c8c0 1313 }
fruediger 3:a6e53ab2c8c0 1314
fruediger 3:a6e53ab2c8c0 1315 bool MPU6050::getGyroZStandbyEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1316 {
fruediger 3:a6e53ab2c8c0 1317 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1318 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1319 {
fruediger 3:a6e53ab2c8c0 1320 *enabled = ((tmp & GYRO_Z_STB_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1321 return true;
fruediger 3:a6e53ab2c8c0 1322 }
fruediger 3:a6e53ab2c8c0 1323
fruediger 3:a6e53ab2c8c0 1324 return false;
fruediger 3:a6e53ab2c8c0 1325 }
fruediger 3:a6e53ab2c8c0 1326
fruediger 3:a6e53ab2c8c0 1327 bool MPU6050::setGyroZStandbyEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1328 {
fruediger 3:a6e53ab2c8c0 1329 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1330 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1331 {
fruediger 3:a6e53ab2c8c0 1332 tmp &= ~(GYRO_Z_STB_EN_MASK);
fruediger 3:a6e53ab2c8c0 1333 return this->write(REG_PWR_MGMT_2, enabled ? (tmp | GYRO_Z_STB_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1334 }
fruediger 3:a6e53ab2c8c0 1335 return false;
fruediger 3:a6e53ab2c8c0 1336 }
fruediger 3:a6e53ab2c8c0 1337
fruediger 3:a6e53ab2c8c0 1338 bool MPU6050::getAccelXStandbyEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1339 {
fruediger 3:a6e53ab2c8c0 1340 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1341 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1342 {
fruediger 3:a6e53ab2c8c0 1343 *enabled = ((tmp & ACCEL_X_STB_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1344 return true;
fruediger 3:a6e53ab2c8c0 1345 }
fruediger 3:a6e53ab2c8c0 1346
fruediger 3:a6e53ab2c8c0 1347 return false;
fruediger 3:a6e53ab2c8c0 1348 }
fruediger 3:a6e53ab2c8c0 1349
fruediger 3:a6e53ab2c8c0 1350 bool MPU6050::setAccelXStandbyEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1351 {
fruediger 3:a6e53ab2c8c0 1352 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1353 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1354 {
fruediger 3:a6e53ab2c8c0 1355 tmp &= ~(ACCEL_X_STB_EN_MASK);
fruediger 3:a6e53ab2c8c0 1356 return this->write(REG_PWR_MGMT_2, enabled ? (tmp | ACCEL_X_STB_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1357 }
fruediger 3:a6e53ab2c8c0 1358 return false;
fruediger 3:a6e53ab2c8c0 1359 }
fruediger 3:a6e53ab2c8c0 1360
fruediger 3:a6e53ab2c8c0 1361 bool MPU6050::getAccelYStandbyEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1362 {
fruediger 3:a6e53ab2c8c0 1363 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1364 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1365 {
fruediger 3:a6e53ab2c8c0 1366 *enabled = ((tmp & ACCEL_Y_STB_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1367 return true;
fruediger 3:a6e53ab2c8c0 1368 }
fruediger 3:a6e53ab2c8c0 1369
fruediger 3:a6e53ab2c8c0 1370 return false;
fruediger 3:a6e53ab2c8c0 1371 }
fruediger 3:a6e53ab2c8c0 1372
fruediger 3:a6e53ab2c8c0 1373 bool MPU6050::setAccelYStandbyEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1374 {
fruediger 3:a6e53ab2c8c0 1375 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1376 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1377 {
fruediger 3:a6e53ab2c8c0 1378 tmp &= ~(ACCEL_Y_STB_EN_MASK);
fruediger 3:a6e53ab2c8c0 1379 return this->write(REG_PWR_MGMT_2, enabled ? (tmp | ACCEL_Y_STB_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1380 }
fruediger 3:a6e53ab2c8c0 1381 return false;
fruediger 3:a6e53ab2c8c0 1382 }
fruediger 3:a6e53ab2c8c0 1383
fruediger 3:a6e53ab2c8c0 1384 bool MPU6050::getAccelZStandbyEnabled(bool *enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1385 {
fruediger 3:a6e53ab2c8c0 1386 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1387 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1388 {
fruediger 3:a6e53ab2c8c0 1389 *enabled = ((tmp & ACCEL_Z_STB_EN_MASK) != 0);
fruediger 3:a6e53ab2c8c0 1390 return true;
fruediger 3:a6e53ab2c8c0 1391 }
fruediger 3:a6e53ab2c8c0 1392
fruediger 3:a6e53ab2c8c0 1393 return false;
fruediger 3:a6e53ab2c8c0 1394 }
fruediger 3:a6e53ab2c8c0 1395
fruediger 3:a6e53ab2c8c0 1396 bool MPU6050::setAccelZStandbyEnabled(bool enabled, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1397 {
fruediger 3:a6e53ab2c8c0 1398 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1399 if (this->read(REG_PWR_MGMT_2, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1400 {
fruediger 3:a6e53ab2c8c0 1401 tmp &= ~(ACCEL_Z_STB_EN_MASK);
fruediger 3:a6e53ab2c8c0 1402 return this->write(REG_PWR_MGMT_2, enabled ? (tmp | ACCEL_Z_STB_EN_MASK) : tmp, timeout_secs);
fruediger 3:a6e53ab2c8c0 1403 }
fruediger 3:a6e53ab2c8c0 1404 return false;
fruediger 3:a6e53ab2c8c0 1405 }
fruediger 3:a6e53ab2c8c0 1406
fruediger 3:a6e53ab2c8c0 1407 bool MPU6050::getFIFOCount(uint16_t *count, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1408 {
fruediger 3:a6e53ab2c8c0 1409 uint8_t tmp[2];
fruediger 3:a6e53ab2c8c0 1410 if (this->read(REG_FIFO_COUNTH, tmp, 2, timeout_secs))
fruediger 3:a6e53ab2c8c0 1411 {
fruediger 3:a6e53ab2c8c0 1412 *count = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 3:a6e53ab2c8c0 1413 return true;
fruediger 3:a6e53ab2c8c0 1414 }
fruediger 3:a6e53ab2c8c0 1415
fruediger 3:a6e53ab2c8c0 1416 return false;
fruediger 3:a6e53ab2c8c0 1417 }
fruediger 3:a6e53ab2c8c0 1418
fruediger 3:a6e53ab2c8c0 1419 bool MPU6050::readFIFO(uint8_t *data, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1420 {
fruediger 3:a6e53ab2c8c0 1421 return this->read(REG_FIFO_R_W, data, timeout_secs);
fruediger 3:a6e53ab2c8c0 1422 }
fruediger 3:a6e53ab2c8c0 1423
fruediger 3:a6e53ab2c8c0 1424 bool MPU6050::writeFIFO(uint8_t data, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1425 {
fruediger 3:a6e53ab2c8c0 1426 return this->write(REG_FIFO_R_W, data, timeout_secs);
fruediger 3:a6e53ab2c8c0 1427 }
fruediger 3:a6e53ab2c8c0 1428
fruediger 3:a6e53ab2c8c0 1429 bool MPU6050::readFIFO(uint8_t *data, size_t lenght, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1430 {
fruediger 3:a6e53ab2c8c0 1431 return this->read(REG_FIFO_R_W, data, lenght, timeout_secs);
fruediger 3:a6e53ab2c8c0 1432 }
fruediger 3:a6e53ab2c8c0 1433
fruediger 4:5a52b575fbc6 1434 bool MPU6050::writeFIFO(uint8_t *data, size_t lenght, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1435 {
fruediger 3:a6e53ab2c8c0 1436 return this->write(REG_FIFO_R_W, data, lenght, timeout_secs);
fruediger 3:a6e53ab2c8c0 1437 }
fruediger 3:a6e53ab2c8c0 1438
fruediger 3:a6e53ab2c8c0 1439 bool MPU6050::getDeviceId(uint8_t *id, float timeout_secs)
fruediger 3:a6e53ab2c8c0 1440 {
fruediger 3:a6e53ab2c8c0 1441
fruediger 3:a6e53ab2c8c0 1442 uint8_t tmp;
fruediger 3:a6e53ab2c8c0 1443 if (this->read(REG_WHO_AM_I, &tmp, timeout_secs))
fruediger 3:a6e53ab2c8c0 1444 {
fruediger 3:a6e53ab2c8c0 1445 *id = tmp & DEVICE_ID_MASK;
fruediger 3:a6e53ab2c8c0 1446 return true;
fruediger 3:a6e53ab2c8c0 1447 }
fruediger 3:a6e53ab2c8c0 1448
fruediger 3:a6e53ab2c8c0 1449 return false;
fruediger 0:95916b07e8be 1450 }