Remove Chip Select transitions. It affects other devices in the same bus.

Committer:
elrafapadron
Date:
Sun Nov 28 01:01:52 2010 +0000
Revision:
1:a948fcfd705e
Parent:
0:efba8208b490

        

Who changed what in which revision?

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