Websocket Hello World over a wifi network

Dependencies:   EthernetNetIf mbed DNSResolver

Committer:
samux
Date:
Fri Aug 26 13:23:52 2011 +0000
Revision:
0:e10d21debdaa

        

Who changed what in which revision?

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