27 #include <mraa/i2c.hpp>
28 #include <mraa/spi.hpp>
29 #include <mraa/gpio.hpp>
31 #define BMM150_I2C_BUS 0
32 #define BMM150_SPI_BUS 0
33 #define BMM150_DEFAULT_ADDR 0x10
83 typedef enum : uint8_t {
98 REG_INT_STATUS = 0x4a,
100 REG_POWER_CTRL = 0x4b,
105 REG_INT_CONFIG = 0x4e,
107 REG_LOW_THRES = 0x4f,
108 REG_HIGH_THRES = 0x50,
116 REG_TRIM_DIG_X1 = 0x5d,
117 REG_TRIM_DIG_Y1 = 0x5e,
119 REG_TRIM_DIG_Z4_LSB = 0x62,
120 REG_TRIM_DIG_Z4_MSB = 0x63,
121 REG_TRIM_DIG_X2 = 0x64,
122 REG_TRIM_DIG_Y2 = 0x65,
124 REG_TRIM_DIG_Z2_LSB = 0x68,
125 REG_TRIM_DIG_Z2_MSB = 0x69,
126 REG_TRIM_DIG_Z1_LSB = 0x6a,
127 REG_TRIM_DIG_Z1_MSB = 0x6b,
128 REG_TRIM_DIG_XYZ1_LSB = 0x6c,
129 REG_TRIM_DIG_XYZ1_MSB = 0x6d,
130 REG_TRIM_DIG_Z3_LSB = 0x6e,
131 REG_TRIM_DIG_Z3_MSB = 0x6f,
132 REG_TRIM_DIG_XY2 = 0x70,
133 REG_TRIM_DIG_XY1 = 0x71
141 _MAG_XY_LSB_RESERVED_BITS = 0x02 | 0x04,
143 MAG_XY_LSB_SELFTEST_XY = 0x01,
145 MAG_XY_LSB_LSB0 = 0x08,
146 MAG_XY_LSB_LSB1 = 0x10,
147 MAG_XY_LSB_LSB2 = 0x20,
148 MAG_XY_LSB_LSB3 = 0x40,
149 MAG_XY_LSB_LSB4 = 0x80,
150 _MAG_XY_LSB_LSB_MASK = 31,
151 _MAG_XY_LSB_LSB_SHIFT = 3
158 MAG_Z_LSB_SELFTEST_Z = 0x01,
160 MAG_Z_LSB_LSB0 = 0x02,
161 MAG_Z_LSB_LSB1 = 0x04,
162 MAG_Z_LSB_LSB2 = 0x08,
163 MAG_Z_LSB_LSB3 = 0x10,
164 MAG_Z_LSB_LSB4 = 0x20,
165 MAG_Z_LSB_LSB5 = 0x40,
166 MAG_Z_LSB_LSB6 = 0x80,
167 _MAG_Z_LSB_LSB_MASK = 127,
168 _MAG_Z_LSB_LSB_SHIFT = 1
175 _MAG_RHALL_LSB_RESERVED_BITS = 0x02,
177 MAG_RHALL_LSB_DATA_READY_STATUS = 0x01,
179 MAG_RHALL_LSB_LSB0 = 0x04,
180 MAG_RHALL_LSB_LSB1 = 0x08,
181 MAG_RHALL_LSB_LSB2 = 0x10,
182 MAG_RHALL_LSB_LSB3 = 0x20,
183 MAG_RHALL_LSB_LSB4 = 0x40,
184 MAG_RHALL_LSB_LSB5 = 0x80,
185 _MAG_RHALL_LSB_LSB_MASK = 63,
186 _MAG_RHALL_LSB_LSB_SHIFT = 2
193 INT_STATUS_LOW_INT_X = 0x01,
194 INT_STATUS_LOW_INT_Y = 0x02,
195 INT_STATUS_LOW_INT_Z = 0x04,
196 INT_STATUS_HIGH_INT_X = 0x08,
197 INT_STATUS_HIGH_INT_Y = 0x10,
198 INT_STATUS_HIGH_INT_Z = 0x20,
199 INT_STATUS_OVERFLOW = 0x40,
200 INT_STATUS_DATA_OVERRUN = 0x80
207 _POWER_CTRL_RESERVED_BITS = 0x40 | 0x20 | 0x10 | 0x08,
209 POWER_CTRL_POWER_CTRL_BIT = 0x01,
210 POWER_CTRL_SOFT_RESET0 = 0x02,
211 POWER_CTRL_SPI3EN = 0x04,
213 POWER_CTRL_SOFT_RESET1 = 0x80
220 OPMODE_SELFTTEST = 0x01,
222 OPMODE_OPERATION_MODE0 = 0x02,
223 OPMODE_OPERATION_MODE1 = 0x04,
224 _OPMODE_OPERATION_MODE_MASK = 3,
225 _OPMODE_OPERATION_MODE_SHIFT = 1,
227 OPMODE_DATA_RATE0 = 0x08,
228 OPMODE_DATA_RATE1 = 0x10,
229 OPMODE_DATA_RATE2 = 0x20,
230 _OPMODE_DATA_RATE_MASK = 7,
231 _OPMODE_DATA_RATE_SHIFT = 3,
233 OPMODE_ADV_SELFTEST0 = 0x40,
234 OPMODE_ADV_SELFTEST1 = 0x80,
235 _OPMODE_ADV_SELFTEST_MASK = 3,
236 _OPMODE_ADV_SELFTEST_SHIFT = 6
243 OPERATION_MODE_NORMAL = 0,
244 OPERATION_MODE_FORCED = 1,
245 OPERATION_MODE_SLEEP = 3
266 INT_EN_LOW_INT_X_EN = 0x01,
267 INT_EN_LOW_INT_Y_EN = 0x02,
268 INT_EN_LOW_INT_Z_EN = 0x04,
269 INT_EN_HIGH_INT_X_EN = 0x08,
270 INT_EN_HIGH_INT_Y_EN = 0x10,
271 INT_EN_HIGH_INT_Z_EN = 0x20,
272 INT_EN_OVERFLOW_INT_EN = 0x40,
273 INT_EN_DATA_OVERRUN_INT_EN = 0x80
280 INT_CONFIG_INT_POLARITY = 0x01,
281 INT_CONFIG_INT_LATCH = 0x02,
282 INT_CONFIG_DR_POLARITY = 0x04,
283 INT_CONFIG_CHANNEL_X = 0x08,
284 INT_CONFIG_CHANNEL_Y = 0x10,
285 INT_CONFIG_CHANNEL_Z = 0x20,
286 INT_CONFIG_INT_PIN_EN = 0x40,
287 INT_CONFIG_DR_PIN_EN = 0x80
304 USAGE_ENHANCED_REGULAR,
324 BMM150(
int bus=BMM150_I2C_BUS,
int addr=BMM150_DEFAULT_ADDR,
499 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
516 void (*isr)(
void *),
void *arg);
542 int readRegs(uint8_t reg, uint8_t *buffer,
int len);
550 void writeReg(uint8_t reg, uint8_t val);
556 mraa::Gpio *m_gpioIntr;
557 mraa::Gpio *m_gpioDR;
560 mraa::Gpio *m_gpioCS;
603 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
605 void (*isr)(
void *),
void *arg);
609 float bmm050_compensate_X_float(int16_t mag_data_x, uint16_t data_r);
610 float bmm050_compensate_Y_float(int16_t mag_data_y, uint16_t data_r);
611 float bmm050_compensate_Z_float(int16_t mag_data_z, uint16_t data_r);
uint8_t getChipID()
Definition: bmm150.cxx:361
OPERATION_MODE_T getOpmode()
Definition: bmm150.cxx:432
uint8_t getInterruptEnable()
Definition: bmm150.cxx:442
void setPowerBit(bool power)
Definition: bmm150.cxx:408
BMM150_REGS_T
Definition: bmm150.hpp:83
void setOutputDataRate(DATA_RATE_T odr)
Definition: bmm150.cxx:398
DATA_RATE_T
Definition: bmm150.hpp:251
void writeReg(uint8_t reg, uint8_t val)
Definition: bmm150.cxx:321
int readRegs(uint8_t reg, uint8_t *buffer, int len)
Definition: bmm150.cxx:287
void reset()
Definition: bmm150.cxx:386
void setOpmode(OPERATION_MODE_T opmode)
Definition: bmm150.cxx:421
API for the BMM150 3-Axis Geomagnetic Sensor.
Definition: bmm150.hpp:72
OPERATION_MODE_T
Definition: bmm150.hpp:242
float * getMagnetometer()
Definition: bmm150.cxx:378
MAG_Z_LSB_BITS_T
Definition: bmm150.hpp:157
~BMM150()
Definition: bmm150.cxx:182
INT_STATUS_BITS_T
Definition: bmm150.hpp:192
BMM150(int bus=BMM150_I2C_BUS, int addr=BMM150_DEFAULT_ADDR, int cs=-1)
Definition: bmm150.cxx:95
void setRepetitionsXY(uint8_t reps)
Definition: bmm150.cxx:496
void setRepetitionsZ(uint8_t reps)
Definition: bmm150.cxx:501
void init(USAGE_PRESETS_T usage=USAGE_HIGH_ACCURACY)
Definition: bmm150.cxx:195
POWER_CTRL_BITS_T
Definition: bmm150.hpp:206
INT_EN_T
Definition: bmm150.hpp:265
void setInterruptConfig(uint8_t bits)
Definition: bmm150.cxx:457
void uninstallISR(INTERRUPT_PINS_T intr)
Definition: bmm150.cxx:574
uint8_t getInterruptConfig()
Definition: bmm150.cxx:452
MAG_XY_LSB_BITS_T
Definition: bmm150.hpp:140
void setPresetMode(USAGE_PRESETS_T usage)
Definition: bmm150.cxx:506
USAGE_PRESETS_T
Definition: bmm150.hpp:301
void setInterruptEnable(uint8_t bits)
Definition: bmm150.cxx:447
uint8_t getInterruptStatus()
Definition: bmm150.cxx:462
MAG_RHALL_LSB_BITS_T
Definition: bmm150.hpp:174
INTERRUPT_PINS_T
Definition: bmm150.hpp:293
OPMODE_BITS_T
Definition: bmm150.hpp:219
INT_CONFIG_T
Definition: bmm150.hpp:279
uint8_t readReg(uint8_t reg)
Definition: bmm150.cxx:265
void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
Definition: bmm150.cxx:560
void update()
Definition: bmm150.cxx:208