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:
falingtrea
Date:
Mon Jul 06 19:53:27 2015 +0000
Revision:
1:41af2b3eefb5
Parent:
0:9d1e3a344e4f
Added basic setup functions and added RTOS calls. Set data get to poll if interrupt pointers are set to NULL.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:9d1e3a344e4f 1 /**
sam_grove 0:9d1e3a344e4f 2 * @file MMA845x.h
sam_grove 0:9d1e3a344e4f 3 * @brief Device driver - MMA845x 3-axis accelerometer IC
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 * Forked from
sam_grove 0:9d1e3a344e4f 24 */
sam_grove 0:9d1e3a344e4f 25
sam_grove 0:9d1e3a344e4f 26 #ifndef MMA845X_H
sam_grove 0:9d1e3a344e4f 27 #define MMA845X_H
sam_grove 0:9d1e3a344e4f 28
sam_grove 0:9d1e3a344e4f 29 #include "mbed.h"
sam_grove 0:9d1e3a344e4f 30
sam_grove 0:9d1e3a344e4f 31 /** Using the Sparkfun SEN-10955
sam_grove 0:9d1e3a344e4f 32 *
sam_grove 0:9d1e3a344e4f 33 * Example:
sam_grove 0:9d1e3a344e4f 34 * @code
sam_grove 0:9d1e3a344e4f 35 * #include "mbed.h"
sam_grove 0:9d1e3a344e4f 36 * #include "MMA845x.h"
sam_grove 0:9d1e3a344e4f 37 *
sam_grove 0:9d1e3a344e4f 38
sam_grove 0:9d1e3a344e4f 39 *
sam_grove 0:9d1e3a344e4f 40 * int main()
sam_grove 0:9d1e3a344e4f 41 * {
sam_grove 0:9d1e3a344e4f 42
sam_grove 0:9d1e3a344e4f 43 * }
sam_grove 0:9d1e3a344e4f 44 * @endcode
sam_grove 0:9d1e3a344e4f 45 */
sam_grove 0:9d1e3a344e4f 46
sam_grove 0:9d1e3a344e4f 47
sam_grove 0:9d1e3a344e4f 48 /**
sam_grove 0:9d1e3a344e4f 49 * @class MMA845x_DATA
sam_grove 0:9d1e3a344e4f 50 * @brief API abstraction for the MMA845x 3-axis accelerometer IC data
sam_grove 0:9d1e3a344e4f 51 */
sam_grove 0:9d1e3a344e4f 52 class MMA845x_DATA
sam_grove 0:9d1e3a344e4f 53 {
sam_grove 0:9d1e3a344e4f 54 public:
sam_grove 0:9d1e3a344e4f 55
falingtrea 1:41af2b3eefb5 56 volatile int16_t _x; /*!< volatile data variable */
falingtrea 1:41af2b3eefb5 57 volatile int16_t _y; /*!< volatile data variable */
falingtrea 1:41af2b3eefb5 58 volatile int16_t _z; /*!< volatile data variable */
sam_grove 0:9d1e3a344e4f 59
sam_grove 0:9d1e3a344e4f 60 /** Create the MMA845x_DATA object initialized to the parameter (or 0 if none)
sam_grove 0:9d1e3a344e4f 61 * @param x - the init value of _x
sam_grove 0:9d1e3a344e4f 62 * @param y - the init value of _y
sam_grove 0:9d1e3a344e4f 63 * @param x - the init value of _z
sam_grove 0:9d1e3a344e4f 64 */
falingtrea 1:41af2b3eefb5 65 MMA845x_DATA(int16_t x = 0, int16_t y = 0, int16_t z = 0) : _x(x), _y(y), _z(z) {}
sam_grove 0:9d1e3a344e4f 66
sam_grove 0:9d1e3a344e4f 67 /** Overloaded '=' operator to allow shorthand coding, assigning objects to one another
sam_grove 0:9d1e3a344e4f 68 * @param rhs - an object of the same type to assign ourself the same values of
sam_grove 0:9d1e3a344e4f 69 * @return this
sam_grove 0:9d1e3a344e4f 70 */
sam_grove 0:9d1e3a344e4f 71 MMA845x_DATA &operator= (MMA845x_DATA const &rhs)
sam_grove 0:9d1e3a344e4f 72 {
sam_grove 0:9d1e3a344e4f 73 _x = rhs._x;
sam_grove 0:9d1e3a344e4f 74 _y = rhs._y;
sam_grove 0:9d1e3a344e4f 75 _z = rhs._z;
sam_grove 0:9d1e3a344e4f 76
sam_grove 0:9d1e3a344e4f 77 return *this;
sam_grove 0:9d1e3a344e4f 78 }
sam_grove 0:9d1e3a344e4f 79
sam_grove 0:9d1e3a344e4f 80 /** Overloaded '=' operator to allow shorthand coding, assigning objects to one another
sam_grove 0:9d1e3a344e4f 81 * @param val - Assign each data member (_x, _y, _z) this value
sam_grove 0:9d1e3a344e4f 82 * @return this
sam_grove 0:9d1e3a344e4f 83 */
falingtrea 1:41af2b3eefb5 84 MMA845x_DATA &operator= (int16_t const val)
sam_grove 0:9d1e3a344e4f 85 {
sam_grove 0:9d1e3a344e4f 86 _x = _y = _z = val;
sam_grove 0:9d1e3a344e4f 87
sam_grove 0:9d1e3a344e4f 88 return *this;
sam_grove 0:9d1e3a344e4f 89 }
sam_grove 0:9d1e3a344e4f 90
sam_grove 0:9d1e3a344e4f 91 /** Overloaded '==' operator to allow shorthand coding, test objects to one another
sam_grove 0:9d1e3a344e4f 92 * @param rhs - the object to compare against
sam_grove 0:9d1e3a344e4f 93 * @return 1 if the data members are the same and 0 otherwise
sam_grove 0:9d1e3a344e4f 94 */
sam_grove 0:9d1e3a344e4f 95 bool operator== (MMA845x_DATA const &rhs) const
sam_grove 0:9d1e3a344e4f 96 {
sam_grove 0:9d1e3a344e4f 97 return ((_x == rhs._x)&&(_y == rhs._y)&&(_z == rhs._z)) ? 1 : 0;
sam_grove 0:9d1e3a344e4f 98 }
sam_grove 0:9d1e3a344e4f 99 };
sam_grove 0:9d1e3a344e4f 100
sam_grove 0:9d1e3a344e4f 101 /**
sam_grove 0:9d1e3a344e4f 102 * @class MMA845x
sam_grove 0:9d1e3a344e4f 103 * @brief API abstraction for the MMA845x 3-axis accelerometer IC
falingtrea 1:41af2b3eefb5 104 * initial version will be polling only. Interrupt service and rtos support will
falingtrea 1:41af2b3eefb5 105 * be added at a later point
sam_grove 0:9d1e3a344e4f 106 */
sam_grove 0:9d1e3a344e4f 107 class MMA845x
sam_grove 0:9d1e3a344e4f 108 {
sam_grove 0:9d1e3a344e4f 109 public:
sam_grove 0:9d1e3a344e4f 110
sam_grove 0:9d1e3a344e4f 111 /**
falingtrea 1:41af2b3eefb5 112 * @enum SA0
sam_grove 0:9d1e3a344e4f 113 * @brief Possible terminations for the ADDR pin
sam_grove 0:9d1e3a344e4f 114 */
falingtrea 1:41af2b3eefb5 115 enum SA0
sam_grove 0:9d1e3a344e4f 116 {
sam_grove 0:9d1e3a344e4f 117 SA0_VSS = 0, /*!< SA0 connected to VSS */
sam_grove 0:9d1e3a344e4f 118 SA0_VDD /*!< SA0 connected to VDD */
sam_grove 0:9d1e3a344e4f 119 };
sam_grove 0:9d1e3a344e4f 120
sam_grove 0:9d1e3a344e4f 121 /**
falingtrea 1:41af2b3eefb5 122 * @enum WHO_AM_I_VAL
sam_grove 0:9d1e3a344e4f 123 * @brief Device ID's that this class is compatible with
sam_grove 0:9d1e3a344e4f 124 */
falingtrea 1:41af2b3eefb5 125 enum WHO_AM_I_VAL
sam_grove 0:9d1e3a344e4f 126 {
sam_grove 0:9d1e3a344e4f 127 MMA8451 = 0x1a, /*!< MMA8451 WHO_AM_I register content */
sam_grove 0:9d1e3a344e4f 128 MMA8452 = 0x2a, /*!< MMA8452 WHO_AM_I register content */
sam_grove 0:9d1e3a344e4f 129 MMA8453 = 0x3a, /*!< MMA8453 WHO_AM_I register content */
sam_grove 0:9d1e3a344e4f 130 };
falingtrea 1:41af2b3eefb5 131
falingtrea 1:41af2b3eefb5 132 /**
falingtrea 1:41af2b3eefb5 133 * @enum SYS_MODE
falingtrea 1:41af2b3eefb5 134 * @brief operating mode of MMA845x
falingtrea 1:41af2b3eefb5 135 */
falingtrea 1:41af2b3eefb5 136 enum SYS_MODE
falingtrea 1:41af2b3eefb5 137 {
falingtrea 1:41af2b3eefb5 138 STANDBY = 0,
falingtrea 1:41af2b3eefb5 139 WAKE, SLEEP
falingtrea 1:41af2b3eefb5 140 };
falingtrea 1:41af2b3eefb5 141
falingtrea 1:41af2b3eefb5 142 /**
falingtrea 1:41af2b3eefb5 143 * @enum STATUS
falingtrea 1:41af2b3eefb5 144 * @brief flags for data overwrite and data ready
falingtrea 1:41af2b3eefb5 145 */
falingtrea 1:41af2b3eefb5 146 enum STATUS
falingtrea 1:41af2b3eefb5 147 {
falingtrea 1:41af2b3eefb5 148 XDR = 0x01,
falingtrea 1:41af2b3eefb5 149 YDR = 0x02,
falingtrea 1:41af2b3eefb5 150 ZDR = 0x04,
falingtrea 1:41af2b3eefb5 151 XYZDR = 0x08,
falingtrea 1:41af2b3eefb5 152 XOW = 0x10,
falingtrea 1:41af2b3eefb5 153 YOW = 0x20,
falingtrea 1:41af2b3eefb5 154 ZOW = 0x40,
falingtrea 1:41af2b3eefb5 155 XYZOW = 0x80
falingtrea 1:41af2b3eefb5 156 };
falingtrea 1:41af2b3eefb5 157
falingtrea 1:41af2b3eefb5 158 /**
falingtrea 1:41af2b3eefb5 159 * @enum RANGE
falingtrea 1:41af2b3eefb5 160 * @brief values for measurement range positive and negative
falingtrea 1:41af2b3eefb5 161 */
falingtrea 1:41af2b3eefb5 162 enum RANGE
falingtrea 1:41af2b3eefb5 163 {
falingtrea 1:41af2b3eefb5 164 RANGE_2g = 0,
falingtrea 1:41af2b3eefb5 165 RANGE_4g, RANGE_8g
falingtrea 1:41af2b3eefb5 166 };
sam_grove 0:9d1e3a344e4f 167
sam_grove 0:9d1e3a344e4f 168 /**
falingtrea 1:41af2b3eefb5 169 * @enum RESOLUTION
falingtrea 1:41af2b3eefb5 170 * @brief selections for resolution of data, 8 bit or maximum
falingtrea 1:41af2b3eefb5 171 */
falingtrea 1:41af2b3eefb5 172 enum RESOLUTION
falingtrea 1:41af2b3eefb5 173 {
falingtrea 1:41af2b3eefb5 174 RES_MAX = 0, /* Read back full resolution - normal mode*/
falingtrea 1:41af2b3eefb5 175 RES_8BIT = 2 /* Read back 8 bit values only - fast mode*/
falingtrea 1:41af2b3eefb5 176 };
falingtrea 1:41af2b3eefb5 177
falingtrea 1:41af2b3eefb5 178 /**
falingtrea 1:41af2b3eefb5 179 * @enum LOW_NOISE
falingtrea 1:41af2b3eefb5 180 * @brief Low Noise mode Note: 4g max reading when on
falingtrea 1:41af2b3eefb5 181 */
falingtrea 1:41af2b3eefb5 182 enum LOW_NOISE
falingtrea 1:41af2b3eefb5 183 {
falingtrea 1:41af2b3eefb5 184 LN_OFF = 0x00, /* Low Noise mode off */
falingtrea 1:41af2b3eefb5 185 LN_ON = 0x02 /* Low Noise mode on, 4g max readings */
falingtrea 1:41af2b3eefb5 186 };
falingtrea 1:41af2b3eefb5 187
falingtrea 1:41af2b3eefb5 188 /**
falingtrea 1:41af2b3eefb5 189 * @enum HPF_MODE
falingtrea 1:41af2b3eefb5 190 * @brief High Pass Filter mode
falingtrea 1:41af2b3eefb5 191 */
falingtrea 1:41af2b3eefb5 192 enum HPF_MODE
falingtrea 1:41af2b3eefb5 193 {
falingtrea 1:41af2b3eefb5 194 HPF_OFF = 0x00, /* High Pass Filter mode off */
falingtrea 1:41af2b3eefb5 195 HPF_ON = 0x10 /* High Pass Filter mode on */
falingtrea 1:41af2b3eefb5 196 };
falingtrea 1:41af2b3eefb5 197
falingtrea 1:41af2b3eefb5 198 /**
falingtrea 1:41af2b3eefb5 199 * @enum DATA_RATE
falingtrea 1:41af2b3eefb5 200 * @brief values for normal output data rate in Hz
falingtrea 1:41af2b3eefb5 201 */
falingtrea 1:41af2b3eefb5 202 enum DATA_RATE
falingtrea 1:41af2b3eefb5 203 {
falingtrea 1:41af2b3eefb5 204 DR_800 = 0x00,
falingtrea 1:41af2b3eefb5 205 DR_400 = 0x08,
falingtrea 1:41af2b3eefb5 206 DR_200 = 0x10,
falingtrea 1:41af2b3eefb5 207 DR_100 = 0x18,
falingtrea 1:41af2b3eefb5 208 DR_50 = 0x20,
falingtrea 1:41af2b3eefb5 209 DR_12_5 = 0x28,
falingtrea 1:41af2b3eefb5 210 DR_6_25 = 0x30,
falingtrea 1:41af2b3eefb5 211 DR_1_56 = 0x38
falingtrea 1:41af2b3eefb5 212 };
falingtrea 1:41af2b3eefb5 213 /**
falingtrea 1:41af2b3eefb5 214 * @enum ASLP_DATA_RATE
falingtrea 1:41af2b3eefb5 215 * @brief values for auto_sleep mode data rate in HZ
falingtrea 1:41af2b3eefb5 216 */
falingtrea 1:41af2b3eefb5 217 enum ASLP_DATA_RATE
falingtrea 1:41af2b3eefb5 218 {
falingtrea 1:41af2b3eefb5 219 ASLPDR_50 = 0x00,
falingtrea 1:41af2b3eefb5 220 ALSPDR_12_5 = 0x40,
falingtrea 1:41af2b3eefb5 221 ASLPDR_6_25 = 0x80,
falingtrea 1:41af2b3eefb5 222 ASLPDR_1_56 = 0xB0
falingtrea 1:41af2b3eefb5 223 };
falingtrea 1:41af2b3eefb5 224
falingtrea 1:41af2b3eefb5 225 /**
falingtrea 1:41af2b3eefb5 226 * @enum OVERSAMPLE_MODE
falingtrea 1:41af2b3eefb5 227 * @brief sets the oversample mode, Normal, Low power and noise, High resolution, or low power
falingtrea 1:41af2b3eefb5 228 */
falingtrea 1:41af2b3eefb5 229 enum OVERSAMPLE_MODE
falingtrea 1:41af2b3eefb5 230 {
falingtrea 1:41af2b3eefb5 231 OS_NORMAL = 0,
falingtrea 1:41af2b3eefb5 232 OS_LO_PN, OS_HI_RES, OS_LO_POW
falingtrea 1:41af2b3eefb5 233 };
falingtrea 1:41af2b3eefb5 234
falingtrea 1:41af2b3eefb5 235 /**
falingtrea 1:41af2b3eefb5 236 * @enum REGISTER
sam_grove 0:9d1e3a344e4f 237 * @brief The device register map
sam_grove 0:9d1e3a344e4f 238 */
falingtrea 1:41af2b3eefb5 239 enum REGISTER
sam_grove 0:9d1e3a344e4f 240 {
falingtrea 1:41af2b3eefb5 241 STATUS = 0x00,
sam_grove 0:9d1e3a344e4f 242 OUT_X_MSB, OUT_X_LSB, OUT_Y_MSB, OUT_Y_LSB, OUT_Z_MSB, OUT_Z_LSB,
sam_grove 0:9d1e3a344e4f 243
falingtrea 1:41af2b3eefb5 244 F_SETUP = 0x09, TRIG_CFG, // only available on the MMA8451 variant
sam_grove 0:9d1e3a344e4f 245
falingtrea 1:41af2b3eefb5 246 SYSMOD = 0x0B,
sam_grove 0:9d1e3a344e4f 247 INT_SOURCE, WHO_AM_I, XYZ_DATA_CFG, HP_FILTER_CUTOFF, PL_STATUS,
sam_grove 0:9d1e3a344e4f 248 PL_CFG, PL_COUNT, PL_BF_ZCOMP, P_L_THS_REG, FF_MT_CFG, FF_MT_SRC,
sam_grove 0:9d1e3a344e4f 249 FF_MT_THS, FF_MT_COUNT,
sam_grove 0:9d1e3a344e4f 250
falingtrea 1:41af2b3eefb5 251 TRANSIENT_CFG = 0x1D,
sam_grove 0:9d1e3a344e4f 252 TRANSIENT_SRC, TRANSIENT_THS, TRANSIENT_COUNT, PULSE_CFG, PULSE_SRC,
sam_grove 0:9d1e3a344e4f 253 PULSE_THSX, PULSE_THSY, PULSE_THSZ, PULSE_TMLT, PULSE_LTCY, PULSE_WIND,
sam_grove 0:9d1e3a344e4f 254 ASLP_COUNT, CTRL_REG1, CTRL_REG2, CTRL_REG3, CTRL_REG4, CTRL_REG5,
sam_grove 0:9d1e3a344e4f 255 OFF_X, OFF_Y, OFF_Z
sam_grove 0:9d1e3a344e4f 256 };
sam_grove 0:9d1e3a344e4f 257
sam_grove 0:9d1e3a344e4f 258 /** Create the MMA845x object
sam_grove 0:9d1e3a344e4f 259 * @param i2c - A defined I2C object
falingtrea 1:41af2b3eefb5 260 * @param int1 - A defined InterruptIn object pointer. Default NULL for polling mode
falingtrea 1:41af2b3eefb5 261 * @param int2 - A defined InterruptIn object pointer. Default NULL for polling mode
falingtrea 1:41af2b3eefb5 262 * @param i2c_addr - state of pin SA0
falingtrea 1:41af2b3eefb5 263 * TODO - need to add interrupt support
sam_grove 0:9d1e3a344e4f 264 */
falingtrea 1:41af2b3eefb5 265 MMA845x(I2C &i2c, SA0 const i2c_addr = SA0_VSS, InterruptIn* int1 = NULL, InterruptIn* int2 = NULL);
sam_grove 0:9d1e3a344e4f 266
sam_grove 0:9d1e3a344e4f 267 /** Get the X data
falingtrea 1:41af2b3eefb5 268 * @return The last valid X-axis reading from the accelerometer
sam_grove 0:9d1e3a344e4f 269 */
falingtrea 1:41af2b3eefb5 270 int16_t getX(void);
sam_grove 0:9d1e3a344e4f 271
sam_grove 0:9d1e3a344e4f 272 /** Get the Y data
falingtrea 1:41af2b3eefb5 273 * @return The last valid Y-axis reading from the accelerometer
sam_grove 0:9d1e3a344e4f 274 */
falingtrea 1:41af2b3eefb5 275 int16_t getY(void);
sam_grove 0:9d1e3a344e4f 276
sam_grove 0:9d1e3a344e4f 277 /** Get the Z data
falingtrea 1:41af2b3eefb5 278 * @return The last Z-axis valid reading from the accelerometer
sam_grove 0:9d1e3a344e4f 279 */
falingtrea 1:41af2b3eefb5 280 int16_t getZ(void);
falingtrea 1:41af2b3eefb5 281
falingtrea 1:41af2b3eefb5 282 /** Get the XYZ data structure
falingtrea 1:41af2b3eefb5 283 * @return The last valid X, Y, and Z-axis readings from the accelerometer
falingtrea 1:41af2b3eefb5 284 */
falingtrea 1:41af2b3eefb5 285 MMA845x_DATA getXYZ(void);
sam_grove 0:9d1e3a344e4f 286
sam_grove 0:9d1e3a344e4f 287 /** Get the XYZ data structure
falingtrea 1:41af2b3eefb5 288 * @return accelerometer ID code. Test versus the WHO_AM_I_VAL enum
falingtrea 1:41af2b3eefb5 289 */
falingtrea 1:41af2b3eefb5 290 char getWhoAmI(void) const;
falingtrea 1:41af2b3eefb5 291
falingtrea 1:41af2b3eefb5 292 /** Setup the MMA845x for standard accelerometer read mode
falingtrea 1:41af2b3eefb5 293 * @range - set the measurement range using RANGE enum
falingtrea 1:41af2b3eefb5 294 * @resolution - set the ADC resolution using the RESOLUTION enum
falingtrea 1:41af2b3eefb5 295 * @lo_noise - Set the Low-Noise mode using the LOW_NOISE enum
falingtrea 1:41af2b3eefb5 296 * @data_rate - set the aquisition rate using the DATA_RATE enum
falingtrea 1:41af2b3eefb5 297 * @os_mode - Set the Over sample mode suing the OVERSAMPLE_MODE enum
falingtrea 1:41af2b3eefb5 298 * @hpf_mode - Set the Hi pass filter mode using the HPF_MOSE enum
falingtrea 1:41af2b3eefb5 299 * @return status of command
falingtrea 1:41af2b3eefb5 300 *
falingtrea 1:41af2b3eefb5 301 * This sets the resolution, range, data rate, oversample
falingtrea 1:41af2b3eefb5 302 * mode, hi and lo pass filter.
falingtrea 1:41af2b3eefb5 303 */
falingtrea 1:41af2b3eefb5 304 uint8_t setCommonParameters(RANGE range, RESOLUTION resolution, LOW_NOISE lo_noise,
falingtrea 1:41af2b3eefb5 305 DATA_RATE data_rate, OVERSAMPLE_MODE os_mode, HPF_MODE hpf_mode ) const;
falingtrea 1:41af2b3eefb5 306
falingtrea 1:41af2b3eefb5 307 /** Ebnable Motion detect mode and interrupt handler
falingtrea 1:41af2b3eefb5 308 * @return status of command
falingtrea 1:41af2b3eefb5 309 * TODO - need to implement function
sam_grove 0:9d1e3a344e4f 310 */
falingtrea 1:41af2b3eefb5 311 uint8_t enableMotionDetect(void) const;
falingtrea 1:41af2b3eefb5 312
falingtrea 1:41af2b3eefb5 313 /** Enable Pulse Detect mode and interrupt handler
falingtrea 1:41af2b3eefb5 314 * @return status of command
falingtrea 1:41af2b3eefb5 315 * TODO - need to implement function
falingtrea 1:41af2b3eefb5 316 */
falingtrea 1:41af2b3eefb5 317 uint8_t enablePulseDetect(void) const;
falingtrea 1:41af2b3eefb5 318
falingtrea 1:41af2b3eefb5 319 /** Enable Orientation mode and interrupt handler
falingtrea 1:41af2b3eefb5 320 * @return status of command
falingtrea 1:41af2b3eefb5 321 * TODO - need to implement function
sam_grove 0:9d1e3a344e4f 322 */
falingtrea 1:41af2b3eefb5 323 uint8_t enableOrientationDetect(void) const;
falingtrea 1:41af2b3eefb5 324
falingtrea 1:41af2b3eefb5 325 /** Enable Transient detect mode and interrupt handler
falingtrea 1:41af2b3eefb5 326 * @return status of command
falingtrea 1:41af2b3eefb5 327 * TODO - need to implement function
falingtrea 1:41af2b3eefb5 328 */
falingtrea 1:41af2b3eefb5 329 uint8_t enableTransientDetect(void) const;
falingtrea 1:41af2b3eefb5 330
falingtrea 1:41af2b3eefb5 331 /** Enable Autosleep function and interrupt handler
falingtrea 1:41af2b3eefb5 332 * @return status of command
falingtrea 1:41af2b3eefb5 333 * TODO - need to implement function
falingtrea 1:41af2b3eefb5 334 */
falingtrea 1:41af2b3eefb5 335 uint8_t enableAutoSleep(void) const;
falingtrea 1:41af2b3eefb5 336
falingtrea 1:41af2b3eefb5 337 /** Enbale FIFO function and interrupt handler
falingtrea 1:41af2b3eefb5 338 * @return status of command
falingtrea 1:41af2b3eefb5 339 * TODO - need to implement function
falingtrea 1:41af2b3eefb5 340 */
falingtrea 1:41af2b3eefb5 341 uint8_t enableFIFO(void) const;
sam_grove 0:9d1e3a344e4f 342
falingtrea 1:41af2b3eefb5 343 /** Put the MMA845x in the Standby mode
falingtrea 1:41af2b3eefb5 344 * @return status of command
sam_grove 0:9d1e3a344e4f 345 */
falingtrea 1:41af2b3eefb5 346 uint8_t standbyMode(void) const;
falingtrea 1:41af2b3eefb5 347
falingtrea 1:41af2b3eefb5 348 /** Put the MMA845x in the active mode
falingtrea 1:41af2b3eefb5 349 * @return status of command
falingtrea 1:41af2b3eefb5 350 */
falingtrea 1:41af2b3eefb5 351 uint8_t activeMode(void) const;
sam_grove 0:9d1e3a344e4f 352
falingtrea 1:41af2b3eefb5 353 /** Check the MMA845x status register
falingtrea 1:41af2b3eefb5 354 * @return status byte
falingtrea 1:41af2b3eefb5 355 */
falingtrea 1:41af2b3eefb5 356 uint8_t getStatus(void) const;
falingtrea 1:41af2b3eefb5 357
sam_grove 0:9d1e3a344e4f 358
sam_grove 0:9d1e3a344e4f 359 private:
sam_grove 0:9d1e3a344e4f 360
sam_grove 0:9d1e3a344e4f 361 I2C *_i2c;
sam_grove 0:9d1e3a344e4f 362 InterruptIn *_int1;
sam_grove 0:9d1e3a344e4f 363 InterruptIn *_int2;
sam_grove 0:9d1e3a344e4f 364 uint8_t _i2c_addr;
falingtrea 1:41af2b3eefb5 365 char _who_am_i;
sam_grove 0:9d1e3a344e4f 366 MMA845x_DATA _data;
falingtrea 1:41af2b3eefb5 367 bool _polling_mode;
falingtrea 1:41af2b3eefb5 368
falingtrea 1:41af2b3eefb5 369 uint8_t init(void);
sam_grove 0:9d1e3a344e4f 370
falingtrea 1:41af2b3eefb5 371 /** Write to a register (exposed for debugging reasons)
falingtrea 1:41af2b3eefb5 372 * Note: most writes are only valid in stop mode
falingtrea 1:41af2b3eefb5 373 * @param reg - The register to be written
falingtrea 1:41af2b3eefb5 374 * @param data - The data to be written
falingtrea 1:41af2b3eefb5 375 */
falingtrea 1:41af2b3eefb5 376 uint8_t writeRegister(uint8_t const reg, uint8_t const data) const;
falingtrea 1:41af2b3eefb5 377
falingtrea 1:41af2b3eefb5 378 /** Read from a register (exposed for debugging reasons)
falingtrea 1:41af2b3eefb5 379 * @param reg - The register to read from
falingtrea 1:41af2b3eefb5 380 * @return The register contents
falingtrea 1:41af2b3eefb5 381 */
falingtrea 1:41af2b3eefb5 382 uint8_t readRegister(uint8_t const reg, uint8_t count, char* data) const;
falingtrea 1:41af2b3eefb5 383
falingtrea 1:41af2b3eefb5 384
sam_grove 0:9d1e3a344e4f 385 };
sam_grove 0:9d1e3a344e4f 386
sam_grove 0:9d1e3a344e4f 387 #endif