Felix Rüdiger / MPU6050_lib

Dependents:   BLE_Nano_MPU6050Service

Committer:
fruediger
Date:
Thu Jul 02 00:39:12 2015 +0000
Revision:
1:96a227d1ca7e
Parent:
0:95916b07e8be
Child:
2:32b13cc64cb0
more complete port

Who changed what in which revision?

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 1:96a227d1ca7e 28 inline 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 1:96a227d1ca7e 48 inline 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 1:96a227d1ca7e 62 *level = 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 1:96a227d1ca7e 98 *frameSync = 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 1:96a227d1ca7e 116 *bandwith = 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 1:96a227d1ca7e 138 *enabled = ((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 1:96a227d1ca7e 161 *enabled = ((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 1:96a227d1ca7e 184 *enabled = ((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 1:96a227d1ca7e 207 *gyroRange = 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 1:96a227d1ca7e 229 *enabled = ((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 1:96a227d1ca7e 252 *enabled = ((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 1:96a227d1ca7e 275 *enabled = ((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 1:96a227d1ca7e 298 *frequency = 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 1:96a227d1ca7e 316 *accelRange = 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 1:96a227d1ca7e 422 *enabled = ((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 1:96a227d1ca7e 445 *enabled = ((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 1:96a227d1ca7e 468 *enabled = ((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 1:96a227d1ca7e 491 *enabled = ((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 1:96a227d1ca7e 514 *enabled = ((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 1:96a227d1ca7e 530 }
fruediger 1:96a227d1ca7e 531
fruediger 1:96a227d1ca7e 532 /**
fruediger 1:96a227d1ca7e 533 * REG_INT_PIN_CFG register
fruediger 1:96a227d1ca7e 534 */
fruediger 1:96a227d1ca7e 535
fruediger 1:96a227d1ca7e 536 bool MPU6050::getInterruptLevel(InterruptLevel *level, float timeout_secs)
fruediger 1:96a227d1ca7e 537 {
fruediger 1:96a227d1ca7e 538 uint8_t tmp;
fruediger 1:96a227d1ca7e 539 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 540 {
fruediger 1:96a227d1ca7e 541 *level = static_cast<InterruptLevel>(tmp & INT_LEVEL_MASK);
fruediger 1:96a227d1ca7e 542 return true;
fruediger 1:96a227d1ca7e 543 }
fruediger 1:96a227d1ca7e 544
fruediger 1:96a227d1ca7e 545 return false;
fruediger 1:96a227d1ca7e 546 }
fruediger 1:96a227d1ca7e 547
fruediger 1:96a227d1ca7e 548 bool MPU6050::setInterruptLevel(InterruptLevel level, float timeout_secs)
fruediger 1:96a227d1ca7e 549 {
fruediger 1:96a227d1ca7e 550 uint8_t tmp;
fruediger 1:96a227d1ca7e 551 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 552 }
fruediger 1:96a227d1ca7e 553
fruediger 1:96a227d1ca7e 554 bool MPU6050::getInterruptDrive(InterruptDrive *drive, float timeout_secs)
fruediger 1:96a227d1ca7e 555 {
fruediger 1:96a227d1ca7e 556 uint8_t tmp;
fruediger 1:96a227d1ca7e 557 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 558 {
fruediger 1:96a227d1ca7e 559 *drive = static_cast<InterruptDrive>(tmp & INT_DRIVE_MASK);
fruediger 1:96a227d1ca7e 560 return true;
fruediger 1:96a227d1ca7e 561 }
fruediger 1:96a227d1ca7e 562
fruediger 1:96a227d1ca7e 563 return false;
fruediger 1:96a227d1ca7e 564 }
fruediger 1:96a227d1ca7e 565
fruediger 1:96a227d1ca7e 566 bool MPU6050::setInterruptDrive(InterruptDrive drive, float timeout_secs)
fruediger 1:96a227d1ca7e 567 {
fruediger 1:96a227d1ca7e 568 uint8_t tmp;
fruediger 1:96a227d1ca7e 569 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 570 }
fruediger 1:96a227d1ca7e 571
fruediger 1:96a227d1ca7e 572 bool MPU6050::getInterruptLatch(InterruptLatch *latch, float timeout_secs)
fruediger 1:96a227d1ca7e 573 {
fruediger 1:96a227d1ca7e 574 uint8_t tmp;
fruediger 1:96a227d1ca7e 575 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 576 {
fruediger 1:96a227d1ca7e 577 *latch = static_cast<InterruptLatch>(tmp & INT_LATCH_MASK);
fruediger 1:96a227d1ca7e 578 return true;
fruediger 1:96a227d1ca7e 579 }
fruediger 1:96a227d1ca7e 580
fruediger 1:96a227d1ca7e 581 return false;
fruediger 1:96a227d1ca7e 582 }
fruediger 1:96a227d1ca7e 583
fruediger 1:96a227d1ca7e 584 bool MPU6050::setInterruptLatch(InterruptLatch latch, float timeout_secs)
fruediger 1:96a227d1ca7e 585 {
fruediger 1:96a227d1ca7e 586 uint8_t tmp;
fruediger 1:96a227d1ca7e 587 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 588 }
fruediger 1:96a227d1ca7e 589
fruediger 1:96a227d1ca7e 590 bool MPU6050::getInterruptLatchClear(InterruptClear *latchClear, float timeout_secs)
fruediger 1:96a227d1ca7e 591 {
fruediger 1:96a227d1ca7e 592 uint8_t tmp;
fruediger 1:96a227d1ca7e 593 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 594 {
fruediger 1:96a227d1ca7e 595 *latchClear = static_cast<InterruptClear>(tmp & INT_CLEAR_MASK);
fruediger 1:96a227d1ca7e 596 return true;
fruediger 1:96a227d1ca7e 597 }
fruediger 1:96a227d1ca7e 598
fruediger 1:96a227d1ca7e 599 return false;
fruediger 1:96a227d1ca7e 600 }
fruediger 1:96a227d1ca7e 601
fruediger 1:96a227d1ca7e 602 bool MPU6050::setInterruptLatchClear(InterruptClear latchClear, float timeout_secs)
fruediger 1:96a227d1ca7e 603 {
fruediger 1:96a227d1ca7e 604 uint8_t tmp;
fruediger 1:96a227d1ca7e 605 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 606 }
fruediger 1:96a227d1ca7e 607
fruediger 1:96a227d1ca7e 608 bool MPU6050::getInterruptFSyncLevel(InterruptFSyncLevel *fsyncLevel, float timeout_secs)
fruediger 1:96a227d1ca7e 609 {
fruediger 1:96a227d1ca7e 610 uint8_t tmp;
fruediger 1:96a227d1ca7e 611 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 612 {
fruediger 1:96a227d1ca7e 613 *fsyncLevel = static_cast<InterruptFSyncLevel>(tmp & INT_FSYNC_LEVEL_MASK);
fruediger 1:96a227d1ca7e 614 return true;
fruediger 1:96a227d1ca7e 615 }
fruediger 1:96a227d1ca7e 616
fruediger 1:96a227d1ca7e 617 return false;
fruediger 1:96a227d1ca7e 618 }
fruediger 1:96a227d1ca7e 619
fruediger 1:96a227d1ca7e 620 bool MPU6050::setInterruptFSyncLevel(InterruptFSyncLevel fsyncLevel, float timeout_secs)
fruediger 1:96a227d1ca7e 621 {
fruediger 1:96a227d1ca7e 622 uint8_t tmp;
fruediger 1:96a227d1ca7e 623 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 624 }
fruediger 1:96a227d1ca7e 625
fruediger 1:96a227d1ca7e 626 bool MPU6050::getInterruptFSyncEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 627 {
fruediger 1:96a227d1ca7e 628 uint8_t tmp;
fruediger 1:96a227d1ca7e 629 if (this->read(REG_INT_PIN_CFG, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 630 {
fruediger 1:96a227d1ca7e 631 *enabled = ((tmp & INT_FSYNC_EN_MASK) != 0);
fruediger 1:96a227d1ca7e 632 return true;
fruediger 1:96a227d1ca7e 633 }
fruediger 1:96a227d1ca7e 634
fruediger 1:96a227d1ca7e 635 return false;
fruediger 1:96a227d1ca7e 636 }
fruediger 1:96a227d1ca7e 637
fruediger 1:96a227d1ca7e 638 bool MPU6050::setInterruptFSyncEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 639 {
fruediger 1:96a227d1ca7e 640 uint8_t tmp;
fruediger 1:96a227d1ca7e 641 if (this->read(REG_INT_PIN_CFG, &tmp))
fruediger 1:96a227d1ca7e 642 {
fruediger 1:96a227d1ca7e 643 tmp &= ~(INT_FSYNC_EN_MASK);
fruediger 1:96a227d1ca7e 644 return this->write(REG_FIFO_EN, enabled ? (tmp | INT_FSYNC_EN_MASK) : tmp);
fruediger 1:96a227d1ca7e 645 }
fruediger 1:96a227d1ca7e 646 return false;
fruediger 1:96a227d1ca7e 647 }
fruediger 1:96a227d1ca7e 648
fruediger 1:96a227d1ca7e 649 /**
fruediger 1:96a227d1ca7e 650 * REG_INT_ENABLE register
fruediger 1:96a227d1ca7e 651 */
fruediger 1:96a227d1ca7e 652
fruediger 1:96a227d1ca7e 653 bool MPU6050::getInterruptsEnabled(Interrupt *interruptSet, float timeout_secs)
fruediger 1:96a227d1ca7e 654 {
fruediger 1:96a227d1ca7e 655 uint8_t tmp;
fruediger 1:96a227d1ca7e 656 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 657 {
fruediger 1:96a227d1ca7e 658 *interruptSet = static_cast<Interrupt>(tmp);
fruediger 1:96a227d1ca7e 659 return true;
fruediger 1:96a227d1ca7e 660 }
fruediger 1:96a227d1ca7e 661 return false;
fruediger 1:96a227d1ca7e 662 }
fruediger 1:96a227d1ca7e 663
fruediger 1:96a227d1ca7e 664 bool MPU6050::setInterruptsEnabled(Interrupt interruptSet, float timeout_secs)
fruediger 1:96a227d1ca7e 665 {
fruediger 1:96a227d1ca7e 666 uint8_t tmp = interruptSet;
fruediger 1:96a227d1ca7e 667 return this->write(REG_INT_ENABLE, tmp, timeout_secs);
fruediger 1:96a227d1ca7e 668 }
fruediger 1:96a227d1ca7e 669
fruediger 1:96a227d1ca7e 670 bool MPU6050::getInterruptFreefallEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 671 {
fruediger 1:96a227d1ca7e 672 uint8_t tmp;
fruediger 1:96a227d1ca7e 673 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 674 {
fruediger 1:96a227d1ca7e 675 *enabled = ((tmp & INT_FREEFALL) != 0);
fruediger 1:96a227d1ca7e 676 return true;
fruediger 1:96a227d1ca7e 677 }
fruediger 1:96a227d1ca7e 678
fruediger 1:96a227d1ca7e 679 return false;
fruediger 1:96a227d1ca7e 680 }
fruediger 1:96a227d1ca7e 681
fruediger 1:96a227d1ca7e 682 bool MPU6050::setInterruptFreefallEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 683 {
fruediger 1:96a227d1ca7e 684 uint8_t tmp;
fruediger 1:96a227d1ca7e 685 if (this->read(REG_INT_ENABLE, &tmp))
fruediger 1:96a227d1ca7e 686 {
fruediger 1:96a227d1ca7e 687 tmp &= ~(INT_FREEFALL);
fruediger 1:96a227d1ca7e 688 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_FREEFALL) : tmp);
fruediger 1:96a227d1ca7e 689 }
fruediger 1:96a227d1ca7e 690 return false;
fruediger 1:96a227d1ca7e 691 }
fruediger 1:96a227d1ca7e 692
fruediger 1:96a227d1ca7e 693 bool MPU6050::getInterruptMotionEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 694 {
fruediger 1:96a227d1ca7e 695 uint8_t tmp;
fruediger 1:96a227d1ca7e 696 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 697 {
fruediger 1:96a227d1ca7e 698 *enabled = ((tmp & INT_MOTION) != 0);
fruediger 1:96a227d1ca7e 699 return true;
fruediger 1:96a227d1ca7e 700 }
fruediger 1:96a227d1ca7e 701
fruediger 1:96a227d1ca7e 702 return false;
fruediger 1:96a227d1ca7e 703 }
fruediger 1:96a227d1ca7e 704
fruediger 1:96a227d1ca7e 705 bool MPU6050::setInterruptMotionEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 706 {
fruediger 1:96a227d1ca7e 707 uint8_t tmp;
fruediger 1:96a227d1ca7e 708 if (this->read(REG_INT_ENABLE, &tmp))
fruediger 1:96a227d1ca7e 709 {
fruediger 1:96a227d1ca7e 710 tmp &= ~(INT_MOTION);
fruediger 1:96a227d1ca7e 711 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_MOTION) : tmp);
fruediger 1:96a227d1ca7e 712 }
fruediger 1:96a227d1ca7e 713 return false;
fruediger 1:96a227d1ca7e 714 }
fruediger 1:96a227d1ca7e 715
fruediger 1:96a227d1ca7e 716 bool MPU6050::getInterruptZeroMotionEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 717 {
fruediger 1:96a227d1ca7e 718 uint8_t tmp;
fruediger 1:96a227d1ca7e 719 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 720 {
fruediger 1:96a227d1ca7e 721 *enabled = ((tmp & INT_ZERO_MOTION) != 0);
fruediger 1:96a227d1ca7e 722 return true;
fruediger 1:96a227d1ca7e 723 }
fruediger 1:96a227d1ca7e 724
fruediger 1:96a227d1ca7e 725 return false;
fruediger 1:96a227d1ca7e 726 }
fruediger 1:96a227d1ca7e 727
fruediger 1:96a227d1ca7e 728 bool MPU6050::setInterruptZeroMotionEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 729 {
fruediger 1:96a227d1ca7e 730 uint8_t tmp;
fruediger 1:96a227d1ca7e 731 if (this->read(REG_INT_ENABLE, &tmp))
fruediger 1:96a227d1ca7e 732 {
fruediger 1:96a227d1ca7e 733 tmp &= ~(INT_ZERO_MOTION);
fruediger 1:96a227d1ca7e 734 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_ZERO_MOTION) : tmp);
fruediger 1:96a227d1ca7e 735 }
fruediger 1:96a227d1ca7e 736 return false;
fruediger 1:96a227d1ca7e 737 }
fruediger 1:96a227d1ca7e 738
fruediger 1:96a227d1ca7e 739 bool MPU6050::getInterruptFIFOOverflowEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 740 {
fruediger 1:96a227d1ca7e 741 uint8_t tmp;
fruediger 1:96a227d1ca7e 742 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 743 {
fruediger 1:96a227d1ca7e 744 *enabled = ((tmp & INT_FIFO_OVERFLOW) != 0);
fruediger 1:96a227d1ca7e 745 return true;
fruediger 1:96a227d1ca7e 746 }
fruediger 1:96a227d1ca7e 747
fruediger 1:96a227d1ca7e 748 return false;
fruediger 1:96a227d1ca7e 749 }
fruediger 1:96a227d1ca7e 750
fruediger 1:96a227d1ca7e 751 bool MPU6050::setInterruptFIFOOverflowEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 752 {
fruediger 1:96a227d1ca7e 753 uint8_t tmp;
fruediger 1:96a227d1ca7e 754 if (this->read(REG_INT_ENABLE, &tmp))
fruediger 1:96a227d1ca7e 755 {
fruediger 1:96a227d1ca7e 756 tmp &= ~(INT_FIFO_OVERFLOW);
fruediger 1:96a227d1ca7e 757 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_FIFO_OVERFLOW) : tmp);
fruediger 1:96a227d1ca7e 758 }
fruediger 1:96a227d1ca7e 759 return false;
fruediger 1:96a227d1ca7e 760 }
fruediger 1:96a227d1ca7e 761
fruediger 1:96a227d1ca7e 762 bool MPU6050::getInterruptDataReadyEnabled(bool *enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 763 {
fruediger 1:96a227d1ca7e 764 uint8_t tmp;
fruediger 1:96a227d1ca7e 765 if (this->read(REG_INT_ENABLE, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 766 {
fruediger 1:96a227d1ca7e 767 *enabled = ((tmp & INT_DATA_READY) != 0);
fruediger 1:96a227d1ca7e 768 return true;
fruediger 1:96a227d1ca7e 769 }
fruediger 1:96a227d1ca7e 770
fruediger 1:96a227d1ca7e 771 return false;
fruediger 1:96a227d1ca7e 772 }
fruediger 1:96a227d1ca7e 773
fruediger 1:96a227d1ca7e 774 bool MPU6050::setInterruptDataReadyEnabled(bool enabled, float timeout_secs)
fruediger 1:96a227d1ca7e 775 {
fruediger 1:96a227d1ca7e 776 uint8_t tmp;
fruediger 1:96a227d1ca7e 777 if (this->read(REG_INT_ENABLE, &tmp))
fruediger 1:96a227d1ca7e 778 {
fruediger 1:96a227d1ca7e 779 tmp &= ~(INT_DATA_READY);
fruediger 1:96a227d1ca7e 780 return this->write(REG_INT_ENABLE, enabled ? (tmp | INT_DATA_READY) : tmp);
fruediger 1:96a227d1ca7e 781 }
fruediger 1:96a227d1ca7e 782 return false;
fruediger 1:96a227d1ca7e 783 }
fruediger 1:96a227d1ca7e 784
fruediger 1:96a227d1ca7e 785 bool MPU6050::getInterruptStatuses(Interrupt *interruptSet, float timeout_secs)
fruediger 1:96a227d1ca7e 786 {
fruediger 1:96a227d1ca7e 787 uint8_t tmp;
fruediger 1:96a227d1ca7e 788 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 789 {
fruediger 1:96a227d1ca7e 790 *interruptSet = static_cast<Interrupt>(tmp);
fruediger 1:96a227d1ca7e 791 return true;
fruediger 1:96a227d1ca7e 792 }
fruediger 1:96a227d1ca7e 793 return false;
fruediger 1:96a227d1ca7e 794 }
fruediger 1:96a227d1ca7e 795
fruediger 1:96a227d1ca7e 796 bool MPU6050::getInterruptFreefallStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 797 {
fruediger 1:96a227d1ca7e 798 uint8_t tmp;
fruediger 1:96a227d1ca7e 799 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 800 {
fruediger 1:96a227d1ca7e 801 *status = ((tmp & INT_FREEFALL) != 0);
fruediger 1:96a227d1ca7e 802 return true;
fruediger 1:96a227d1ca7e 803 }
fruediger 1:96a227d1ca7e 804
fruediger 1:96a227d1ca7e 805 return false;
fruediger 1:96a227d1ca7e 806 }
fruediger 1:96a227d1ca7e 807
fruediger 1:96a227d1ca7e 808 bool MPU6050::getInterruptMotionStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 809 {
fruediger 1:96a227d1ca7e 810 uint8_t tmp;
fruediger 1:96a227d1ca7e 811 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 812 {
fruediger 1:96a227d1ca7e 813 *status = ((tmp & INT_MOTION) != 0);
fruediger 1:96a227d1ca7e 814 return true;
fruediger 1:96a227d1ca7e 815 }
fruediger 1:96a227d1ca7e 816
fruediger 1:96a227d1ca7e 817 return false;
fruediger 1:96a227d1ca7e 818 }
fruediger 1:96a227d1ca7e 819
fruediger 1:96a227d1ca7e 820 bool MPU6050::getInterruptZeroMotionStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 821 {
fruediger 1:96a227d1ca7e 822 uint8_t tmp;
fruediger 1:96a227d1ca7e 823 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 824 {
fruediger 1:96a227d1ca7e 825 *status = ((tmp & INT_ZERO_MOTION) != 0);
fruediger 1:96a227d1ca7e 826 return true;
fruediger 1:96a227d1ca7e 827 }
fruediger 1:96a227d1ca7e 828
fruediger 1:96a227d1ca7e 829 return false;
fruediger 1:96a227d1ca7e 830 }
fruediger 1:96a227d1ca7e 831
fruediger 1:96a227d1ca7e 832 bool MPU6050::getInterruptFIFOOverflowStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 833 {
fruediger 1:96a227d1ca7e 834 uint8_t tmp;
fruediger 1:96a227d1ca7e 835 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 836 {
fruediger 1:96a227d1ca7e 837 *status = ((tmp & INT_FIFO_OVERFLOW) != 0);
fruediger 1:96a227d1ca7e 838 return true;
fruediger 1:96a227d1ca7e 839 }
fruediger 1:96a227d1ca7e 840
fruediger 1:96a227d1ca7e 841 return false;
fruediger 1:96a227d1ca7e 842 }
fruediger 1:96a227d1ca7e 843
fruediger 1:96a227d1ca7e 844 bool MPU6050::getInterruptDataReadyStatus(bool *status, float timeout_secs)
fruediger 1:96a227d1ca7e 845 {
fruediger 1:96a227d1ca7e 846 uint8_t tmp;
fruediger 1:96a227d1ca7e 847 if (this->read(REG_INT_STATUS, &tmp, timeout_secs))
fruediger 1:96a227d1ca7e 848 {
fruediger 1:96a227d1ca7e 849 *status = ((tmp & INT_DATA_READY) != 0);
fruediger 1:96a227d1ca7e 850 return true;
fruediger 1:96a227d1ca7e 851 }
fruediger 1:96a227d1ca7e 852
fruediger 1:96a227d1ca7e 853 return false;
fruediger 1:96a227d1ca7e 854 }
fruediger 1:96a227d1ca7e 855
fruediger 1:96a227d1ca7e 856 /**
fruediger 1:96a227d1ca7e 857 * REG_ACCEL_XOUT_H
fruediger 1:96a227d1ca7e 858 * REG_ACCEL_XOUT_L
fruediger 1:96a227d1ca7e 859 * REG_ACCEL_YOUT_H
fruediger 1:96a227d1ca7e 860 * REG_ACCEL_YOUT_L
fruediger 1:96a227d1ca7e 861 * REG_ACCEL_ZOUT_H
fruediger 1:96a227d1ca7e 862 * REG_ACCEL_ZOUT_L
fruediger 1:96a227d1ca7e 863 * REG_TEMP_OUT_H
fruediger 1:96a227d1ca7e 864 * REG_TEMP_OUT_L
fruediger 1:96a227d1ca7e 865 * REG_GYRO_XOUT_H
fruediger 1:96a227d1ca7e 866 * REG_GYRO_XOUT_L
fruediger 1:96a227d1ca7e 867 * REG_GYRO_YOUT_H
fruediger 1:96a227d1ca7e 868 * REG_GYRO_YOUT_L
fruediger 1:96a227d1ca7e 869 * REG_GYRO_ZOUT_H
fruediger 1:96a227d1ca7e 870 * REG_GYRO_ZOUT_L registers
fruediger 1:96a227d1ca7e 871 */
fruediger 1:96a227d1ca7e 872
fruediger 1:96a227d1ca7e 873 /** Acceleration */
fruediger 1:96a227d1ca7e 874
fruediger 1:96a227d1ca7e 875 bool MPU6050::getAcceleration(int16_t *ax, int16_t *ay, int16_t *az, float timeout_secs)
fruediger 1:96a227d1ca7e 876 {
fruediger 1:96a227d1ca7e 877 uint8_t tmp[6];
fruediger 1:96a227d1ca7e 878 if (this->read(REG_ACCEL_XOUT_H, tmp, 6, timeout_secs))
fruediger 1:96a227d1ca7e 879 {
fruediger 1:96a227d1ca7e 880 *ax = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 881 *ay = (((int16_t)tmp[2]) << 8) | tmp[3];
fruediger 1:96a227d1ca7e 882 *az = (((int16_t)tmp[4]) << 8) | tmp[5];
fruediger 1:96a227d1ca7e 883
fruediger 1:96a227d1ca7e 884 return true;
fruediger 1:96a227d1ca7e 885 }
fruediger 1:96a227d1ca7e 886
fruediger 1:96a227d1ca7e 887 return false;
fruediger 1:96a227d1ca7e 888 }
fruediger 1:96a227d1ca7e 889
fruediger 1:96a227d1ca7e 890 bool MPU6050::getAccelerationX(int16_t *ax, float timeout_secs)
fruediger 1:96a227d1ca7e 891 {
fruediger 1:96a227d1ca7e 892 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 893 if (this->read(REG_ACCEL_XOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 894 {
fruediger 1:96a227d1ca7e 895 *ax = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 896 return true;
fruediger 1:96a227d1ca7e 897 }
fruediger 1:96a227d1ca7e 898
fruediger 1:96a227d1ca7e 899 return false;
fruediger 1:96a227d1ca7e 900 }
fruediger 1:96a227d1ca7e 901
fruediger 1:96a227d1ca7e 902 bool MPU6050::getAccelerationY(int16_t *ay, float timeout_secs)
fruediger 1:96a227d1ca7e 903 {
fruediger 1:96a227d1ca7e 904 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 905 if (this->read(REG_ACCEL_YOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 906 {
fruediger 1:96a227d1ca7e 907 *ay = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 908 return true;
fruediger 1:96a227d1ca7e 909 }
fruediger 1:96a227d1ca7e 910
fruediger 1:96a227d1ca7e 911 return false;
fruediger 1:96a227d1ca7e 912 }
fruediger 1:96a227d1ca7e 913
fruediger 1:96a227d1ca7e 914 bool MPU6050::getAccelerationZ(int16_t *az, float timeout_secs)
fruediger 1:96a227d1ca7e 915 {
fruediger 1:96a227d1ca7e 916 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 917 if (this->read(REG_ACCEL_ZOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 918 {
fruediger 1:96a227d1ca7e 919 *az = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 920 return true;
fruediger 1:96a227d1ca7e 921 }
fruediger 1:96a227d1ca7e 922
fruediger 1:96a227d1ca7e 923 return false;
fruediger 1:96a227d1ca7e 924 }
fruediger 1:96a227d1ca7e 925
fruediger 1:96a227d1ca7e 926 /** Temperature */
fruediger 1:96a227d1ca7e 927
fruediger 1:96a227d1ca7e 928 bool MPU6050::getTemperature(int16_t *temp, float timeout_secs)
fruediger 1:96a227d1ca7e 929 {
fruediger 1:96a227d1ca7e 930 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 931 if (this->read(REG_TEMP_OUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 932 {
fruediger 1:96a227d1ca7e 933 *temp = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 934 return true;
fruediger 1:96a227d1ca7e 935 }
fruediger 1:96a227d1ca7e 936
fruediger 1:96a227d1ca7e 937 return false;
fruediger 1:96a227d1ca7e 938 }
fruediger 1:96a227d1ca7e 939
fruediger 1:96a227d1ca7e 940 /** Rotation speed */
fruediger 1:96a227d1ca7e 941
fruediger 1:96a227d1ca7e 942 bool MPU6050::getRotationSpeed(int16_t *ox, int16_t *oy, int16_t *oz, float timeout_secs)
fruediger 1:96a227d1ca7e 943 {
fruediger 1:96a227d1ca7e 944 uint8_t tmp[6];
fruediger 1:96a227d1ca7e 945 if (this->read(REG_GYRO_XOUT_H, tmp, 6, timeout_secs))
fruediger 1:96a227d1ca7e 946 {
fruediger 1:96a227d1ca7e 947 *ox = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 948 *oy = (((int16_t)tmp[2]) << 8) | tmp[3];
fruediger 1:96a227d1ca7e 949 *oz = (((int16_t)tmp[4]) << 8) | tmp[5];
fruediger 1:96a227d1ca7e 950
fruediger 1:96a227d1ca7e 951 return true;
fruediger 1:96a227d1ca7e 952 }
fruediger 1:96a227d1ca7e 953
fruediger 1:96a227d1ca7e 954 return false;
fruediger 1:96a227d1ca7e 955 }
fruediger 1:96a227d1ca7e 956
fruediger 1:96a227d1ca7e 957 bool MPU6050::getRotationSpeedX(int16_t *ox, float timeout_secs)
fruediger 1:96a227d1ca7e 958 {
fruediger 1:96a227d1ca7e 959 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 960 if (this->read(REG_GYRO_XOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 961 {
fruediger 1:96a227d1ca7e 962 *ox = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 963 return true;
fruediger 1:96a227d1ca7e 964 }
fruediger 1:96a227d1ca7e 965
fruediger 1:96a227d1ca7e 966 return false;
fruediger 1:96a227d1ca7e 967 }
fruediger 1:96a227d1ca7e 968
fruediger 1:96a227d1ca7e 969 bool MPU6050::getRotationSpeedY(int16_t *oy, float timeout_secs)
fruediger 1:96a227d1ca7e 970 {
fruediger 1:96a227d1ca7e 971 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 972 if (this->read(REG_GYRO_YOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 973 {
fruediger 1:96a227d1ca7e 974 *oy = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 975 return true;
fruediger 1:96a227d1ca7e 976 }
fruediger 1:96a227d1ca7e 977
fruediger 1:96a227d1ca7e 978 return false;
fruediger 1:96a227d1ca7e 979 }
fruediger 1:96a227d1ca7e 980
fruediger 1:96a227d1ca7e 981 bool MPU6050::getRotationSpeedZ(int16_t *oz, float timeout_secs)
fruediger 1:96a227d1ca7e 982 {
fruediger 1:96a227d1ca7e 983 uint8_t tmp[2];
fruediger 1:96a227d1ca7e 984 if (this->read(REG_GYRO_ZOUT_H, tmp, 2, timeout_secs))
fruediger 1:96a227d1ca7e 985 {
fruediger 1:96a227d1ca7e 986 *oz = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 987 return true;
fruediger 1:96a227d1ca7e 988 }
fruediger 1:96a227d1ca7e 989
fruediger 1:96a227d1ca7e 990 return false;
fruediger 1:96a227d1ca7e 991 }
fruediger 1:96a227d1ca7e 992
fruediger 1:96a227d1ca7e 993 /** All three */
fruediger 1:96a227d1ca7e 994
fruediger 1:96a227d1ca7e 995 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 996 {
fruediger 1:96a227d1ca7e 997 uint8_t tmp[14];
fruediger 1:96a227d1ca7e 998 if (this->read(REG_GYRO_XOUT_H, tmp, 14, timeout_secs))
fruediger 1:96a227d1ca7e 999 {
fruediger 1:96a227d1ca7e 1000 *ax = (((int16_t)tmp[0]) << 8) | tmp[1];
fruediger 1:96a227d1ca7e 1001 *ay = (((int16_t)tmp[2]) << 8) | tmp[3];
fruediger 1:96a227d1ca7e 1002 *az = (((int16_t)tmp[4]) << 8) | tmp[5];
fruediger 1:96a227d1ca7e 1003 *temp = (((int16_t)tmp[6]) << 8) | tmp[7];
fruediger 1:96a227d1ca7e 1004 *ox = (((int16_t)tmp[8]) << 8) | tmp[9];
fruediger 1:96a227d1ca7e 1005 *oy = (((int16_t)tmp[10]) << 8) | tmp[11];
fruediger 1:96a227d1ca7e 1006 *oz = (((int16_t)tmp[12]) << 8) | tmp[13];
fruediger 1:96a227d1ca7e 1007
fruediger 1:96a227d1ca7e 1008 return true;
fruediger 1:96a227d1ca7e 1009 }
fruediger 1:96a227d1ca7e 1010
fruediger 1:96a227d1ca7e 1011 return false;
fruediger 0:95916b07e8be 1012 }