Committer:
donatien
Date:
Thu May 31 16:10:44 2012 +0000
Revision:
0:5c1bd3cd668d

        

Who changed what in which revision?

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