Forked from Uwe Gartmann's ADXL345 library, customized as part of the 9DOF stick from Sparkfun.com

Fork of ADXL345 by Uwe Gartmann

ADXL345 is triple axis, digital interface, accelerometer.

This library is forked from Uwe Gartmann and Peter Swanson's work.

This library is for specific application using 9DoF-Stick.

Datasheet:

http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf

ADXL345は3軸のデジタルインターフェースを備えた加速度センサです。

このライブラリは 9DoF-Stick を使用した特定の企画のために保守しています。

mbed IDEが日本語をサポートするまでは英語でコメントを書いていきますが、サポートした後もきっと英語で書いていくでしょう。

Committer:
gltest26
Date:
Mon Sep 17 10:39:19 2012 +0000
Revision:
4:8046894b947e
Parent:
3:7b83694c7292
Child:
5:122a504fcfa3
Added bit mask replace version of ADXL345::setDataFormatControl() as an overload.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Digixx 0:1e4aa22fc1a1 1 /**
gltest26 3:7b83694c7292 2 * @file ADXL345.h
Digixx 1:45faba962a46 3 * @author Uwe Gartmann
Digixx 1:45faba962a46 4 * @author Used ITG3200 library developed Peter Swanson as template
Digixx 1:45faba962a46 5 * A special thanks to Ewout van Bekkum for all his patient help in developing this library!
Digixx 0:1e4aa22fc1a1 6 *
Digixx 0:1e4aa22fc1a1 7 * @section LICENSE
Digixx 0:1e4aa22fc1a1 8 *
Digixx 0:1e4aa22fc1a1 9 * Permission is hereby granted, free of charge, to any person obtaining a copy
Digixx 0:1e4aa22fc1a1 10 * of this software and associated documentation files (the "Software"), to deal
Digixx 0:1e4aa22fc1a1 11 * in the Software without restriction, including without limitation the rights
Digixx 0:1e4aa22fc1a1 12 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Digixx 0:1e4aa22fc1a1 13 * copies of the Software, and to permit persons to whom the Software is
Digixx 0:1e4aa22fc1a1 14 * furnished to do so, subject to the following conditions:
Digixx 0:1e4aa22fc1a1 15 *
Digixx 0:1e4aa22fc1a1 16 * The above copyright notice and this permission notice shall be included in
Digixx 0:1e4aa22fc1a1 17 * all copies or substantial portions of the Software.
Digixx 0:1e4aa22fc1a1 18 *
Digixx 0:1e4aa22fc1a1 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Digixx 0:1e4aa22fc1a1 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Digixx 0:1e4aa22fc1a1 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Digixx 0:1e4aa22fc1a1 22 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Digixx 0:1e4aa22fc1a1 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Digixx 0:1e4aa22fc1a1 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Digixx 0:1e4aa22fc1a1 25 * THE SOFTWARE.
Digixx 0:1e4aa22fc1a1 26 *
Digixx 0:1e4aa22fc1a1 27 * @section DESCRIPTION
Digixx 0:1e4aa22fc1a1 28 *
Digixx 0:1e4aa22fc1a1 29 * ADXL345, triple axis, I2C interface, accelerometer.
Digixx 0:1e4aa22fc1a1 30 *
Digixx 0:1e4aa22fc1a1 31 * Datasheet:
Digixx 0:1e4aa22fc1a1 32 *
Digixx 0:1e4aa22fc1a1 33 * http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf
Digixx 0:1e4aa22fc1a1 34 */
Digixx 0:1e4aa22fc1a1 35
Digixx 0:1e4aa22fc1a1 36
Digixx 0:1e4aa22fc1a1 37
Digixx 0:1e4aa22fc1a1 38 #ifndef ADXL345_H
Digixx 0:1e4aa22fc1a1 39 #define ADXL345_H
Digixx 0:1e4aa22fc1a1 40
gltest26 3:7b83694c7292 41 /*
Digixx 0:1e4aa22fc1a1 42 * Includes
Digixx 0:1e4aa22fc1a1 43 */
Digixx 0:1e4aa22fc1a1 44 #include "mbed.h"
Digixx 0:1e4aa22fc1a1 45
gltest26 3:7b83694c7292 46 /*
Digixx 0:1e4aa22fc1a1 47 * Defines
Digixx 0:1e4aa22fc1a1 48 */
Digixx 0:1e4aa22fc1a1 49 //Registers.
Digixx 0:1e4aa22fc1a1 50 #define ADXL345_DEVID_REG 0x00
Digixx 0:1e4aa22fc1a1 51 #define ADXL345_THRESH_TAP_REG 0x1D
Digixx 0:1e4aa22fc1a1 52 #define ADXL345_OFSX_REG 0x1E
Digixx 0:1e4aa22fc1a1 53 #define ADXL345_OFSY_REG 0x1F
Digixx 0:1e4aa22fc1a1 54 #define ADXL345_OFSZ_REG 0x20
Digixx 0:1e4aa22fc1a1 55 #define ADXL345_DUR_REG 0x21
Digixx 0:1e4aa22fc1a1 56 #define ADXL345_LATENT_REG 0x22
Digixx 0:1e4aa22fc1a1 57 #define ADXL345_WINDOW_REG 0x23
Digixx 0:1e4aa22fc1a1 58 #define ADXL345_THRESH_ACT_REG 0x24
Digixx 0:1e4aa22fc1a1 59 #define ADXL345_THRESH_INACT_REG 0x25
Digixx 0:1e4aa22fc1a1 60 #define ADXL345_TIME_INACT_REG 0x26
Digixx 0:1e4aa22fc1a1 61 #define ADXL345_ACT_INACT_CTL_REG 0x27
Digixx 0:1e4aa22fc1a1 62 #define ADXL345_THRESH_FF_REG 0x28
Digixx 0:1e4aa22fc1a1 63 #define ADXL345_TIME_FF_REG 0x29
Digixx 0:1e4aa22fc1a1 64 #define ADXL345_TAP_AXES_REG 0x2A
Digixx 0:1e4aa22fc1a1 65 #define ADXL345_ACT_TAP_STATUS_REG 0x2B
Digixx 0:1e4aa22fc1a1 66 #define ADXL345_BW_RATE_REG 0x2C
Digixx 0:1e4aa22fc1a1 67 #define ADXL345_POWER_CTL_REG 0x2D
Digixx 0:1e4aa22fc1a1 68 #define ADXL345_INT_ENABLE_REG 0x2E
Digixx 0:1e4aa22fc1a1 69 #define ADXL345_INT_MAP_REG 0x2F
Digixx 0:1e4aa22fc1a1 70 #define ADXL345_INT_SOURCE_REG 0x30
Digixx 0:1e4aa22fc1a1 71 #define ADXL345_DATA_FORMAT_REG 0x31
Digixx 0:1e4aa22fc1a1 72 #define ADXL345_DATAX0_REG 0x32
Digixx 0:1e4aa22fc1a1 73 #define ADXL345_DATAX1_REG 0x33
Digixx 0:1e4aa22fc1a1 74 #define ADXL345_DATAY0_REG 0x34
Digixx 0:1e4aa22fc1a1 75 #define ADXL345_DATAY1_REG 0x35
Digixx 0:1e4aa22fc1a1 76 #define ADXL345_DATAZ0_REG 0x36
Digixx 0:1e4aa22fc1a1 77 #define ADXL345_DATAZ1_REG 0x37
Digixx 0:1e4aa22fc1a1 78 #define ADXL345_FIFO_CTL 0x38
Digixx 0:1e4aa22fc1a1 79 #define ADXL345_FIFO_STATUS 0x39
Digixx 0:1e4aa22fc1a1 80
Digixx 0:1e4aa22fc1a1 81 //Data rate codes.
Digixx 0:1e4aa22fc1a1 82 #define ADXL345_3200HZ 0x0F
Digixx 0:1e4aa22fc1a1 83 #define ADXL345_1600HZ 0x0E
Digixx 0:1e4aa22fc1a1 84 #define ADXL345_800HZ 0x0D
Digixx 0:1e4aa22fc1a1 85 #define ADXL345_400HZ 0x0C
Digixx 0:1e4aa22fc1a1 86 #define ADXL345_200HZ 0x0B
Digixx 0:1e4aa22fc1a1 87 #define ADXL345_100HZ 0x0A
Digixx 0:1e4aa22fc1a1 88 #define ADXL345_50HZ 0x09
Digixx 0:1e4aa22fc1a1 89 #define ADXL345_25HZ 0x08
Digixx 0:1e4aa22fc1a1 90 #define ADXL345_12HZ5 0x07
Digixx 0:1e4aa22fc1a1 91 #define ADXL345_6HZ25 0x06
Digixx 0:1e4aa22fc1a1 92
Digixx 0:1e4aa22fc1a1 93 // read or write bytes
Digixx 0:1e4aa22fc1a1 94 #define ADXL345_READ 0xA7
Digixx 0:1e4aa22fc1a1 95 #define ADXL345_WRITE 0xA6
Digixx 0:1e4aa22fc1a1 96 #define ADXL345_ADDRESS 0x53 //the ADXL345 7-bit address is 0x53 when ALT ADDRESS is low as it is on the sparkfun chip: when ALT ADDRESS is high the address is 0x1D
Digixx 0:1e4aa22fc1a1 97
Digixx 0:1e4aa22fc1a1 98 /////////////when ALT ADDRESS pin is high:
Digixx 0:1e4aa22fc1a1 99 //#define ADXL345_READ 0x3B
Digixx 0:1e4aa22fc1a1 100 //#define ADXL345_WRITE 0x3A
Digixx 0:1e4aa22fc1a1 101 //#define ADXL345_ADDRESS 0x1D
Digixx 0:1e4aa22fc1a1 102
Digixx 0:1e4aa22fc1a1 103 #define ADXL345_X 0x00
Digixx 0:1e4aa22fc1a1 104 #define ADXL345_Y 0x01
Digixx 0:1e4aa22fc1a1 105 #define ADXL345_Z 0x02
Digixx 0:1e4aa22fc1a1 106
Digixx 0:1e4aa22fc1a1 107
Digixx 0:1e4aa22fc1a1 108
Digixx 0:1e4aa22fc1a1 109 // modes
Digixx 0:1e4aa22fc1a1 110 #define MeasurementMode 0x08
Digixx 0:1e4aa22fc1a1 111
Digixx 0:1e4aa22fc1a1 112
Digixx 0:1e4aa22fc1a1 113
Digixx 0:1e4aa22fc1a1 114
Digixx 0:1e4aa22fc1a1 115
Digixx 0:1e4aa22fc1a1 116
gltest26 3:7b83694c7292 117 /**
gltest26 3:7b83694c7292 118 * ADXL345 triple axis accelerometer.
gltest26 3:7b83694c7292 119 */
Digixx 0:1e4aa22fc1a1 120 class ADXL345 {
Digixx 0:1e4aa22fc1a1 121
Digixx 0:1e4aa22fc1a1 122 public:
Digixx 0:1e4aa22fc1a1 123
gltest26 4:8046894b947e 124 static const char RANGE_BITS = 0x3;
gltest26 4:8046894b947e 125 static const char RANGE_2G = 0x0;
gltest26 4:8046894b947e 126 static const char RANGE_4G = 0x1;
gltest26 4:8046894b947e 127 static const char RANGE_8G = 0x2;
gltest26 4:8046894b947e 128 static const char RANGE_16G = 0x3;
gltest26 4:8046894b947e 129
Digixx 0:1e4aa22fc1a1 130 /**
Digixx 0:1e4aa22fc1a1 131 * Constructor.
Digixx 0:1e4aa22fc1a1 132 *
Digixx 0:1e4aa22fc1a1 133 * @param mosi mbed pin to use for SDA line of I2C interface.
Digixx 0:1e4aa22fc1a1 134 * @param sck mbed pin to use for SCL line of I2C interface.
Digixx 0:1e4aa22fc1a1 135 */
Digixx 0:1e4aa22fc1a1 136 ADXL345(PinName sda, PinName scl);
Digixx 0:1e4aa22fc1a1 137
Digixx 0:1e4aa22fc1a1 138 /**
Digixx 0:1e4aa22fc1a1 139 * Get the output of all three axes.
Digixx 0:1e4aa22fc1a1 140 *
Digixx 0:1e4aa22fc1a1 141 * @param Pointer to a buffer to hold the accelerometer value for the
Digixx 0:1e4aa22fc1a1 142 * x-axis, y-axis and z-axis [in that order].
Digixx 0:1e4aa22fc1a1 143 */
Digixx 0:1e4aa22fc1a1 144 void getOutput(int* readings);
Digixx 0:1e4aa22fc1a1 145
Digixx 0:1e4aa22fc1a1 146 /**
Digixx 0:1e4aa22fc1a1 147 * Read the device ID register on the device.
Digixx 0:1e4aa22fc1a1 148 *
Digixx 0:1e4aa22fc1a1 149 * @return The device ID code [0xE5]
Digixx 0:1e4aa22fc1a1 150 */
Digixx 0:1e4aa22fc1a1 151 char getDeviceID(void);
Digixx 0:1e4aa22fc1a1 152
Digixx 0:1e4aa22fc1a1 153 /**
Digixx 0:1e4aa22fc1a1 154 * Set the power mode.
Digixx 0:1e4aa22fc1a1 155 *
Digixx 0:1e4aa22fc1a1 156 * @param mode 0 -> Normal operation.
Digixx 0:1e4aa22fc1a1 157 * 1 -> Reduced power operation.
Digixx 0:1e4aa22fc1a1 158 */
Digixx 0:1e4aa22fc1a1 159 int setPowerMode(char mode);
Digixx 0:1e4aa22fc1a1 160
Digixx 0:1e4aa22fc1a1 161 /**
Digixx 0:1e4aa22fc1a1 162 * Set the power control settings.
Digixx 0:1e4aa22fc1a1 163 *
Digixx 0:1e4aa22fc1a1 164 * See datasheet for details.
Digixx 0:1e4aa22fc1a1 165 *
Digixx 0:1e4aa22fc1a1 166 * @param The control byte to write to the POWER_CTL register.
Digixx 0:1e4aa22fc1a1 167 */
Digixx 0:1e4aa22fc1a1 168 int setPowerControl(char settings);
Digixx 0:1e4aa22fc1a1 169 /**
Digixx 0:1e4aa22fc1a1 170 * Get the power control settings.
Digixx 0:1e4aa22fc1a1 171 *
Digixx 0:1e4aa22fc1a1 172 * See datasheet for details.
Digixx 0:1e4aa22fc1a1 173 *
Digixx 0:1e4aa22fc1a1 174 * @return The contents of the POWER_CTL register.
Digixx 0:1e4aa22fc1a1 175 */
Digixx 0:1e4aa22fc1a1 176 char getPowerControl(void);
Digixx 0:1e4aa22fc1a1 177
Digixx 0:1e4aa22fc1a1 178
Digixx 0:1e4aa22fc1a1 179 /**
Digixx 0:1e4aa22fc1a1 180 * Get the data format settings.
Digixx 0:1e4aa22fc1a1 181 *
Digixx 0:1e4aa22fc1a1 182 * @return The contents of the DATA_FORMAT register.
Digixx 0:1e4aa22fc1a1 183 */
Digixx 0:1e4aa22fc1a1 184
Digixx 0:1e4aa22fc1a1 185 char getDataFormatControl(void);
Digixx 0:1e4aa22fc1a1 186
Digixx 0:1e4aa22fc1a1 187 /**
Digixx 0:1e4aa22fc1a1 188 * Set the data format settings.
Digixx 0:1e4aa22fc1a1 189 *
Digixx 0:1e4aa22fc1a1 190 * @param settings The control byte to write to the DATA_FORMAT register.
Digixx 0:1e4aa22fc1a1 191 */
Digixx 0:1e4aa22fc1a1 192 int setDataFormatControl(char settings);
gltest26 4:8046894b947e 193
gltest26 4:8046894b947e 194 /**
gltest26 4:8046894b947e 195 * Set the data format settings with only specified bits.
gltest26 4:8046894b947e 196 *
gltest26 4:8046894b947e 197 * @param settings The control byte to write to the DATA_FORMAT register.
gltest26 4:8046894b947e 198 * @param mask The mask bits that
gltest26 4:8046894b947e 199 */
gltest26 4:8046894b947e 200 int setDataFormatControl(char settings, char mask, char *prev = NULL);
Digixx 0:1e4aa22fc1a1 201
gltest26 4:8046894b947e 202 /**
Digixx 0:1e4aa22fc1a1 203 * Set the data rate.
Digixx 0:1e4aa22fc1a1 204 *
Digixx 0:1e4aa22fc1a1 205 * @param rate The rate code (see #defines or datasheet).
Digixx 0:1e4aa22fc1a1 206 */
Digixx 0:1e4aa22fc1a1 207 int setDataRate(char rate);
Digixx 0:1e4aa22fc1a1 208
Digixx 0:1e4aa22fc1a1 209
Digixx 0:1e4aa22fc1a1 210 /**
Digixx 0:1e4aa22fc1a1 211 * Get the current offset for a particular axis.
Digixx 0:1e4aa22fc1a1 212 *
Digixx 0:1e4aa22fc1a1 213 * @param axis 0x00 -> X-axis
Digixx 0:1e4aa22fc1a1 214 * 0x01 -> Y-axis
Digixx 0:1e4aa22fc1a1 215 * 0x02 -> Z-axis
Digixx 0:1e4aa22fc1a1 216 * @return The current offset as an 8-bit 2's complement number with scale
Digixx 0:1e4aa22fc1a1 217 * factor 15.6mg/LSB.
Digixx 0:1e4aa22fc1a1 218 */
Digixx 0:1e4aa22fc1a1 219
Digixx 0:1e4aa22fc1a1 220 char getOffset(char axis);
Digixx 0:1e4aa22fc1a1 221
Digixx 0:1e4aa22fc1a1 222 /**
Digixx 0:1e4aa22fc1a1 223 * Set the offset for a particular axis.
Digixx 0:1e4aa22fc1a1 224 *
Digixx 0:1e4aa22fc1a1 225 * @param axis 0x00 -> X-axis
Digixx 0:1e4aa22fc1a1 226 * 0x01 -> Y-axis
Digixx 0:1e4aa22fc1a1 227 * 0x02 -> Z-axis
Digixx 0:1e4aa22fc1a1 228 * @param offset The offset as an 8-bit 2's complement number with scale
Digixx 0:1e4aa22fc1a1 229 * factor 15.6mg/LSB.
Digixx 0:1e4aa22fc1a1 230 */
Digixx 0:1e4aa22fc1a1 231 int setOffset(char axis, char offset);
Digixx 0:1e4aa22fc1a1 232
Digixx 0:1e4aa22fc1a1 233 /**
Digixx 0:1e4aa22fc1a1 234 * Get the FIFO control settings.
Digixx 0:1e4aa22fc1a1 235 *
Digixx 0:1e4aa22fc1a1 236 * @return The contents of the FIFO_CTL register.
Digixx 0:1e4aa22fc1a1 237 */
Digixx 0:1e4aa22fc1a1 238 char getFifoControl(void);
Digixx 0:1e4aa22fc1a1 239
Digixx 0:1e4aa22fc1a1 240 /**
Digixx 0:1e4aa22fc1a1 241 * Set the FIFO control settings.
Digixx 0:1e4aa22fc1a1 242 *
Digixx 0:1e4aa22fc1a1 243 * @param The control byte to write to the FIFO_CTL register.
Digixx 0:1e4aa22fc1a1 244 */
Digixx 0:1e4aa22fc1a1 245 int setFifoControl(char settings);
Digixx 0:1e4aa22fc1a1 246
Digixx 0:1e4aa22fc1a1 247 /**
Digixx 0:1e4aa22fc1a1 248 * Get FIFO status.
Digixx 0:1e4aa22fc1a1 249 *
Digixx 0:1e4aa22fc1a1 250 * @return The contents of the FIFO_STATUS register.
Digixx 0:1e4aa22fc1a1 251 */
Digixx 0:1e4aa22fc1a1 252 char getFifoStatus(void);
Digixx 0:1e4aa22fc1a1 253
Digixx 0:1e4aa22fc1a1 254 /**
Digixx 0:1e4aa22fc1a1 255 * Read the tap threshold on the device.
Digixx 0:1e4aa22fc1a1 256 *
Digixx 0:1e4aa22fc1a1 257 * @return The tap threshold as an 8-bit number with a scale factor of
Digixx 0:1e4aa22fc1a1 258 * 62.5mg/LSB.
Digixx 0:1e4aa22fc1a1 259 */
Digixx 0:1e4aa22fc1a1 260 char getTapThreshold(void);
Digixx 0:1e4aa22fc1a1 261
Digixx 0:1e4aa22fc1a1 262 /**
Digixx 0:1e4aa22fc1a1 263 * Set the tap threshold.
Digixx 0:1e4aa22fc1a1 264 *
Digixx 0:1e4aa22fc1a1 265 * @param The tap threshold as an 8-bit number with a scale factor of
Digixx 0:1e4aa22fc1a1 266 * 62.5mg/LSB.
Digixx 0:1e4aa22fc1a1 267 */
Digixx 0:1e4aa22fc1a1 268 int setTapThreshold(char threshold);
Digixx 0:1e4aa22fc1a1 269
Digixx 0:1e4aa22fc1a1 270 /**
Digixx 0:1e4aa22fc1a1 271 * Get the tap duration required to trigger an event.
Digixx 0:1e4aa22fc1a1 272 *
Digixx 0:1e4aa22fc1a1 273 * @return The max time that an event must be above the tap threshold to
Digixx 0:1e4aa22fc1a1 274 * qualify as a tap event, in microseconds.
Digixx 0:1e4aa22fc1a1 275 */
Digixx 0:1e4aa22fc1a1 276 float getTapDuration(void);
Digixx 0:1e4aa22fc1a1 277
Digixx 0:1e4aa22fc1a1 278 /**
Digixx 0:1e4aa22fc1a1 279 * Set the tap duration required to trigger an event.
Digixx 0:1e4aa22fc1a1 280 *
Digixx 0:1e4aa22fc1a1 281 * @param duration_us The max time that an event must be above the tap
Digixx 0:1e4aa22fc1a1 282 * threshold to qualify as a tap event, in microseconds.
Digixx 0:1e4aa22fc1a1 283 * Time will be normalized by the scale factor which is
Digixx 0:1e4aa22fc1a1 284 * 625us/LSB. A value of 0 disables the single/double
Digixx 0:1e4aa22fc1a1 285 * tap functions.
Digixx 0:1e4aa22fc1a1 286 */
Digixx 0:1e4aa22fc1a1 287 int setTapDuration(short int duration_us);
Digixx 0:1e4aa22fc1a1 288
Digixx 0:1e4aa22fc1a1 289 /**
Digixx 0:1e4aa22fc1a1 290 * Get the tap latency between the detection of a tap and the time window.
Digixx 0:1e4aa22fc1a1 291 *
Digixx 0:1e4aa22fc1a1 292 * @return The wait time from the detection of a tap event to the start of
Digixx 0:1e4aa22fc1a1 293 * the time window during which a possible second tap event can be
Digixx 0:1e4aa22fc1a1 294 * detected in milliseconds.
Digixx 0:1e4aa22fc1a1 295 */
Digixx 0:1e4aa22fc1a1 296 float getTapLatency(void);
Digixx 0:1e4aa22fc1a1 297
Digixx 0:1e4aa22fc1a1 298 /**
Digixx 0:1e4aa22fc1a1 299 * Set the tap latency between the detection of a tap and the time window.
Digixx 0:1e4aa22fc1a1 300 *
Digixx 0:1e4aa22fc1a1 301 * @param latency_ms The wait time from the detection of a tap event to the
Digixx 0:1e4aa22fc1a1 302 * start of the time window during which a possible
Digixx 0:1e4aa22fc1a1 303 * second tap event can be detected in milliseconds.
Digixx 0:1e4aa22fc1a1 304 * A value of 0 disables the double tap function.
Digixx 0:1e4aa22fc1a1 305 */
Digixx 0:1e4aa22fc1a1 306 int setTapLatency(short int latency_ms);
Digixx 0:1e4aa22fc1a1 307
Digixx 0:1e4aa22fc1a1 308 /**
Digixx 0:1e4aa22fc1a1 309 * Get the time of window between tap latency and a double tap.
Digixx 0:1e4aa22fc1a1 310 *
Digixx 0:1e4aa22fc1a1 311 * @return The amount of time after the expiration of the latency time
Digixx 0:1e4aa22fc1a1 312 * during which a second valid tap can begin, in milliseconds.
Digixx 0:1e4aa22fc1a1 313 */
Digixx 0:1e4aa22fc1a1 314 float getWindowTime(void);
Digixx 0:1e4aa22fc1a1 315
Digixx 0:1e4aa22fc1a1 316 /**
Digixx 0:1e4aa22fc1a1 317 * Set the time of the window between tap latency and a double tap.
Digixx 0:1e4aa22fc1a1 318 *
Digixx 0:1e4aa22fc1a1 319 * @param window_ms The amount of time after the expiration of the latency
Digixx 0:1e4aa22fc1a1 320 * time during which a second valid tap can begin,
Digixx 0:1e4aa22fc1a1 321 * in milliseconds.
Digixx 0:1e4aa22fc1a1 322 */
Digixx 0:1e4aa22fc1a1 323 int setWindowTime(short int window_ms);
Digixx 0:1e4aa22fc1a1 324
Digixx 0:1e4aa22fc1a1 325 /**
Digixx 0:1e4aa22fc1a1 326 * Get the threshold value for detecting activity.
Digixx 0:1e4aa22fc1a1 327 *
Digixx 0:1e4aa22fc1a1 328 * @return The threshold value for detecting activity as an 8-bit number.
Digixx 0:1e4aa22fc1a1 329 * Scale factor is 62.5mg/LSB.
Digixx 0:1e4aa22fc1a1 330 */
Digixx 0:1e4aa22fc1a1 331 char getActivityThreshold(void);
Digixx 0:1e4aa22fc1a1 332
Digixx 0:1e4aa22fc1a1 333 /**
Digixx 0:1e4aa22fc1a1 334 * Set the threshold value for detecting activity.
Digixx 0:1e4aa22fc1a1 335 *
Digixx 0:1e4aa22fc1a1 336 * @param threshold The threshold value for detecting activity as an 8-bit
Digixx 0:1e4aa22fc1a1 337 * number. Scale factor is 62.5mg/LSB. A value of 0 may
Digixx 0:1e4aa22fc1a1 338 * result in undesirable behavior if the activity
Digixx 0:1e4aa22fc1a1 339 * interrupt is enabled.
Digixx 0:1e4aa22fc1a1 340 */
Digixx 0:1e4aa22fc1a1 341 int setActivityThreshold(char threshold);
Digixx 0:1e4aa22fc1a1 342
Digixx 0:1e4aa22fc1a1 343 /**
Digixx 0:1e4aa22fc1a1 344 * Get the threshold value for detecting inactivity.
Digixx 0:1e4aa22fc1a1 345 *
Digixx 0:1e4aa22fc1a1 346 * @return The threshold value for detecting inactivity as an 8-bit number.
Digixx 0:1e4aa22fc1a1 347 * Scale factor is 62.5mg/LSB.
Digixx 0:1e4aa22fc1a1 348 */
Digixx 0:1e4aa22fc1a1 349 char getInactivityThreshold(void);
Digixx 0:1e4aa22fc1a1 350
Digixx 0:1e4aa22fc1a1 351 /**
Digixx 0:1e4aa22fc1a1 352 * Set the threshold value for detecting inactivity.
Digixx 0:1e4aa22fc1a1 353 *
Digixx 0:1e4aa22fc1a1 354 * @param threshold The threshold value for detecting inactivity as an
Digixx 0:1e4aa22fc1a1 355 * 8-bit number. Scale factor is 62.5mg/LSB.
Digixx 0:1e4aa22fc1a1 356 */
Digixx 0:1e4aa22fc1a1 357 int setInactivityThreshold(char threshold);
Digixx 0:1e4aa22fc1a1 358
Digixx 0:1e4aa22fc1a1 359 /**
Digixx 0:1e4aa22fc1a1 360 * Get the time required for inactivity to be declared.
Digixx 0:1e4aa22fc1a1 361 *
Digixx 0:1e4aa22fc1a1 362 * @return The amount of time that acceleration must be less than the
Digixx 0:1e4aa22fc1a1 363 * inactivity threshold for inactivity to be declared, in
Digixx 0:1e4aa22fc1a1 364 * seconds.
Digixx 0:1e4aa22fc1a1 365 */
Digixx 0:1e4aa22fc1a1 366 char getTimeInactivity(void);
Digixx 0:1e4aa22fc1a1 367
Digixx 0:1e4aa22fc1a1 368 /**
Digixx 0:1e4aa22fc1a1 369 * Set the time required for inactivity to be declared.
Digixx 0:1e4aa22fc1a1 370 *
Digixx 0:1e4aa22fc1a1 371 * @param inactivity The amount of time that acceleration must be less than
Digixx 0:1e4aa22fc1a1 372 * the inactivity threshold for inactivity to be
Digixx 0:1e4aa22fc1a1 373 * declared, in seconds. A value of 0 results in an
Digixx 0:1e4aa22fc1a1 374 * interrupt when the output data is less than the
Digixx 0:1e4aa22fc1a1 375 * threshold inactivity.
Digixx 0:1e4aa22fc1a1 376 */
Digixx 0:1e4aa22fc1a1 377 int setTimeInactivity(char timeInactivity);
Digixx 0:1e4aa22fc1a1 378
Digixx 0:1e4aa22fc1a1 379 /**
Digixx 0:1e4aa22fc1a1 380 * Get the activity/inactivity control settings.
Digixx 0:1e4aa22fc1a1 381 *
Digixx 0:1e4aa22fc1a1 382 * D7 D6 D5 D4
Digixx 0:1e4aa22fc1a1 383 * +-----------+--------------+--------------+--------------+
Digixx 0:1e4aa22fc1a1 384 * | ACT ac/dc | ACT_X enable | ACT_Y enable | ACT_Z enable |
Digixx 0:1e4aa22fc1a1 385 * +-----------+--------------+--------------+--------------+
Digixx 0:1e4aa22fc1a1 386 *
Digixx 0:1e4aa22fc1a1 387 * D3 D2 D1 D0
Digixx 0:1e4aa22fc1a1 388 * +-------------+----------------+----------------+----------------+
Digixx 0:1e4aa22fc1a1 389 * | INACT ac/dc | INACT_X enable | INACT_Y enable | INACT_Z enable |
Digixx 0:1e4aa22fc1a1 390 * +-------------+----------------+----------------+----------------+
Digixx 0:1e4aa22fc1a1 391 *
Digixx 0:1e4aa22fc1a1 392 * See datasheet for details.
Digixx 0:1e4aa22fc1a1 393 *
Digixx 0:1e4aa22fc1a1 394 * @return The contents of the ACT_INACT_CTL register.
Digixx 0:1e4aa22fc1a1 395 */
Digixx 0:1e4aa22fc1a1 396 char getActivityInactivityControl(void);
Digixx 0:1e4aa22fc1a1 397
Digixx 0:1e4aa22fc1a1 398 /**
Digixx 0:1e4aa22fc1a1 399 * Set the activity/inactivity control settings.
Digixx 0:1e4aa22fc1a1 400 *
Digixx 0:1e4aa22fc1a1 401 * D7 D6 D5 D4
Digixx 0:1e4aa22fc1a1 402 * +-----------+--------------+--------------+--------------+
Digixx 0:1e4aa22fc1a1 403 * | ACT ac/dc | ACT_X enable | ACT_Y enable | ACT_Z enable |
Digixx 0:1e4aa22fc1a1 404 * +-----------+--------------+--------------+--------------+
Digixx 0:1e4aa22fc1a1 405 *
Digixx 0:1e4aa22fc1a1 406 * D3 D2 D1 D0
Digixx 0:1e4aa22fc1a1 407 * +-------------+----------------+----------------+----------------+
Digixx 0:1e4aa22fc1a1 408 * | INACT ac/dc | INACT_X enable | INACT_Y enable | INACT_Z enable |
Digixx 0:1e4aa22fc1a1 409 * +-------------+----------------+----------------+----------------+
Digixx 0:1e4aa22fc1a1 410 *
Digixx 0:1e4aa22fc1a1 411 * See datasheet for details.
Digixx 0:1e4aa22fc1a1 412 *
Digixx 0:1e4aa22fc1a1 413 * @param settings The control byte to write to the ACT_INACT_CTL register.
Digixx 0:1e4aa22fc1a1 414 */
Digixx 0:1e4aa22fc1a1 415 int setActivityInactivityControl(char settings);
Digixx 0:1e4aa22fc1a1 416
Digixx 0:1e4aa22fc1a1 417 /**
Digixx 0:1e4aa22fc1a1 418 * Get the threshold for free fall detection.
Digixx 0:1e4aa22fc1a1 419 *
Digixx 0:1e4aa22fc1a1 420 * @return The threshold value for free-fall detection, as an 8-bit number,
Digixx 0:1e4aa22fc1a1 421 * with scale factor 62.5mg/LSB.
Digixx 0:1e4aa22fc1a1 422 */
Digixx 0:1e4aa22fc1a1 423 char getFreefallThreshold(void);
Digixx 0:1e4aa22fc1a1 424
Digixx 0:1e4aa22fc1a1 425 /**
Digixx 0:1e4aa22fc1a1 426 * Set the threshold for free fall detection.
Digixx 0:1e4aa22fc1a1 427 *
Digixx 0:1e4aa22fc1a1 428 * @return The threshold value for free-fall detection, as an 8-bit number,
Digixx 0:1e4aa22fc1a1 429 * with scale factor 62.5mg/LSB. A value of 0 may result in
Digixx 0:1e4aa22fc1a1 430 * undesirable behavior if the free-fall interrupt is enabled.
Digixx 0:1e4aa22fc1a1 431 * Values between 300 mg and 600 mg (0x05 to 0x09) are recommended.
Digixx 0:1e4aa22fc1a1 432 */
Digixx 0:1e4aa22fc1a1 433 int setFreefallThreshold(char threshold);
Digixx 0:1e4aa22fc1a1 434
Digixx 0:1e4aa22fc1a1 435 /**
Digixx 0:1e4aa22fc1a1 436 * Get the time required to generate a free fall interrupt.
Digixx 0:1e4aa22fc1a1 437 *
Digixx 0:1e4aa22fc1a1 438 * @return The minimum time that the value of all axes must be less than
Digixx 0:1e4aa22fc1a1 439 * the freefall threshold to generate a free-fall interrupt, in
Digixx 0:1e4aa22fc1a1 440 * milliseconds.
Digixx 0:1e4aa22fc1a1 441 */
Digixx 0:1e4aa22fc1a1 442 char getFreefallTime(void);
Digixx 0:1e4aa22fc1a1 443
Digixx 0:1e4aa22fc1a1 444 /**
Digixx 0:1e4aa22fc1a1 445 * Set the time required to generate a free fall interrupt.
Digixx 0:1e4aa22fc1a1 446 *
Digixx 0:1e4aa22fc1a1 447 * @return The minimum time that the value of all axes must be less than
Digixx 0:1e4aa22fc1a1 448 * the freefall threshold to generate a free-fall interrupt, in
Digixx 0:1e4aa22fc1a1 449 * milliseconds. A value of 0 may result in undesirable behavior
Digixx 0:1e4aa22fc1a1 450 * if the free-fall interrupt is enabled. Values between 100 ms
Digixx 0:1e4aa22fc1a1 451 * and 350 ms (0x14 to 0x46) are recommended.
Digixx 0:1e4aa22fc1a1 452 */
Digixx 0:1e4aa22fc1a1 453 int setFreefallTime(short int freefallTime_ms);
Digixx 0:1e4aa22fc1a1 454
Digixx 0:1e4aa22fc1a1 455 /**
Digixx 0:1e4aa22fc1a1 456 * Get the axis tap settings.
Digixx 0:1e4aa22fc1a1 457 *
Digixx 0:1e4aa22fc1a1 458 * D3 D2 D1 D0
Digixx 0:1e4aa22fc1a1 459 * +----------+--------------+--------------+--------------+
Digixx 0:1e4aa22fc1a1 460 * | Suppress | TAP_X enable | TAP_Y enable | TAP_Z enable |
Digixx 0:1e4aa22fc1a1 461 * +----------+--------------+--------------+--------------+
Digixx 0:1e4aa22fc1a1 462 *
Digixx 0:1e4aa22fc1a1 463 * (D7-D4 are 0s).
Digixx 0:1e4aa22fc1a1 464 *
Digixx 0:1e4aa22fc1a1 465 * See datasheet for more details.
Digixx 0:1e4aa22fc1a1 466 *
Digixx 0:1e4aa22fc1a1 467 * @return The contents of the TAP_AXES register.
Digixx 0:1e4aa22fc1a1 468 */
Digixx 0:1e4aa22fc1a1 469 char getTapAxisControl(void);
Digixx 0:1e4aa22fc1a1 470
Digixx 0:1e4aa22fc1a1 471 /**
Digixx 0:1e4aa22fc1a1 472 * Set the axis tap settings.
Digixx 0:1e4aa22fc1a1 473 *
Digixx 0:1e4aa22fc1a1 474 * D3 D2 D1 D0
Digixx 0:1e4aa22fc1a1 475 * +----------+--------------+--------------+--------------+
Digixx 0:1e4aa22fc1a1 476 * | Suppress | TAP_X enable | TAP_Y enable | TAP_Z enable |
Digixx 0:1e4aa22fc1a1 477 * +----------+--------------+--------------+--------------+
Digixx 0:1e4aa22fc1a1 478 *
Digixx 0:1e4aa22fc1a1 479 * (D7-D4 are 0s).
Digixx 0:1e4aa22fc1a1 480 *
Digixx 0:1e4aa22fc1a1 481 * See datasheet for more details.
Digixx 0:1e4aa22fc1a1 482 *
Digixx 0:1e4aa22fc1a1 483 * @param The control byte to write to the TAP_AXES register.
Digixx 0:1e4aa22fc1a1 484 */
Digixx 0:1e4aa22fc1a1 485 int setTapAxisControl(char settings);
Digixx 0:1e4aa22fc1a1 486
Digixx 0:1e4aa22fc1a1 487 /**
Digixx 0:1e4aa22fc1a1 488 * Get the source of a tap.
Digixx 0:1e4aa22fc1a1 489 *
Digixx 0:1e4aa22fc1a1 490 * @return The contents of the ACT_TAP_STATUS register.
Digixx 0:1e4aa22fc1a1 491 */
Digixx 0:1e4aa22fc1a1 492 char getTapSource(void);
Digixx 0:1e4aa22fc1a1 493
Digixx 0:1e4aa22fc1a1 494 /**
Digixx 0:1e4aa22fc1a1 495 * Get the interrupt enable settings.
Digixx 0:1e4aa22fc1a1 496 *
Digixx 0:1e4aa22fc1a1 497 * @return The contents of the INT_ENABLE register.
Digixx 0:1e4aa22fc1a1 498 */
Digixx 0:1e4aa22fc1a1 499
Digixx 0:1e4aa22fc1a1 500 char getInterruptEnableControl(void);
Digixx 0:1e4aa22fc1a1 501
Digixx 0:1e4aa22fc1a1 502 /**
Digixx 0:1e4aa22fc1a1 503 * Set the interrupt enable settings.
Digixx 0:1e4aa22fc1a1 504 *
Digixx 0:1e4aa22fc1a1 505 * @param settings The control byte to write to the INT_ENABLE register.
Digixx 0:1e4aa22fc1a1 506 */
Digixx 0:1e4aa22fc1a1 507 int setInterruptEnableControl(char settings);
Digixx 0:1e4aa22fc1a1 508
Digixx 0:1e4aa22fc1a1 509 /**
Digixx 0:1e4aa22fc1a1 510 * Get the interrupt mapping settings.
Digixx 0:1e4aa22fc1a1 511 *
Digixx 0:1e4aa22fc1a1 512 * @return The contents of the INT_MAP register.
Digixx 0:1e4aa22fc1a1 513 */
Digixx 0:1e4aa22fc1a1 514 char getInterruptMappingControl(void);
Digixx 0:1e4aa22fc1a1 515
Digixx 0:1e4aa22fc1a1 516 /**
Digixx 0:1e4aa22fc1a1 517 * Set the interrupt mapping settings.
Digixx 0:1e4aa22fc1a1 518 *
Digixx 0:1e4aa22fc1a1 519 * @param settings The control byte to write to the INT_MAP register.
Digixx 0:1e4aa22fc1a1 520 */
Digixx 0:1e4aa22fc1a1 521 int setInterruptMappingControl(char settings);
Digixx 0:1e4aa22fc1a1 522
Digixx 0:1e4aa22fc1a1 523 /**
Digixx 0:1e4aa22fc1a1 524 * Get the interrupt source.
Digixx 0:1e4aa22fc1a1 525 *
Digixx 0:1e4aa22fc1a1 526 * @return The contents of the INT_SOURCE register.
Digixx 0:1e4aa22fc1a1 527 */
Digixx 0:1e4aa22fc1a1 528 char getInterruptSource(void);
Digixx 0:1e4aa22fc1a1 529
Digixx 0:1e4aa22fc1a1 530
Digixx 0:1e4aa22fc1a1 531 private:
Digixx 0:1e4aa22fc1a1 532
Digixx 0:1e4aa22fc1a1 533 I2C i2c_;
Digixx 0:1e4aa22fc1a1 534
Digixx 0:1e4aa22fc1a1 535
Digixx 0:1e4aa22fc1a1 536 /**
Digixx 0:1e4aa22fc1a1 537 * Read one byte from a register on the device.
Digixx 0:1e4aa22fc1a1 538 *
Digixx 0:1e4aa22fc1a1 539 * @param: - the address to be read from
Digixx 0:1e4aa22fc1a1 540 *
Digixx 0:1e4aa22fc1a1 541 * @return: the value of the data read
Digixx 0:1e4aa22fc1a1 542 */
Digixx 0:1e4aa22fc1a1 543 char SingleByteRead(char address);
Digixx 0:1e4aa22fc1a1 544
Digixx 0:1e4aa22fc1a1 545 /**
Digixx 0:1e4aa22fc1a1 546 * Write one byte to a register on the device.
Digixx 0:1e4aa22fc1a1 547 *
Digixx 0:1e4aa22fc1a1 548 * @param:
Digixx 0:1e4aa22fc1a1 549 - address of the register to write to.
Digixx 0:1e4aa22fc1a1 550 - the value of the data to store
Digixx 0:1e4aa22fc1a1 551 */
gltest26 4:8046894b947e 552 int SingleByteWrite(char address, char data);
Digixx 0:1e4aa22fc1a1 553
Digixx 0:1e4aa22fc1a1 554 /**
Digixx 0:1e4aa22fc1a1 555 * Read several consecutive bytes on the device and store them in a given location.
Digixx 0:1e4aa22fc1a1 556 *
Digixx 0:1e4aa22fc1a1 557 * @param startAddress: The address of the first register to read from.
Digixx 0:1e4aa22fc1a1 558 * @param ptr_output: a pointer to the location to store the data being read
Digixx 0:1e4aa22fc1a1 559 * @param size: The number of bytes to read.
Digixx 0:1e4aa22fc1a1 560 */
Digixx 0:1e4aa22fc1a1 561 void multiByteRead(char startAddress, char* ptr_output, int size);
Digixx 0:1e4aa22fc1a1 562
Digixx 0:1e4aa22fc1a1 563 /**
Digixx 0:1e4aa22fc1a1 564 * Write several consecutive bytes on the device.
Digixx 0:1e4aa22fc1a1 565 *
Digixx 0:1e4aa22fc1a1 566 * @param startAddress: The address of the first register to write to.
Digixx 0:1e4aa22fc1a1 567 * @param ptr_data: Pointer to a location which contains the data to write.
Digixx 0:1e4aa22fc1a1 568 * @param size: The number of bytes to write.
Digixx 0:1e4aa22fc1a1 569 */
Digixx 0:1e4aa22fc1a1 570 int multiByteWrite(char startAddress, char* ptr_data, int size);
Digixx 0:1e4aa22fc1a1 571
gltest26 3:7b83694c7292 572 private:
gltest26 3:7b83694c7292 573
gltest26 3:7b83694c7292 574 /**
gltest26 3:7b83694c7292 575 * Converts little-endian 2's complement byte pair to native byte order of
gltest26 3:7b83694c7292 576 * the CPU and then sign extend it to the CPU's register size.
gltest26 3:7b83694c7292 577 *
gltest26 3:7b83694c7292 578 * Implemented here to make the compiler inline expand it.
gltest26 3:7b83694c7292 579 */
gltest26 3:7b83694c7292 580 static int wordExtend(const char rx[2]){
gltest26 3:7b83694c7292 581 // Readings are expressed in 16bit 2's complement, so we must first
gltest26 3:7b83694c7292 582 // concatenate two bytes to make a word and sign extend it to obtain
gltest26 3:7b83694c7292 583 // correct negative values.
gltest26 3:7b83694c7292 584 // ARMCC compiles char as unsigned, which means no sign extension is
gltest26 3:7b83694c7292 585 // performed during bitwise operations to chars. But we should make sure
gltest26 3:7b83694c7292 586 // that lower byte won't extend its sign past upper byte for other
gltest26 3:7b83694c7292 587 // compilers if we want to keep it portable.
gltest26 3:7b83694c7292 588 return int16_t(((unsigned char)rx[1] << 8) | (unsigned char)rx[0]);
gltest26 3:7b83694c7292 589 }
gltest26 3:7b83694c7292 590
Digixx 0:1e4aa22fc1a1 591 };
Digixx 0:1e4aa22fc1a1 592
Digixx 0:1e4aa22fc1a1 593 #endif /* ADXL345_H */