27 #include <mraa/common.hpp>
28 #include <mraa/i2c.hpp>
29 #include <mraa/gpio.hpp>
31 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
32 #include "../IsrCallback.h"
35 #define BMA220_I2C_BUS 0
36 #define BMA220_DEFAULT_ADDR 0x0a
87 REG_REVISIONID = 0x02,
94 REG_H_HYST_DUR = 0x0a,
96 REG_L_HYST_DUR = 0x0e,
98 REG_TAP_CONFIG = 0x10,
100 REG_SLOPE_CONFIG = 0x12,
101 REG_TAP_CONFIG2 = 0x14,
103 REG_INT_STATUS1 = 0x16,
104 REG_INT_STATUS2 = 0x18,
106 REG_ENABLE_CONFIG = 0x1a,
107 REG_ENABLE_CONFIG2 = 0x1c,
108 REG_ENABLE_CONFIG3 = 0x1e,
110 REG_FILTER_CONFIG = 0x20,
112 REG_SBIST_FSL_CONFIG = 0x22,
116 REG_I2C_WATCHDOG = 0x2e,
127 H_HYST_DUR_HIGH_DUR0 = 0x01,
128 H_HYST_DUR_HIGH_DUR1 = 0x02,
129 H_HYST_DUR_HIGH_DUR2 = 0x04,
130 H_HYST_DUR_HIGH_DUR3 = 0x08,
131 H_HYST_DUR_HIGH_DUR4 = 0x10,
132 H_HYST_DUR_HIGH_DUR5 = 0x20,
133 _H_HYST_DUR_HIGH_DUR_MASK = 63,
134 _H_HYST_DUR_HIGH_DUR_SHIFT = 0,
136 H_HYST_DUR_HIGH_HY1 = 0x40,
137 H_HYST_DUR_HIGH_HY2 = 0x80,
138 _H_HYST_DUR_HIGH_HY_MASK = 3,
139 _H_HYST_DUR_HIGH_HY_SHIFT = 6
146 THRESHOLD_HIGH0 = 0x01,
147 THRESHOLD_HIGH1 = 0x02,
148 THRESHOLD_HIGH2 = 0x04,
149 THRESHOLD_HIGH3 = 0x08,
150 _THRESHOLD_HIGH_MASK = 15,
151 _THRESHOLD_HIGH_SHIFT = 0,
153 THRESHOLD_LOW0 = 0x10,
154 THRESHOLD_LOW1 = 0x20,
155 THRESHOLD_LOW2 = 0x40,
156 THRESHOLD_LOW3 = 0x80,
157 _THRESHOLD_LOW_MASK = 15,
158 _THRESHOLD_LOW_SHIFT = 4
165 L_HYST_DUR_LOW_DUR0 = 0x01,
166 L_HYST_DUR_LOW_DUR1 = 0x02,
167 L_HYST_DUR_LOW_DUR2 = 0x04,
168 L_HYST_DUR_LOW_DUR3 = 0x08,
169 L_HYST_DUR_LOW_DUR4 = 0x10,
170 L_HYST_DUR_LOW_DUR5 = 0x20,
171 _L_HYST_DUR_LOW_DUR_MASK = 63,
172 _L_HYST_DUR_LOW_DUR_SHIFT = 0,
174 L_HYST_DUR_LOW_HY1 = 0x40,
175 L_HYST_DUR_LOW_HY2 = 0x80,
176 _L_HYST_DUR_LOW_HY_MASK = 3,
177 _L_HYST_DUR_LOW_HY_SHIFT = 6
184 TAP_CONFIG_DUR0 = 0x01,
185 TAP_CONFIG_DUR1 = 0x02,
186 TAP_CONFIG_DUR2 = 0x04,
187 _TAP_CONFIG_DUR_MASK = 7,
188 _TAP_CONFIG_DUR_SHIFT = 0,
190 TAP_CONFIG_THRESH0 = 0x08,
191 TAP_CONFIG_THRESH1 = 0x10,
192 TAP_CONFIG_THRESH2 = 0x20,
193 TAP_CONFIG_THRESH3 = 0x40,
194 _TAP_CONFIG_THRESH_MASK = 15,
195 _TAP_CONFIG_THRESH_SHIFT = 3,
197 TAP_CONFIG_FILTER = 0x80
204 SLOPE_CONFIG_DUR0 = 0x01,
205 SLOPE_CONFIG_DUR1 = 0x02,
206 _SLOPE_CONFIG_DUR_MASK = 3,
207 _SLOPE_CONFIG_DUR_SHIFT = 0,
209 SLOPE_CONFIG_THRESH0 = 0x04,
210 SLOPE_CONFIG_THRESH1 = 0x08,
211 SLOPE_CONFIG_THRESH2 = 0x10,
212 SLOPE_CONFIG_THRESH3 = 0x20,
213 _SLOPE_CONFIG_THRESH_MASK = 15,
214 _SLOPE_CONFIG_THRESH_SHIFT = 2,
216 SLOPE_CONFIG_FILTER = 0x40,
217 SLOPE_CONFIG_ORIENT_EX = 0x80
224 TAP_CONFIG2_SAMP0 = 0x01,
225 TAP_CONFIG2_SAMP1 = 0x02,
226 _TAP_CONFIG2_SAMP_MASK = 3,
227 _TAP_CONFIG2_SAMP_SHIFT = 0,
229 TAP_CONFIG2_ORIENT_BLOCK0 = 0x04,
230 TAP_CONFIG2_ORIENT_BLOCK1 = 0x08,
231 _TAP_CONFIG2_ORIENT_BLOCK_MASK = 3,
232 _TAP_CONFIG2_ORIENT_BLOCK_SHIFT = 2,
234 TAP_CONFIG2_TIP_EN = 0x10
254 TAP_ORIENT_BLOCK_0 = 0,
255 TAP_ORIENT_BLOCK_2 = 1,
256 TAP_ORIENT_BLOCK_3 = 2,
257 TAP_ORIENT_BLOCK_4 = 3,
264 INT_STATUS1_SIGN = 0x01,
265 INT_STATUS1_FIRST_Z = 0x02,
266 INT_STATUS1_FIRST_Y = 0x04,
267 INT_STATUS1_FIRST_X = 0x08,
269 INT_STATUS1_ORIENT0 = 0x10,
270 INT_STATUS1_ORIENT1 = 0x20,
271 INT_STATUS1_ORIENT2 = 0x40,
272 _INT_STATUS1_ORIENT_MASK = 7,
273 _INT_STATUS1_ORIENT_SHIFT = 4,
275 INT_STATUS1_ORIENT_INT = 0x80
285 CONFIG_ORI_UP_PORT_UPRIGHT = 0,
286 CONFIG_ORI_UP_PORT_UPSIDE_DOWN = 1,
287 CONFIG_ORI_UP_LAND_LEFT = 2,
288 CONFIG_ORI_UP_LAND_RIGHT = 3,
289 CONFIG_ORI_DN_PORT_UPRIGHT = 4,
290 CONFIG_ORI_DN_PORT_UPSIDE_DOWN = 5,
291 CONFIG_ORI_DN_LAND_LEFT = 6,
292 CONFIG_ORI_DN_LAND_RIGHT = 7
299 INT_STATUS2_SLOPE = 0x01,
300 INT_STATUS2_DATA = 0x02,
301 INT_STATUS2_HIGH = 0x04,
302 INT_STATUS2_LOW = 0x08,
303 INT_STATUS2_TAP = 0x10
312 ENABLE_CONFIG_TT_Z = 0x01,
313 ENABLE_CONFIG_TT_Y = 0x02,
314 ENABLE_CONFIG_TT_X = 0x04,
315 ENABLE_CONFIG_SLOPE_Z = 0x08,
316 ENABLE_CONFIG_SLOPE_Y = 0x10,
317 ENABLE_CONFIG_SLOPE_X = 0x20,
318 ENABLE_CONFIG_ORIENT = 0x40,
319 ENABLE_CONFIG_DATA = 0x80
326 ENABLE_CONFIG2_HIGH_Z = 0x01,
327 ENABLE_CONFIG2_HIGH_Y = 0x02,
328 ENABLE_CONFIG2_HIGH_X = 0x04,
330 ENABLE_CONFIG2_LOW = 0x08,
332 ENABLE_CONFIG2_LAT_INT0 = 0x10,
333 ENABLE_CONFIG2_LAT_INT1 = 0x20,
334 ENABLE_CONFIG2_LAT_INT2 = 0x40,
335 _ENABLE_CONFIG2_LAT_INT_MASK = 7,
336 _ENABLE_CONFIG2_LAT_INT_SHIFT = 4,
338 ENABLE_CONFIG2_RESET_INT = 0x80
347 CONFIG2_LAT_UNLATCH = 0,
348 CONFIG2_LAT_0_25 = 1,
361 ENABLE_CONFIG3_Z_CHAN = 0x01,
362 ENABLE_CONFIG3_Y_CHAN = 0x02,
363 ENABLE_CONFIG3_X_CHAN = 0x04,
365 ENABLE_CONFIG3_SLEEP_DUR0 = 0x08,
366 ENABLE_CONFIG3_SLEEP_DUR1 = 0x10,
367 ENABLE_CONFIG3_SLEEP_DUR2 = 0x20,
368 _ENABLE_CONFIG3_SLEEP_DUR_MASK = 7,
369 _ENABLE_CONFIG3_SLEEP_DUR_SHIFT = 3,
371 ENABLE_CONFIG3_SLEEP_EN = 0x40
397 FILTER_CONFIG_FILTER0 = 0x01,
398 FILTER_CONFIG_FILTER1 = 0x02,
399 FILTER_CONFIG_FILTER2 = 0x04,
400 FILTER_CONFIG_FILTER3 = 0x08,
401 _FILTER_CONFIG_FILTER_MASK = 15,
402 _FILTER_CONFIG_FILTER_SHIFT = 0,
406 FILTER_CONFIG_SERIAL_HIGH_BW = 0x80
415 FILTER_CONFIG_1KHZ = 0,
416 FILTER_CONFIG_500HZ = 1,
417 FILTER_CONFIG_250HZ = 2,
418 FILTER_CONFIG_125HZ = 3,
419 FILTER_CONFIG_64HZ = 4,
420 FILTER_CONFIG_32HZ = 5
427 REG_SBIST_FSL_RANGE0 = 0x01,
428 REG_SBIST_FSL_RANGE1 = 0x02,
429 _REG_SBIST_FSL_RANGE_MASK = 3,
430 _REG_SBIST_FSL_RANGE_SHIFT = 0,
432 REG_SBIST_FSL_SBIST0 = 0x04,
433 REG_SBIST_FSL_SBIST1 = 0x08,
434 _REG_SBIST_FSL_SBIST_MASK = 3,
435 _REG_SBIST_FSL_SBIST_SHIFT = 2,
437 REG_SBIST_FSL_SBIST_SIGN = 0x10
470 I2C_WATCHDOG_SPI3 = 0x01,
472 I2C_WATCHDOG_TO_SEL = 0x02,
473 I2C_WATCHDOG_TO_EN = 0x04
485 BMA220(
int bus=BMA220_I2C_BUS, uint8_t addr=BMA220_DEFAULT_ADDR);
514 bool writeReg(uint8_t reg, uint8_t val);
547 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
582 bool enableAxes(
bool xEn,
bool yEn,
bool zEn);
608 bool sleep(
bool enable);
784 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
785 void installISR(
int gpio, mraa::Edge level, IsrCallback *cb);
798 void (*isr)(
void *),
void *arg);
809 mraa::Gpio *m_gpioIntr;
824 void updateAccelerometer();
826 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
828 void (*isr)(
void *),
void *arg);
uint8_t readReg(uint8_t reg)
Definition: bma220.cxx:97
uint8_t softReset()
Definition: bma220.cxx:239
bool enableTapFilter(bool filt)
Definition: bma220.cxx:371
uint8_t getInterruptEnables1()
Definition: bma220.cxx:447
REG_T
Definition: bma220.h:85
bool setTapDuration(uint8_t dur)
Definition: bma220.cxx:345
uint8_t getInterruptStatus2()
Definition: bma220.cxx:437
bool resetInterrupts()
Definition: bma220.cxx:481
SLOPE_CONFIG_BITS_T
Definition: bma220.h:203
void getAccelerometer(float *x, float *y, float *z)
Definition: bma220.cxx:158
uint8_t getInterruptEnables2()
Definition: bma220.cxx:465
bool setAccelerometerScale(FSL_RANGE_T scale)
Definition: bma220.cxx:115
FSL_RANGE_T
Definition: bma220.h:447
THRESHOLD_BITS_T
Definition: bma220.h:145
bool setSleepDuration(SLEEP_DUR_T dur)
Definition: bma220.cxx:256
bool setInterruptEnables1(uint8_t bits)
Definition: bma220.cxx:442
bool setInterruptEnables2(uint8_t bits)
Definition: bma220.cxx:452
bool setSlopeThreshold(uint8_t thresh)
Definition: bma220.cxx:396
bool setLowGThreshold(uint8_t thresh)
Definition: bma220.cxx:267
H_HYST_DUR_HIGH_BITS_T
Definition: bma220.h:126
TAP_SAMP_T
Definition: bma220.h:242
void uninstallISR()
Definition: bma220.cxx:513
SLEEP_DUR_T
Definition: bma220.h:382
uint8_t getInterruptStatus1()
Definition: bma220.cxx:421
I2C_WATCHDOG_BITS_T
Definition: bma220.h:469
uint8_t getChipRevision()
Definition: bma220.cxx:184
ENABLE_CONFIG2_BITS_T
Definition: bma220.h:325
L_HYST_DUR_LOW_BITS_T
Definition: bma220.h:164
bool setHighGThreshold(uint8_t thresh)
Definition: bma220.cxx:280
void update()
Definition: bma220.cxx:73
SBIST_T
Definition: bma220.h:459
TAP_CONFIG2_BITS_T
Definition: bma220.h:223
bool enableSlopeFilter(bool filt)
Definition: bma220.cxx:409
uint8_t suspend()
Definition: bma220.cxx:234
CONFIG_ORIENT_T getOrient()
Definition: bma220.cxx:426
CONFIG2_LAT_T
Definition: bma220.h:346
bool setFilterConfig(FILTER_CONFIG_T filter)
Definition: bma220.cxx:189
ENABLE_CONFIG3_BITS_T
Definition: bma220.h:360
void installISR(int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
Definition: bma220.cxx:500
INT_STATUS1_BITS_T
Definition: bma220.h:263
INT_STATUS2_BITS_T
Definition: bma220.h:298
bool enableAxes(bool xEn, bool yEn, bool zEn)
Definition: bma220.cxx:212
bool setInterruptLatch(CONFIG2_LAT_T lat)
Definition: bma220.cxx:470
bool writeReg(uint8_t reg, uint8_t val)
Definition: bma220.cxx:102
FILTER_CONFIG_T
Definition: bma220.h:414
bool setHighGDuration(uint8_t dur)
Definition: bma220.cxx:332
bool sleep(bool enable)
Definition: bma220.cxx:244
FILTER_CONFIG_BITS_T
Definition: bma220.h:396
API for the BMA220 3-axis Accelerometer.
Definition: bma220.h:73
bool setSlopeDuration(uint8_t dur)
Definition: bma220.cxx:383
ENABLE_CONFIG_BITS_T
Definition: bma220.h:311
TAP_ORIENT_BLOCK_T
Definition: bma220.h:253
TAP_CONFIG_BITS_T
Definition: bma220.h:183
uint8_t getChipID()
Definition: bma220.cxx:179
SBIST_FSL_CONFIG_BITS_T
Definition: bma220.h:426
CONFIG_ORIENT_T
Definition: bma220.h:284
bool setHighGHysteresis(uint8_t hyst)
Definition: bma220.cxx:319
bool setLowGDuration(uint8_t dur)
Definition: bma220.cxx:306
bool setTapThreshold(uint8_t thresh)
Definition: bma220.cxx:358
BMA220(int bus=BMA220_I2C_BUS, uint8_t addr=BMA220_DEFAULT_ADDR)
Definition: bma220.cxx:37
bool setLowGHysteresis(uint8_t hyst)
Definition: bma220.cxx:293
bool setSerialHighBW(bool high)
Definition: bma220.cxx:200
~BMA220()
Definition: bma220.cxx:68