Class Module for MMA845x I2C Accelerometer.

Dependents:   mDotEVBM2X MTDOT-EVBDemo-DRH MTDOT-BOX-EVB-Factory-Firmware-LIB-108 MTDOT-UDKDemo_Senet ... more

Fork of MMA845x by Sam Grove

Committer:
mfiore
Date:
Wed Oct 28 17:48:15 2015 +0000
Revision:
2:70df6adad015
Parent:
1:41af2b3eefb5
Child:
3:7c2fbf79f607
<CTRL><SHIFT><f> for formatting

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:9d1e3a344e4f 1 /**
sam_grove 0:9d1e3a344e4f 2 * @file MMA845x.cpp
falingtrea 1:41af2b3eefb5 3 * @brief Device driver - MMA845X 3-axis accelerometer IC W/RTOS support
falingtrea 1:41af2b3eefb5 4 * @author Tim Barr
sam_grove 0:9d1e3a344e4f 5 * @version 1.0
sam_grove 0:9d1e3a344e4f 6 * @see http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8451Q.pdf
sam_grove 0:9d1e3a344e4f 7 * @see http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8452Q.pdf
sam_grove 0:9d1e3a344e4f 8 * @see http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8453Q.pdf
sam_grove 0:9d1e3a344e4f 9 *
falingtrea 1:41af2b3eefb5 10 * Copyright (c) 2015
sam_grove 0:9d1e3a344e4f 11 *
sam_grove 0:9d1e3a344e4f 12 * Licensed under the Apache License, Version 2.0 (the "License");
sam_grove 0:9d1e3a344e4f 13 * you may not use this file except in compliance with the License.
sam_grove 0:9d1e3a344e4f 14 * You may obtain a copy of the License at
sam_grove 0:9d1e3a344e4f 15 *
sam_grove 0:9d1e3a344e4f 16 * http://www.apache.org/licenses/LICENSE-2.0
sam_grove 0:9d1e3a344e4f 17 *
sam_grove 0:9d1e3a344e4f 18 * Unless required by applicable law or agreed to in writing, software
sam_grove 0:9d1e3a344e4f 19 * distributed under the License is distributed on an "AS IS" BASIS,
sam_grove 0:9d1e3a344e4f 20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sam_grove 0:9d1e3a344e4f 21 * See the License for the specific language governing permissions and
sam_grove 0:9d1e3a344e4f 22 * limitations under the License.
falingtrea 1:41af2b3eefb5 23 *
falingtrea 1:41af2b3eefb5 24 * 5/5/2015 Forked from https://developer.mbed.org/users/sam_grove/code/MMA845x/
falingtrea 1:41af2b3eefb5 25 *
falingtrea 1:41af2b3eefb5 26 * 6/20/2015 TAB Added setup functions and polling data capability. Also added RTOS calls
falingtrea 1:41af2b3eefb5 27 * TODO Still need to add interrupt support for other Accelerometer mode support
sam_grove 0:9d1e3a344e4f 28 */
mfiore 2:70df6adad015 29
sam_grove 0:9d1e3a344e4f 30 #include "MMA845x.h"
falingtrea 1:41af2b3eefb5 31 #include "mbed_debug.h"
falingtrea 1:41af2b3eefb5 32 #include "rtos.h"
mfiore 2:70df6adad015 33
falingtrea 1:41af2b3eefb5 34 MMA845x::MMA845x(I2C &i2c, SA0 const i2c_addr, InterruptIn* int1, InterruptIn* int2)
sam_grove 0:9d1e3a344e4f 35 {
sam_grove 0:9d1e3a344e4f 36 _i2c = &i2c;
falingtrea 1:41af2b3eefb5 37 _int1 = int1;
falingtrea 1:41af2b3eefb5 38 _int2 = int2;
mfiore 2:70df6adad015 39
falingtrea 1:41af2b3eefb5 40 _i2c_addr = (0x1c | i2c_addr) << 1;
mfiore 2:70df6adad015 41
sam_grove 0:9d1e3a344e4f 42 MMA845x::init();
sam_grove 0:9d1e3a344e4f 43
sam_grove 0:9d1e3a344e4f 44 return;
sam_grove 0:9d1e3a344e4f 45 }
sam_grove 0:9d1e3a344e4f 46
falingtrea 1:41af2b3eefb5 47 uint8_t MMA845x::init(void)
sam_grove 0:9d1e3a344e4f 48 {
falingtrea 1:41af2b3eefb5 49 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 50 uint8_t i = 0;
falingtrea 1:41af2b3eefb5 51 char reg_val[1];
mfiore 2:70df6adad015 52
falingtrea 1:41af2b3eefb5 53 _i2c->frequency(100000);
falingtrea 1:41af2b3eefb5 54 _who_am_i = 0x00;
mfiore 2:70df6adad015 55
falingtrea 1:41af2b3eefb5 56 // Reset all registers to POR values
falingtrea 1:41af2b3eefb5 57 result = MMA845x::writeRegister(CTRL_REG2, 0xFF); //REG 0x2B
mfiore 2:70df6adad015 58 if (result == 0) {
falingtrea 1:41af2b3eefb5 59
mfiore 2:70df6adad015 60 do {
mfiore 2:70df6adad015 61 // wait for the reset bit to clear. readRegister may error out so we re-try 10 times
mfiore 2:70df6adad015 62 osDelay(200);
mfiore 2:70df6adad015 63 reg_val[0] = 0x40;
mfiore 2:70df6adad015 64 result = MMA845x::readRegister(CTRL_REG2,1,reg_val);
mfiore 2:70df6adad015 65 reg_val[0] = reg_val[0] & 0x40;
mfiore 2:70df6adad015 66 i++;
mfiore 2:70df6adad015 67 } while(((reg_val[0] != 0)||( result != 0)) && (i<=10));
falingtrea 1:41af2b3eefb5 68 }
falingtrea 1:41af2b3eefb5 69
mfiore 2:70df6adad015 70 if (result == 0) {
falingtrea 1:41af2b3eefb5 71 result = MMA845x::readRegister(WHO_AM_I,1,reg_val);
falingtrea 1:41af2b3eefb5 72 }
falingtrea 1:41af2b3eefb5 73
mfiore 2:70df6adad015 74 switch (reg_val[0]) {
mfiore 2:70df6adad015 75 case MMA8451:
mfiore 2:70df6adad015 76 case MMA8452:
mfiore 2:70df6adad015 77 case MMA8453:
mfiore 2:70df6adad015 78 _who_am_i= reg_val[0];
mfiore 2:70df6adad015 79 if ((_int1 == NULL) && (_int2 == NULL))
mfiore 2:70df6adad015 80 _polling_mode = true;
mfiore 2:70df6adad015 81 else _polling_mode = false;
mfiore 2:70df6adad015 82 break;
mfiore 2:70df6adad015 83 default:
mfiore 2:70df6adad015 84 debug ("Device not supported by this library!\n\r");
mfiore 2:70df6adad015 85 result = 1;
falingtrea 1:41af2b3eefb5 86 }
falingtrea 1:41af2b3eefb5 87
mfiore 2:70df6adad015 88 if(result != 0) {
falingtrea 1:41af2b3eefb5 89 debug("MMA845x:init failed\n\r");
falingtrea 1:41af2b3eefb5 90 }
mfiore 2:70df6adad015 91
falingtrea 1:41af2b3eefb5 92
mfiore 2:70df6adad015 93 return result;
falingtrea 1:41af2b3eefb5 94 }
falingtrea 1:41af2b3eefb5 95
falingtrea 1:41af2b3eefb5 96 uint8_t MMA845x::setCommonParameters(RANGE range, RESOLUTION resolution, LOW_NOISE lo_noise,
mfiore 2:70df6adad015 97 DATA_RATE data_rate, OVERSAMPLE_MODE os_mode, HPF_MODE hpf_mode) const
falingtrea 1:41af2b3eefb5 98 {
falingtrea 1:41af2b3eefb5 99 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 100 char datain[1];
falingtrea 1:41af2b3eefb5 101 uint8_t dataout = 0;
falingtrea 1:41af2b3eefb5 102
falingtrea 1:41af2b3eefb5 103 result |= MMA845x::readRegister(SYSMOD,1,datain); // Make sure MMA845x is in Stand-By mode
mfiore 2:70df6adad015 104 if ((datain[0] & 0x03) != 0 ) {
mfiore 2:70df6adad015 105 debug ("MMA845x not in STAND BY mode\n\f");
falingtrea 1:41af2b3eefb5 106 debug("MMA845x:setCommonParameters failed\n\r");
falingtrea 1:41af2b3eefb5 107 result = 1;
falingtrea 1:41af2b3eefb5 108 return result;
falingtrea 1:41af2b3eefb5 109 }
falingtrea 1:41af2b3eefb5 110
falingtrea 1:41af2b3eefb5 111 result |= MMA845x::readRegister(CTRL_REG1, 1, datain);
falingtrea 1:41af2b3eefb5 112 dataout = (datain[0] & 0xB1) | resolution | lo_noise | data_rate;
falingtrea 1:41af2b3eefb5 113 result |= MMA845x::writeRegister(CTRL_REG1, dataout); // Set resolution, Low Noise mode, and data rate
falingtrea 1:41af2b3eefb5 114
falingtrea 1:41af2b3eefb5 115 result |= MMA845x::readRegister(CTRL_REG2,1, datain);
falingtrea 1:41af2b3eefb5 116 dataout = (datain[0] & 0xFB) | os_mode;
falingtrea 1:41af2b3eefb5 117 result |= MMA845x::writeRegister(CTRL_REG2, dataout); // Set Oversample mode
falingtrea 1:41af2b3eefb5 118
falingtrea 1:41af2b3eefb5 119 result |= MMA845x::readRegister(XYZ_DATA_CFG,1, datain);
falingtrea 1:41af2b3eefb5 120 dataout = range | hpf_mode;
falingtrea 1:41af2b3eefb5 121 result |= MMA845x::writeRegister(XYZ_DATA_CFG, dataout); //Set HPF mode and range
falingtrea 1:41af2b3eefb5 122
falingtrea 1:41af2b3eefb5 123 // result |= MMA845x::readRegister(HP_FILTER_CUTOFF,1, datain);
falingtrea 1:41af2b3eefb5 124 // result |= MMA845x::writeRegister(HP_FILTER_CUTOFF, dataout); //REG 0xF HPF settings
falingtrea 1:41af2b3eefb5 125
mfiore 2:70df6adad015 126 if(result != 0) {
falingtrea 1:41af2b3eefb5 127 debug("MMA845x:setParameters failed\n\r");
falingtrea 1:41af2b3eefb5 128 }
mfiore 2:70df6adad015 129
mfiore 2:70df6adad015 130 return result;
mfiore 2:70df6adad015 131
falingtrea 1:41af2b3eefb5 132 }
falingtrea 1:41af2b3eefb5 133
falingtrea 1:41af2b3eefb5 134 uint8_t MMA845x::enableMotionDetect(void) const
falingtrea 1:41af2b3eefb5 135 {
falingtrea 1:41af2b3eefb5 136 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 137 return result;
mfiore 2:70df6adad015 138 }
mfiore 2:70df6adad015 139
falingtrea 1:41af2b3eefb5 140 uint8_t MMA845x::enablePulseDetect(void) const
falingtrea 1:41af2b3eefb5 141 {
falingtrea 1:41af2b3eefb5 142 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 143 return result;
mfiore 2:70df6adad015 144 }
falingtrea 1:41af2b3eefb5 145
falingtrea 1:41af2b3eefb5 146 uint8_t MMA845x::enableOrientationDetect(void) const
falingtrea 1:41af2b3eefb5 147 {
falingtrea 1:41af2b3eefb5 148 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 149
mfiore 2:70df6adad015 150 if(_who_am_i != MMA8451) {
falingtrea 1:41af2b3eefb5 151 debug("%s %d: Feature not compatible with the connected device.\n", __FILE__, __LINE__);
falingtrea 1:41af2b3eefb5 152 result = 1;
falingtrea 1:41af2b3eefb5 153 }
mfiore 2:70df6adad015 154
falingtrea 1:41af2b3eefb5 155 return result;
falingtrea 1:41af2b3eefb5 156 }
falingtrea 1:41af2b3eefb5 157
falingtrea 1:41af2b3eefb5 158 uint8_t MMA845x::enableTransientDetect(void) const
falingtrea 1:41af2b3eefb5 159 {
falingtrea 1:41af2b3eefb5 160 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 161 return result;
mfiore 2:70df6adad015 162 }
mfiore 2:70df6adad015 163
falingtrea 1:41af2b3eefb5 164 uint8_t MMA845x::enableAutoSleep(void) const
falingtrea 1:41af2b3eefb5 165 {
falingtrea 1:41af2b3eefb5 166 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 167 return result;
mfiore 2:70df6adad015 168 }
falingtrea 1:41af2b3eefb5 169
falingtrea 1:41af2b3eefb5 170 uint8_t MMA845x::enableFIFO(void) const
falingtrea 1:41af2b3eefb5 171 {
falingtrea 1:41af2b3eefb5 172 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 173
mfiore 2:70df6adad015 174 if(_who_am_i != MMA8451) {
falingtrea 1:41af2b3eefb5 175 debug("%s %d: Feature not compatible with the connected device.\n", __FILE__, __LINE__);
falingtrea 1:41af2b3eefb5 176 result = 1;
falingtrea 1:41af2b3eefb5 177 }
mfiore 2:70df6adad015 178
falingtrea 1:41af2b3eefb5 179 return result;
sam_grove 0:9d1e3a344e4f 180 }
sam_grove 0:9d1e3a344e4f 181
falingtrea 1:41af2b3eefb5 182 uint8_t MMA845x::activeMode(void) const
falingtrea 1:41af2b3eefb5 183 {
falingtrea 1:41af2b3eefb5 184 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 185 char datain[1];
falingtrea 1:41af2b3eefb5 186 uint8_t dataout;
falingtrea 1:41af2b3eefb5 187
falingtrea 1:41af2b3eefb5 188 result |= MMA845x::readRegister(CTRL_REG1,1, datain);
falingtrea 1:41af2b3eefb5 189 dataout = (datain[0] & 0xFE) | 0x01 ;
falingtrea 1:41af2b3eefb5 190 result |= MMA845x::writeRegister(CTRL_REG1, dataout); // Set to active mode
falingtrea 1:41af2b3eefb5 191
falingtrea 1:41af2b3eefb5 192 return result;
mfiore 2:70df6adad015 193 }
falingtrea 1:41af2b3eefb5 194 uint8_t MMA845x::standbyMode(void) const
falingtrea 1:41af2b3eefb5 195 {
falingtrea 1:41af2b3eefb5 196 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 197 char datain[1];
falingtrea 1:41af2b3eefb5 198 uint8_t dataout;
falingtrea 1:41af2b3eefb5 199
falingtrea 1:41af2b3eefb5 200 result |= MMA845x::readRegister(CTRL_REG1,1, datain);
falingtrea 1:41af2b3eefb5 201 dataout = (datain[0] & 0xFE);
falingtrea 1:41af2b3eefb5 202 result |= MMA845x::writeRegister(CTRL_REG1, dataout); // Set to standby mode
falingtrea 1:41af2b3eefb5 203
falingtrea 1:41af2b3eefb5 204 return result;
mfiore 2:70df6adad015 205 }
falingtrea 1:41af2b3eefb5 206
falingtrea 1:41af2b3eefb5 207 uint8_t MMA845x::getStatus(void) const
sam_grove 0:9d1e3a344e4f 208 {
falingtrea 1:41af2b3eefb5 209 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 210 char datain[1];
falingtrea 1:41af2b3eefb5 211 uint8_t dataout;
falingtrea 1:41af2b3eefb5 212
falingtrea 1:41af2b3eefb5 213 result = MMA845x::readRegister(STATUS,1, datain);
falingtrea 1:41af2b3eefb5 214
falingtrea 1:41af2b3eefb5 215 if (result != 0)
mfiore 2:70df6adad015 216 dataout = result;
falingtrea 1:41af2b3eefb5 217 else
mfiore 2:70df6adad015 218 dataout = datain[0];
falingtrea 1:41af2b3eefb5 219
falingtrea 1:41af2b3eefb5 220 return dataout;
mfiore 2:70df6adad015 221 }
falingtrea 1:41af2b3eefb5 222
falingtrea 1:41af2b3eefb5 223 int16_t MMA845x::getX(void)
falingtrea 1:41af2b3eefb5 224 {
falingtrea 1:41af2b3eefb5 225 char datain[2];
falingtrea 1:41af2b3eefb5 226
mfiore 2:70df6adad015 227 if (_polling_mode) {
falingtrea 1:41af2b3eefb5 228 MMA845x::readRegister(OUT_X_MSB,2, datain);
falingtrea 1:41af2b3eefb5 229 _data._x = ((datain[0] << 8) | datain[1]); /* data is 14 bit signed with 2 LSB = 0 */
falingtrea 1:41af2b3eefb5 230 _data._x /= 4; /* need to shift first to preserve sign then /4 to remove LSBs */
falingtrea 1:41af2b3eefb5 231 }
mfiore 2:70df6adad015 232 return _data._x;
falingtrea 1:41af2b3eefb5 233
sam_grove 0:9d1e3a344e4f 234 }
mfiore 2:70df6adad015 235
falingtrea 1:41af2b3eefb5 236 int16_t MMA845x::getY(void)
sam_grove 0:9d1e3a344e4f 237 {
falingtrea 1:41af2b3eefb5 238 char datain[2];
falingtrea 1:41af2b3eefb5 239
mfiore 2:70df6adad015 240 if (_polling_mode) {
falingtrea 1:41af2b3eefb5 241 MMA845x::readRegister(OUT_Y_MSB,2, datain);
falingtrea 1:41af2b3eefb5 242 _data._y = ((datain[0] << 8) | datain[1]); /* data is 14 bit signed with 2 LSB = 0 */
falingtrea 1:41af2b3eefb5 243 _data._y /= 4; /* need to shift first to preserve sign then /4 to remove LSBs */
falingtrea 1:41af2b3eefb5 244 }
mfiore 2:70df6adad015 245 return _data._y;
sam_grove 0:9d1e3a344e4f 246 }
sam_grove 0:9d1e3a344e4f 247
falingtrea 1:41af2b3eefb5 248 int16_t MMA845x::getZ(void)
sam_grove 0:9d1e3a344e4f 249 {
falingtrea 1:41af2b3eefb5 250 char datain[2];
falingtrea 1:41af2b3eefb5 251
mfiore 2:70df6adad015 252 if (_polling_mode) {
falingtrea 1:41af2b3eefb5 253 MMA845x::readRegister(OUT_Z_MSB,2, datain);
falingtrea 1:41af2b3eefb5 254 _data._z = ((datain[0] << 8) | datain[1]); /* data is 14 bit signed with 2 LSB = 0 */
falingtrea 1:41af2b3eefb5 255 _data._z /= 4; /* need to shift first to preserve sign then /4 to remove LSBs */
falingtrea 1:41af2b3eefb5 256 }
falingtrea 1:41af2b3eefb5 257
sam_grove 0:9d1e3a344e4f 258 return _data._z;
sam_grove 0:9d1e3a344e4f 259 }
mfiore 2:70df6adad015 260
falingtrea 1:41af2b3eefb5 261 MMA845x_DATA MMA845x::getXYZ(void)
sam_grove 0:9d1e3a344e4f 262 {
falingtrea 1:41af2b3eefb5 263 char datain[6];
falingtrea 1:41af2b3eefb5 264
mfiore 2:70df6adad015 265 if (_polling_mode) {
falingtrea 1:41af2b3eefb5 266 MMA845x::readRegister(OUT_X_MSB,6, datain); /* data is 14 bit signed with 2 LSB = 0 */
falingtrea 1:41af2b3eefb5 267 _data._x = ((datain[0] << 8) | datain[1]); /* need to shift first to preserve sign */
falingtrea 1:41af2b3eefb5 268 _data._x /= 4; /* then /4 to remove LSBs */
falingtrea 1:41af2b3eefb5 269 _data._y = ((datain[2] << 8) | datain[3]);
falingtrea 1:41af2b3eefb5 270 _data._y /= 4;
falingtrea 1:41af2b3eefb5 271 _data._z = ((datain[4] << 8) | datain[5]);
falingtrea 1:41af2b3eefb5 272 _data._z /= 4;
falingtrea 1:41af2b3eefb5 273 }
falingtrea 1:41af2b3eefb5 274
sam_grove 0:9d1e3a344e4f 275 return _data;
sam_grove 0:9d1e3a344e4f 276 }
sam_grove 0:9d1e3a344e4f 277
falingtrea 1:41af2b3eefb5 278 char MMA845x::getWhoAmI(void) const
falingtrea 1:41af2b3eefb5 279 {
falingtrea 1:41af2b3eefb5 280 return _who_am_i;
falingtrea 1:41af2b3eefb5 281 }
falingtrea 1:41af2b3eefb5 282
falingtrea 1:41af2b3eefb5 283 uint8_t MMA845x::writeRegister(uint8_t const reg, uint8_t const data) const
sam_grove 0:9d1e3a344e4f 284 {
sam_grove 0:9d1e3a344e4f 285 char buf[2] = {reg, data};
sam_grove 0:9d1e3a344e4f 286 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 287
falingtrea 1:41af2b3eefb5 288 buf[0] = reg;
falingtrea 1:41af2b3eefb5 289 buf[1] = data;
mfiore 2:70df6adad015 290
falingtrea 1:41af2b3eefb5 291 // __disable_irq(); // Tickers and other timebase events can jack up the I2C bus for some devices
falingtrea 1:41af2b3eefb5 292 result |= _i2c->write(_i2c_addr, buf, 2);
falingtrea 1:41af2b3eefb5 293 // __enable_irq(); // Just need to block during the transaction
mfiore 2:70df6adad015 294
mfiore 2:70df6adad015 295 if(result != 0) {
falingtrea 1:41af2b3eefb5 296 debug("MMA845x:writeRegister failed r-%d\n\r",result);
sam_grove 0:9d1e3a344e4f 297 }
mfiore 2:70df6adad015 298
falingtrea 1:41af2b3eefb5 299 return result;
sam_grove 0:9d1e3a344e4f 300 }
sam_grove 0:9d1e3a344e4f 301
falingtrea 1:41af2b3eefb5 302 uint8_t MMA845x::readRegister(uint8_t const reg, uint8_t count, char* data) const
sam_grove 0:9d1e3a344e4f 303 {
falingtrea 1:41af2b3eefb5 304 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 305 char reg_out[1];
mfiore 2:70df6adad015 306
falingtrea 1:41af2b3eefb5 307 reg_out[0] = reg;
mfiore 2:70df6adad015 308 // __disable_irq(); // Tickers and other timebase events can jack up the I2C bus for some devices
mfiore 2:70df6adad015 309 result |= _i2c->write(_i2c_addr,reg_out,1,true);
mfiore 2:70df6adad015 310 // __enable_irq(); // Just need to block during the transaction
falingtrea 1:41af2b3eefb5 311
mfiore 2:70df6adad015 312 if(result != 0) {
falingtrea 1:41af2b3eefb5 313 debug("MMA845x::readRegister failed write r- %d\n\r", result);
falingtrea 1:41af2b3eefb5 314 return result;
sam_grove 0:9d1e3a344e4f 315 }
mfiore 2:70df6adad015 316
mfiore 2:70df6adad015 317 // __disable_irq(); // Tickers and other timebase events can jack up the I2C bus for some devices
mfiore 2:70df6adad015 318 result |= _i2c->read(_i2c_addr,data,count,false);
falingtrea 1:41af2b3eefb5 319 // __enable_irq(); // Just need to block during the transaction
mfiore 2:70df6adad015 320
mfiore 2:70df6adad015 321 if(result != 0) {
falingtrea 1:41af2b3eefb5 322 debug("MMA845x::readRegister failed read r-%d\n\r",result);
sam_grove 0:9d1e3a344e4f 323 }
mfiore 2:70df6adad015 324
falingtrea 1:41af2b3eefb5 325 return result;
sam_grove 0:9d1e3a344e4f 326 }