Dependents:   ADXL345 TCPspittertobi ADXL345 RS485R_2 ... more

Committer:
nimbusgb
Date:
Wed Feb 02 06:38:11 2011 +0000
Revision:
0:3957077e9775
CS removed since to be in I2C mode the chip should hav its CS tied to Vcc anyway

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nimbusgb 0:3957077e9775 1 /**
nimbusgb 0:3957077e9775 2 * @author Jose R. Padron
nimbusgb 0:3957077e9775 3 *
nimbusgb 0:3957077e9775 4 * @section LICENSE
nimbusgb 0:3957077e9775 5 *
nimbusgb 0:3957077e9775 6 * Copyright (c) 2010 ARM Limited
nimbusgb 0:3957077e9775 7 *
nimbusgb 0:3957077e9775 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
nimbusgb 0:3957077e9775 9 * of this software and associated documentation files (the "Software"), to deal
nimbusgb 0:3957077e9775 10 * in the Software without restriction, including without limitation the rights
nimbusgb 0:3957077e9775 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
nimbusgb 0:3957077e9775 12 * copies of the Software, and to permit persons to whom the Software is
nimbusgb 0:3957077e9775 13 * furnished to do so, subject to the following conditions:
nimbusgb 0:3957077e9775 14 *
nimbusgb 0:3957077e9775 15 * The above copyright notice and this permission notice shall be included in
nimbusgb 0:3957077e9775 16 * all copies or substantial portions of the Software.
nimbusgb 0:3957077e9775 17 *
nimbusgb 0:3957077e9775 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
nimbusgb 0:3957077e9775 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
nimbusgb 0:3957077e9775 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
nimbusgb 0:3957077e9775 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
nimbusgb 0:3957077e9775 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
nimbusgb 0:3957077e9775 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
nimbusgb 0:3957077e9775 24 * THE SOFTWARE.
nimbusgb 0:3957077e9775 25 *
nimbusgb 0:3957077e9775 26 * @section DESCRIPTION
nimbusgb 0:3957077e9775 27 *
nimbusgb 0:3957077e9775 28 * ADXL345, triple axis, digital interface, accelerometer.
nimbusgb 0:3957077e9775 29 *
nimbusgb 0:3957077e9775 30 * Datasheet:
nimbusgb 0:3957077e9775 31 *
nimbusgb 0:3957077e9775 32 * http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf
nimbusgb 0:3957077e9775 33 */
nimbusgb 0:3957077e9775 34
nimbusgb 0:3957077e9775 35 /**
nimbusgb 0:3957077e9775 36 * Includes
nimbusgb 0:3957077e9775 37 */
nimbusgb 0:3957077e9775 38 #include "ADXL345_I2C.h"
nimbusgb 0:3957077e9775 39
nimbusgb 0:3957077e9775 40 ADXL345_I2C::ADXL345_I2C(PinName sda,
nimbusgb 0:3957077e9775 41 PinName scl) : i2c_(sda,scl) {
nimbusgb 0:3957077e9775 42
nimbusgb 0:3957077e9775 43
nimbusgb 0:3957077e9775 44 //100KHz, as specified by the datasheet.
nimbusgb 0:3957077e9775 45 i2c_.frequency(100000);
nimbusgb 0:3957077e9775 46 wait_us(500);
nimbusgb 0:3957077e9775 47
nimbusgb 0:3957077e9775 48 }
nimbusgb 0:3957077e9775 49
nimbusgb 0:3957077e9775 50 char ADXL345_I2C::getDevId(void) {
nimbusgb 0:3957077e9775 51
nimbusgb 0:3957077e9775 52 return oneByteRead(ADXL345_DEVID_REG);
nimbusgb 0:3957077e9775 53
nimbusgb 0:3957077e9775 54 }
nimbusgb 0:3957077e9775 55
nimbusgb 0:3957077e9775 56 int ADXL345_I2C::getTapThreshold(void) {
nimbusgb 0:3957077e9775 57
nimbusgb 0:3957077e9775 58 return oneByteRead(ADXL345_THRESH_TAP_REG);
nimbusgb 0:3957077e9775 59
nimbusgb 0:3957077e9775 60 }
nimbusgb 0:3957077e9775 61
nimbusgb 0:3957077e9775 62 void ADXL345_I2C::setTapThreshold(int threshold) {
nimbusgb 0:3957077e9775 63
nimbusgb 0:3957077e9775 64 oneByteWrite(ADXL345_THRESH_TAP_REG, threshold);
nimbusgb 0:3957077e9775 65
nimbusgb 0:3957077e9775 66 }
nimbusgb 0:3957077e9775 67
nimbusgb 0:3957077e9775 68 int ADXL345_I2C::getOffset(int axis) {
nimbusgb 0:3957077e9775 69
nimbusgb 0:3957077e9775 70 int address = 0;
nimbusgb 0:3957077e9775 71
nimbusgb 0:3957077e9775 72 if (axis == ADXL345_X) {
nimbusgb 0:3957077e9775 73 address = ADXL345_OFSX_REG;
nimbusgb 0:3957077e9775 74 } else if (axis == ADXL345_Y) {
nimbusgb 0:3957077e9775 75 address = ADXL345_OFSY_REG;
nimbusgb 0:3957077e9775 76 } else if (axis == ADXL345_Z) {
nimbusgb 0:3957077e9775 77 address = ADXL345_OFSZ_REG;
nimbusgb 0:3957077e9775 78 }
nimbusgb 0:3957077e9775 79
nimbusgb 0:3957077e9775 80 return oneByteRead(address);
nimbusgb 0:3957077e9775 81
nimbusgb 0:3957077e9775 82 }
nimbusgb 0:3957077e9775 83
nimbusgb 0:3957077e9775 84 void ADXL345_I2C::setOffset(int axis, char offset) {
nimbusgb 0:3957077e9775 85
nimbusgb 0:3957077e9775 86 char address = 0;
nimbusgb 0:3957077e9775 87
nimbusgb 0:3957077e9775 88 if (axis == ADXL345_X) {
nimbusgb 0:3957077e9775 89 address = ADXL345_OFSX_REG;
nimbusgb 0:3957077e9775 90 } else if (axis == ADXL345_Y) {
nimbusgb 0:3957077e9775 91 address = ADXL345_OFSY_REG;
nimbusgb 0:3957077e9775 92 } else if (axis == ADXL345_Z) {
nimbusgb 0:3957077e9775 93 address = ADXL345_OFSZ_REG;
nimbusgb 0:3957077e9775 94 }
nimbusgb 0:3957077e9775 95
nimbusgb 0:3957077e9775 96 return oneByteWrite(address, offset);
nimbusgb 0:3957077e9775 97
nimbusgb 0:3957077e9775 98 }
nimbusgb 0:3957077e9775 99
nimbusgb 0:3957077e9775 100 int ADXL345_I2C::getTapDuration(void) {
nimbusgb 0:3957077e9775 101
nimbusgb 0:3957077e9775 102 return oneByteRead(ADXL345_DUR_REG)*625;
nimbusgb 0:3957077e9775 103
nimbusgb 0:3957077e9775 104 }
nimbusgb 0:3957077e9775 105
nimbusgb 0:3957077e9775 106 void ADXL345_I2C::setTapDuration(int duration_us) {
nimbusgb 0:3957077e9775 107
nimbusgb 0:3957077e9775 108 int tapDuration = duration_us / 625;
nimbusgb 0:3957077e9775 109
nimbusgb 0:3957077e9775 110 oneByteWrite(ADXL345_DUR_REG, tapDuration);
nimbusgb 0:3957077e9775 111
nimbusgb 0:3957077e9775 112 }
nimbusgb 0:3957077e9775 113
nimbusgb 0:3957077e9775 114 float ADXL345_I2C::getTapLatency(void) {
nimbusgb 0:3957077e9775 115
nimbusgb 0:3957077e9775 116 return oneByteRead(ADXL345_LATENT_REG)*1.25;
nimbusgb 0:3957077e9775 117
nimbusgb 0:3957077e9775 118 }
nimbusgb 0:3957077e9775 119
nimbusgb 0:3957077e9775 120 void ADXL345_I2C::setTapLatency(int latency_ms) {
nimbusgb 0:3957077e9775 121
nimbusgb 0:3957077e9775 122 int tapLatency = latency_ms / 1.25;
nimbusgb 0:3957077e9775 123
nimbusgb 0:3957077e9775 124 oneByteWrite(ADXL345_LATENT_REG, tapLatency);
nimbusgb 0:3957077e9775 125
nimbusgb 0:3957077e9775 126 }
nimbusgb 0:3957077e9775 127
nimbusgb 0:3957077e9775 128 float ADXL345_I2C::getWindowTime(void) {
nimbusgb 0:3957077e9775 129
nimbusgb 0:3957077e9775 130 return oneByteRead(ADXL345_WINDOW_REG)*1.25;
nimbusgb 0:3957077e9775 131
nimbusgb 0:3957077e9775 132 }
nimbusgb 0:3957077e9775 133
nimbusgb 0:3957077e9775 134 void ADXL345_I2C::setWindowTime(int window_ms) {
nimbusgb 0:3957077e9775 135
nimbusgb 0:3957077e9775 136 int windowTime = window_ms / 1.25;
nimbusgb 0:3957077e9775 137
nimbusgb 0:3957077e9775 138 oneByteWrite(ADXL345_WINDOW_REG, windowTime);
nimbusgb 0:3957077e9775 139
nimbusgb 0:3957077e9775 140 }
nimbusgb 0:3957077e9775 141
nimbusgb 0:3957077e9775 142 int ADXL345_I2C::getActivityThreshold(void) {
nimbusgb 0:3957077e9775 143
nimbusgb 0:3957077e9775 144 return oneByteRead(ADXL345_THRESH_ACT_REG);
nimbusgb 0:3957077e9775 145
nimbusgb 0:3957077e9775 146 }
nimbusgb 0:3957077e9775 147
nimbusgb 0:3957077e9775 148 void ADXL345_I2C::setActivityThreshold(int threshold) {
nimbusgb 0:3957077e9775 149
nimbusgb 0:3957077e9775 150 oneByteWrite(ADXL345_THRESH_ACT_REG, threshold);
nimbusgb 0:3957077e9775 151
nimbusgb 0:3957077e9775 152 }
nimbusgb 0:3957077e9775 153
nimbusgb 0:3957077e9775 154 int ADXL345_I2C::getInactivityThreshold(void) {
nimbusgb 0:3957077e9775 155
nimbusgb 0:3957077e9775 156 return oneByteRead(ADXL345_THRESH_INACT_REG);
nimbusgb 0:3957077e9775 157
nimbusgb 0:3957077e9775 158 }
nimbusgb 0:3957077e9775 159
nimbusgb 0:3957077e9775 160 void ADXL345_I2C::setInactivityThreshold(int threshold) {
nimbusgb 0:3957077e9775 161
nimbusgb 0:3957077e9775 162 return oneByteWrite(ADXL345_THRESH_INACT_REG, threshold);
nimbusgb 0:3957077e9775 163
nimbusgb 0:3957077e9775 164 }
nimbusgb 0:3957077e9775 165
nimbusgb 0:3957077e9775 166 int ADXL345_I2C::getTimeInactivity(void) {
nimbusgb 0:3957077e9775 167
nimbusgb 0:3957077e9775 168 return oneByteRead(ADXL345_TIME_INACT_REG);
nimbusgb 0:3957077e9775 169
nimbusgb 0:3957077e9775 170 }
nimbusgb 0:3957077e9775 171
nimbusgb 0:3957077e9775 172 void ADXL345_I2C::setTimeInactivity(int timeInactivity) {
nimbusgb 0:3957077e9775 173
nimbusgb 0:3957077e9775 174 oneByteWrite(ADXL345_TIME_INACT_REG, timeInactivity);
nimbusgb 0:3957077e9775 175
nimbusgb 0:3957077e9775 176 }
nimbusgb 0:3957077e9775 177
nimbusgb 0:3957077e9775 178 int ADXL345_I2C::getActivityInactivityControl(void) {
nimbusgb 0:3957077e9775 179
nimbusgb 0:3957077e9775 180 return oneByteRead(ADXL345_ACT_INACT_CTL_REG);
nimbusgb 0:3957077e9775 181
nimbusgb 0:3957077e9775 182 }
nimbusgb 0:3957077e9775 183
nimbusgb 0:3957077e9775 184 void ADXL345_I2C::setActivityInactivityControl(int settings) {
nimbusgb 0:3957077e9775 185
nimbusgb 0:3957077e9775 186 oneByteWrite(ADXL345_ACT_INACT_CTL_REG, settings);
nimbusgb 0:3957077e9775 187
nimbusgb 0:3957077e9775 188 }
nimbusgb 0:3957077e9775 189
nimbusgb 0:3957077e9775 190 int ADXL345_I2C::getFreefallThreshold(void) {
nimbusgb 0:3957077e9775 191
nimbusgb 0:3957077e9775 192 return oneByteRead(ADXL345_THRESH_FF_REG);
nimbusgb 0:3957077e9775 193
nimbusgb 0:3957077e9775 194 }
nimbusgb 0:3957077e9775 195
nimbusgb 0:3957077e9775 196 void ADXL345_I2C::setFreefallThreshold(int threshold) {
nimbusgb 0:3957077e9775 197
nimbusgb 0:3957077e9775 198 oneByteWrite(ADXL345_THRESH_FF_REG, threshold);
nimbusgb 0:3957077e9775 199
nimbusgb 0:3957077e9775 200 }
nimbusgb 0:3957077e9775 201
nimbusgb 0:3957077e9775 202 int ADXL345_I2C::getFreefallTime(void) {
nimbusgb 0:3957077e9775 203
nimbusgb 0:3957077e9775 204 return oneByteRead(ADXL345_TIME_FF_REG)*5;
nimbusgb 0:3957077e9775 205
nimbusgb 0:3957077e9775 206 }
nimbusgb 0:3957077e9775 207
nimbusgb 0:3957077e9775 208 void ADXL345_I2C::setFreefallTime(int freefallTime_ms) {
nimbusgb 0:3957077e9775 209
nimbusgb 0:3957077e9775 210 int freefallTime = freefallTime_ms / 5;
nimbusgb 0:3957077e9775 211
nimbusgb 0:3957077e9775 212 oneByteWrite(ADXL345_TIME_FF_REG, freefallTime);
nimbusgb 0:3957077e9775 213
nimbusgb 0:3957077e9775 214 }
nimbusgb 0:3957077e9775 215
nimbusgb 0:3957077e9775 216 int ADXL345_I2C::getTapAxisControl(void) {
nimbusgb 0:3957077e9775 217
nimbusgb 0:3957077e9775 218 return oneByteRead(ADXL345_TAP_AXES_REG);
nimbusgb 0:3957077e9775 219
nimbusgb 0:3957077e9775 220 }
nimbusgb 0:3957077e9775 221
nimbusgb 0:3957077e9775 222 void ADXL345_I2C::setTapAxisControl(int settings) {
nimbusgb 0:3957077e9775 223
nimbusgb 0:3957077e9775 224 oneByteWrite(ADXL345_TAP_AXES_REG, settings);
nimbusgb 0:3957077e9775 225
nimbusgb 0:3957077e9775 226 }
nimbusgb 0:3957077e9775 227
nimbusgb 0:3957077e9775 228 int ADXL345_I2C::getTapSource(void) {
nimbusgb 0:3957077e9775 229
nimbusgb 0:3957077e9775 230 return oneByteRead(ADXL345_ACT_TAP_STATUS_REG);
nimbusgb 0:3957077e9775 231
nimbusgb 0:3957077e9775 232 }
nimbusgb 0:3957077e9775 233
nimbusgb 0:3957077e9775 234 void ADXL345_I2C::setPowerMode(char mode) {
nimbusgb 0:3957077e9775 235
nimbusgb 0:3957077e9775 236 //Get the current register contents, so we don't clobber the rate value.
nimbusgb 0:3957077e9775 237 char registerContents = oneByteRead(ADXL345_BW_RATE_REG);
nimbusgb 0:3957077e9775 238
nimbusgb 0:3957077e9775 239 registerContents = (mode << 4) | registerContents;
nimbusgb 0:3957077e9775 240
nimbusgb 0:3957077e9775 241 oneByteWrite(ADXL345_BW_RATE_REG, registerContents);
nimbusgb 0:3957077e9775 242
nimbusgb 0:3957077e9775 243 }
nimbusgb 0:3957077e9775 244
nimbusgb 0:3957077e9775 245 int ADXL345_I2C::getPowerControl(void) {
nimbusgb 0:3957077e9775 246
nimbusgb 0:3957077e9775 247 return oneByteRead(ADXL345_POWER_CTL_REG);
nimbusgb 0:3957077e9775 248
nimbusgb 0:3957077e9775 249 }
nimbusgb 0:3957077e9775 250
nimbusgb 0:3957077e9775 251 void ADXL345_I2C::setPowerControl(int settings) {
nimbusgb 0:3957077e9775 252
nimbusgb 0:3957077e9775 253 oneByteWrite(ADXL345_POWER_CTL_REG, settings);
nimbusgb 0:3957077e9775 254
nimbusgb 0:3957077e9775 255 }
nimbusgb 0:3957077e9775 256
nimbusgb 0:3957077e9775 257 int ADXL345_I2C::getInterruptEnableControl(void) {
nimbusgb 0:3957077e9775 258
nimbusgb 0:3957077e9775 259 return oneByteRead(ADXL345_INT_ENABLE_REG);
nimbusgb 0:3957077e9775 260
nimbusgb 0:3957077e9775 261 }
nimbusgb 0:3957077e9775 262
nimbusgb 0:3957077e9775 263 void ADXL345_I2C::setInterruptEnableControl(int settings) {
nimbusgb 0:3957077e9775 264
nimbusgb 0:3957077e9775 265 oneByteWrite(ADXL345_INT_ENABLE_REG, settings);
nimbusgb 0:3957077e9775 266
nimbusgb 0:3957077e9775 267 }
nimbusgb 0:3957077e9775 268
nimbusgb 0:3957077e9775 269 int ADXL345_I2C::getInterruptMappingControl(void) {
nimbusgb 0:3957077e9775 270
nimbusgb 0:3957077e9775 271 return oneByteRead(ADXL345_INT_MAP_REG);
nimbusgb 0:3957077e9775 272
nimbusgb 0:3957077e9775 273 }
nimbusgb 0:3957077e9775 274
nimbusgb 0:3957077e9775 275 void ADXL345_I2C::setInterruptMappingControl(int settings) {
nimbusgb 0:3957077e9775 276
nimbusgb 0:3957077e9775 277 oneByteWrite(ADXL345_INT_MAP_REG, settings);
nimbusgb 0:3957077e9775 278
nimbusgb 0:3957077e9775 279 }
nimbusgb 0:3957077e9775 280
nimbusgb 0:3957077e9775 281 int ADXL345_I2C::getInterruptSource(void){
nimbusgb 0:3957077e9775 282
nimbusgb 0:3957077e9775 283 return oneByteRead(ADXL345_INT_SOURCE_REG);
nimbusgb 0:3957077e9775 284
nimbusgb 0:3957077e9775 285 }
nimbusgb 0:3957077e9775 286
nimbusgb 0:3957077e9775 287 int ADXL345_I2C::getDataFormatControl(void){
nimbusgb 0:3957077e9775 288
nimbusgb 0:3957077e9775 289 return oneByteRead(ADXL345_DATA_FORMAT_REG);
nimbusgb 0:3957077e9775 290
nimbusgb 0:3957077e9775 291 }
nimbusgb 0:3957077e9775 292
nimbusgb 0:3957077e9775 293 void ADXL345_I2C::setDataFormatControl(int settings){
nimbusgb 0:3957077e9775 294
nimbusgb 0:3957077e9775 295 oneByteWrite(ADXL345_DATA_FORMAT_REG, settings);
nimbusgb 0:3957077e9775 296
nimbusgb 0:3957077e9775 297 }
nimbusgb 0:3957077e9775 298
nimbusgb 0:3957077e9775 299 void ADXL345_I2C::setDataRate(int rate) {
nimbusgb 0:3957077e9775 300
nimbusgb 0:3957077e9775 301 //Get the current register contents, so we don't clobber the power bit.
nimbusgb 0:3957077e9775 302 char registerContents = oneByteRead(ADXL345_BW_RATE_REG);
nimbusgb 0:3957077e9775 303
nimbusgb 0:3957077e9775 304 registerContents &= 0x10;
nimbusgb 0:3957077e9775 305 registerContents |= rate;
nimbusgb 0:3957077e9775 306
nimbusgb 0:3957077e9775 307 oneByteWrite(ADXL345_BW_RATE_REG, registerContents);
nimbusgb 0:3957077e9775 308
nimbusgb 0:3957077e9775 309 }
nimbusgb 0:3957077e9775 310
nimbusgb 0:3957077e9775 311 int ADXL345_I2C::getAx(){
nimbusgb 0:3957077e9775 312
nimbusgb 0:3957077e9775 313 char buffer[2];
nimbusgb 0:3957077e9775 314
nimbusgb 0:3957077e9775 315 TwoByteRead(ADXL345_DATAX0_REG, buffer);
nimbusgb 0:3957077e9775 316
nimbusgb 0:3957077e9775 317 return ((int)buffer[1] << 8 | (int)buffer[0]);
nimbusgb 0:3957077e9775 318 }
nimbusgb 0:3957077e9775 319
nimbusgb 0:3957077e9775 320
nimbusgb 0:3957077e9775 321 int ADXL345_I2C::getAy(){
nimbusgb 0:3957077e9775 322
nimbusgb 0:3957077e9775 323 char buffer[2];
nimbusgb 0:3957077e9775 324
nimbusgb 0:3957077e9775 325 TwoByteRead(ADXL345_DATAY0_REG, buffer);
nimbusgb 0:3957077e9775 326
nimbusgb 0:3957077e9775 327 return ((int)buffer[1] << 8 | (int)buffer[0]);
nimbusgb 0:3957077e9775 328 }
nimbusgb 0:3957077e9775 329
nimbusgb 0:3957077e9775 330 int ADXL345_I2C::getAz(){
nimbusgb 0:3957077e9775 331
nimbusgb 0:3957077e9775 332 char buffer[2];
nimbusgb 0:3957077e9775 333
nimbusgb 0:3957077e9775 334 TwoByteRead(ADXL345_DATAZ0_REG, buffer);
nimbusgb 0:3957077e9775 335
nimbusgb 0:3957077e9775 336 return ((int)buffer[1] << 8 | (int)buffer[0]);
nimbusgb 0:3957077e9775 337 }
nimbusgb 0:3957077e9775 338
nimbusgb 0:3957077e9775 339
nimbusgb 0:3957077e9775 340
nimbusgb 0:3957077e9775 341 void ADXL345_I2C::getOutput(int* readings){
nimbusgb 0:3957077e9775 342
nimbusgb 0:3957077e9775 343 char buffer[2];
nimbusgb 0:3957077e9775 344
nimbusgb 0:3957077e9775 345 TwoByteRead(ADXL345_DATAX0_REG, buffer);
nimbusgb 0:3957077e9775 346 readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
nimbusgb 0:3957077e9775 347 TwoByteRead(ADXL345_DATAY0_REG, buffer);
nimbusgb 0:3957077e9775 348 readings[1] = (int)buffer[1] << 8 | (int)buffer[0];
nimbusgb 0:3957077e9775 349 TwoByteRead(ADXL345_DATAZ0_REG, buffer);
nimbusgb 0:3957077e9775 350 readings[2] = (int)buffer[1] << 8 | (int)buffer[0];
nimbusgb 0:3957077e9775 351
nimbusgb 0:3957077e9775 352 }
nimbusgb 0:3957077e9775 353
nimbusgb 0:3957077e9775 354 int ADXL345_I2C::getFifoControl(void){
nimbusgb 0:3957077e9775 355
nimbusgb 0:3957077e9775 356 return oneByteRead(ADXL345_FIFO_CTL);
nimbusgb 0:3957077e9775 357
nimbusgb 0:3957077e9775 358 }
nimbusgb 0:3957077e9775 359
nimbusgb 0:3957077e9775 360 void ADXL345_I2C::setFifoControl(int settings){
nimbusgb 0:3957077e9775 361
nimbusgb 0:3957077e9775 362 oneByteWrite(ADXL345_FIFO_STATUS, settings);
nimbusgb 0:3957077e9775 363
nimbusgb 0:3957077e9775 364 }
nimbusgb 0:3957077e9775 365
nimbusgb 0:3957077e9775 366 int ADXL345_I2C::getFifoStatus(void){
nimbusgb 0:3957077e9775 367
nimbusgb 0:3957077e9775 368 return oneByteRead(ADXL345_FIFO_STATUS);
nimbusgb 0:3957077e9775 369
nimbusgb 0:3957077e9775 370 }
nimbusgb 0:3957077e9775 371
nimbusgb 0:3957077e9775 372 char ADXL345_I2C::oneByteRead(char address) {
nimbusgb 0:3957077e9775 373
nimbusgb 0:3957077e9775 374
nimbusgb 0:3957077e9775 375 char rx[1];
nimbusgb 0:3957077e9775 376 char tx[1];
nimbusgb 0:3957077e9775 377
nimbusgb 0:3957077e9775 378 // nCS_ = 1;
nimbusgb 0:3957077e9775 379 tx[0]=address;
nimbusgb 0:3957077e9775 380
nimbusgb 0:3957077e9775 381
nimbusgb 0:3957077e9775 382 i2c_.write(ADXL345_I2C_WRITE, tx,1);
nimbusgb 0:3957077e9775 383 i2c_.read(ADXL345_I2C_READ,rx,1);
nimbusgb 0:3957077e9775 384
nimbusgb 0:3957077e9775 385 //nCS_ = 0;
nimbusgb 0:3957077e9775 386 return rx[0];
nimbusgb 0:3957077e9775 387
nimbusgb 0:3957077e9775 388 }
nimbusgb 0:3957077e9775 389
nimbusgb 0:3957077e9775 390 void ADXL345_I2C::oneByteWrite(char address, char data) {
nimbusgb 0:3957077e9775 391 // nCS_ = 1;
nimbusgb 0:3957077e9775 392 char tx[2];
nimbusgb 0:3957077e9775 393
nimbusgb 0:3957077e9775 394 tx[0]=address;
nimbusgb 0:3957077e9775 395 tx[1]=data;
nimbusgb 0:3957077e9775 396
nimbusgb 0:3957077e9775 397 i2c_.write(ADXL345_I2C_WRITE,tx,2);
nimbusgb 0:3957077e9775 398
nimbusgb 0:3957077e9775 399 //nCS_ = 0;
nimbusgb 0:3957077e9775 400 }
nimbusgb 0:3957077e9775 401
nimbusgb 0:3957077e9775 402 void ADXL345_I2C::TwoByteRead(char startAddress, char* buffer) {
nimbusgb 0:3957077e9775 403
nimbusgb 0:3957077e9775 404
nimbusgb 0:3957077e9775 405 // nCS_ = 1;
nimbusgb 0:3957077e9775 406 //Send address to start reading from.
nimbusgb 0:3957077e9775 407 char tx[1];
nimbusgb 0:3957077e9775 408 tx[0]=startAddress;
nimbusgb 0:3957077e9775 409 i2c_.write(ADXL345_I2C_WRITE,tx,1);
nimbusgb 0:3957077e9775 410 i2c_.read(ADXL345_I2C_READ,buffer,2);
nimbusgb 0:3957077e9775 411
nimbusgb 0:3957077e9775 412 //nCS_ = 0;
nimbusgb 0:3957077e9775 413 }
nimbusgb 0:3957077e9775 414
nimbusgb 0:3957077e9775 415 void ADXL345_I2C::TwoByteWrite(char startAddress, char* buffer) {
nimbusgb 0:3957077e9775 416
nimbusgb 0:3957077e9775 417 //nCS_ = 1;
nimbusgb 0:3957077e9775 418 //Send address to start reading from.
nimbusgb 0:3957077e9775 419 char tx[1];
nimbusgb 0:3957077e9775 420 tx[0]=startAddress;
nimbusgb 0:3957077e9775 421 i2c_.write(ADXL345_I2C_WRITE,tx,1);
nimbusgb 0:3957077e9775 422 i2c_.write(ADXL345_I2C_WRITE,buffer,2);
nimbusgb 0:3957077e9775 423
nimbusgb 0:3957077e9775 424
nimbusgb 0:3957077e9775 425 //nCS_ = 0;
nimbusgb 0:3957077e9775 426
nimbusgb 0:3957077e9775 427 }