upm  1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
Public Member Functions | Protected Attributes

API for the BMM150 3-Axis Geomagnetic Sensor. More...

Detailed Description

The BMM150 is a standalone geomagnetic sensor for consumer market applications. It allows measurements of the magnetic field in three perpendicular axes. Based on Bosch's proprietary FlipCore technology, performance and features of BMM150 are carefully tuned and perfectly match the demanding requirements of all 3-axis mobile applications such as electronic compass, navigation or augmented reality.

An evaluation circuitry (ASIC) converts the output of the geomagnetic sensor to digital results which can be read out over the industry standard digital interfaces (SPI and I2C).

Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports both I2C (default) and SPI operation.

This device requires 3.3v operation.

// Instantiate an BMM150 using default I2C parameters
upm::BMM150 sensor;
// For SPI, bus 0, you would pass -1 as the address, and a valid pin
// for CS: BMM150(0, -1, 10);
// now output data every 250 milliseconds
while (shouldRun) {
float x, y, z;
sensor.update();
sensor.getMagnetometer(&x, &y, &z);
cout << "Magnetometer x: " << x << " y: " << y << " z: " << z << " uT" << endl;
cout << endl;
upm_delay_us(250000);
}

Public Member Functions

 BMM150 (int bus=BMM150_DEFAULT_I2C_BUS, int addr=BMM150_DEFAULT_ADDR, int cs=-1)
 
 ~BMM150 ()
 
void update ()
 
uint8_t getChipID ()
 
void getMagnetometer (float *x, float *y, float *z)
 
std::vector< float > getMagnetometer ()
 
void init (BMM150_USAGE_PRESETS_T usage=BMM150_USAGE_HIGH_ACCURACY)
 
void setPresetMode (BMM150_USAGE_PRESETS_T usage)
 
void reset ()
 
void setOutputDataRate (BMM150_DATA_RATE_T odr)
 
void setPowerBit (bool power)
 
void setOpmode (BMM150_OPERATION_MODE_T opmode)
 
BMM150_OPERATION_MODE_T getOpmode ()
 
uint8_t getInterruptEnable ()
 
void setInterruptEnable (uint8_t bits)
 
uint8_t getInterruptConfig ()
 
void setInterruptConfig (uint8_t bits)
 
uint8_t getInterruptStatus ()
 
void setRepetitionsXY (uint8_t reps)
 
void setRepetitionsZ (uint8_t reps)
 
void installISR (BMM150_INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
 
void uninstallISR (BMM150_INTERRUPT_PINS_T intr)
 
uint8_t readReg (uint8_t reg)
 
int readRegs (uint8_t reg, uint8_t *buffer, int len)
 
void writeReg (uint8_t reg, uint8_t val)
 

Protected Attributes

bmm150_context m_bmm150
 

Constructor & Destructor Documentation

BMM150 ( int  bus = BMM150_DEFAULT_I2C_BUS,
int  addr = BMM150_DEFAULT_ADDR,
int  cs = -1 
)

BMM150 constructor.

This device can support both I2C and SPI. For SPI, set the addr to -1, and specify a positive integer representing the Chip Select (CS) pin for the cs argument. If you are using a hardware CS pin (like edison with arduino breakout), then you can connect the proper pin to the hardware CS pin on your MCU and supply -1 for cs. The default operating mode is I2C.

Parameters
busI2C or SPI bus to use.
addrThe address for this device. -1 for SPI.
csThe gpio pin to use for the SPI Chip Select. -1 for I2C or for SPI with a hardware controlled pin.
Exceptions
std::runtime_erroron failure.
~BMM150 ( )

BMM150 Destructor.

Here is the call graph for this function:

Member Function Documentation

void update ( void  )

Update the internal stored values from sensor data.

Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

Here is the caller graph for this function:

uint8_t getChipID ( )

Return the chip ID.

Returns
The chip ID.

Here is the call graph for this function:

void getMagnetometer ( float *  x,
float *  y,
float *  z 
)

Return magnetometer data in micro-Teslas (uT). update() must have been called prior to calling this method.

Parameters
xPointer to a floating point value that will have the current x component placed into it.
yPointer to a floating point value that will have the current y component placed into it.
zPointer to a floating point value that will have the current z component placed into it.

Here is the call graph for this function:

Here is the caller graph for this function:

std::vector< float > getMagnetometer ( )

Return magnetometer data in micro-Teslas (uT) in the form of a floating point vector. update() must have been called prior to calling this method.

Returns
A floating point vector containing x, y, and z in that order.
void init ( BMM150_USAGE_PRESETS_T  usage = BMM150_USAGE_HIGH_ACCURACY)

Initialize the device and start operation. This function is called from the constructor so will not typically need to be called by a user unless the device is reset. This method will call setPresetMode() with the passed parameter.

Parameters
usageOne of the BMM150_USAGE_PRESETS_T values. The default is BMM150_USAGE_HIGH_ACCURACY.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

Here is the caller graph for this function:

void setPresetMode ( BMM150_USAGE_PRESETS_T  usage)

Set one of the Bosch recommended preset modes. These modes configure the sensor for varying use cases.

Parameters
usageOne of the BMM150_USAGE_PRESETS_T values. The default is BMM150_USAGE_HIGH_ACCURACY.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void reset ( )

Perform a device soft-reset. The device will be placed in SUSPEND mode afterward with all configured setting lost, so some re-initialization will be required to get data from the sensor. Calling init() will get everything running again.

Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void setOutputDataRate ( BMM150_DATA_RATE_T  odr)

Set the magnetometer Output Data Rate. See the datasheet for details.

Parameters
odrOne of the BMM150_DATA_RATE_T values.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void setPowerBit ( bool  power)

Set or clear the Power bit. When the power bit is cleared, the device enters a deep suspend mode where only the REG_POWER_CTRL register can be accessed. This bit needs to be enabled for the device to operate. See the datasheet for details. The constructor enables this by default. After a deep suspend mode has been entered, all configured data is lost and the device must be reconfigured (as via init()).

Parameters
powertrue to enable the bit, false otherwise.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void setOpmode ( BMM150_OPERATION_MODE_T  opmode)

Set the operating mode of the device. See the datasheet for details.

Parameters
opmodeOne of the BMM150_OPERATION_MODE_T values.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

BMM150_OPERATION_MODE_T getOpmode ( )

Get the current operating mode of the device. See the datasheet for details. The power bit must be one for this method to succeed.

Returns
One of the BMM150_OPERATION_MODE_T values.

Here is the call graph for this function:

uint8_t getInterruptEnable ( )

Return the Interrupt Enables register. This register allows you to enable various interrupt conditions. See the datasheet for details.

Returns
A bitmask of BMM150_INT_EN_BITS_T bits.

Here is the call graph for this function:

void setInterruptEnable ( uint8_t  bits)

Set the Interrupt Enables register. See the datasheet for details.

Parameters
bitsA bitmask of BMM150_INT_EN_BITS_T bits.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

uint8_t getInterruptConfig ( )

Return the Interrupt Config register. This register allows determining the electrical characteristics of the 2 interrupt pins (open-drain/push-pull and level/edge triggering) as well as other options. See the datasheet for details.

Returns
A bitmask of BMM150_INT_CONFIG_BITS_T bits.

Here is the call graph for this function:

void setInterruptConfig ( uint8_t  bits)

Set the Interrupt Config register. This register allows determining the electrical characteristics of the 2 interrupt pins (open-drain/push-pull and level/edge triggering). See the datasheet for details.

Parameters
bitsA bitmask of BMM150_INT_CONFIG_BITS_T bits.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

uint8_t getInterruptStatus ( )

Return the interrupt status register. This register indicates which interrupts have been triggered. See the datasheet for details.

Returns
a bitmask of BMM150_INT_STATUS_BITS_T bits.

Here is the call graph for this function:

void setRepetitionsXY ( uint8_t  reps)

Set the repetition counter for the X and Y axes. This allows the device to average a number of measurements for a more stable output. See the datasheet for details.

Parameters
repsA coefficient for specifying the number of repititions to perform. (1 + 2(reps))
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void setRepetitionsZ ( uint8_t  reps)

Set the repetition counter for the Z axis. This allows the device to average a number of measurements for a more stable output. See the datasheet for details.

Parameters
repsA coefficient for specifying the number of repititions to perform. (1 + (reps))
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void installISR ( BMM150_INTERRUPT_PINS_T  intr,
int  gpio,
mraa::Edge  level,
void(*)(void *)  isr,
void *  arg 
)

Install an interrupt handler.

Parameters
intrOne of the BMM150_INTERRUPT_PINS_T values specifying which interrupt pin you are installing.
gpioGPIO pin to use as interrupt pin.
levelThe interrupt trigger level (one of mraa::Edge values). Make sure that you have configured the interrupt pin properly for whatever level you choose.
isrThe interrupt handler, accepting a void * argument.
argThe argument to pass the the interrupt handler.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void uninstallISR ( BMM150_INTERRUPT_PINS_T  intr)

Uninstall a previously installed interrupt handler.

Parameters
intrOne of the BMM150_INTERRUPT_PINS_T values specifying which interrupt pin you are removing.

Here is the call graph for this function:

uint8_t readReg ( uint8_t  reg)

Read a register.

Parameters
regThe register to read.
Returns
The value of the register.

Here is the call graph for this function:

int readRegs ( uint8_t  reg,
uint8_t *  buffer,
int  len 
)

Read contiguous registers into a buffer.

Parameters
bufferThe buffer to store the results.
lenThe number of registers to read.
Returns
The number of bytes read.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void writeReg ( uint8_t  reg,
uint8_t  val 
)

Write to a register.

Parameters
regThe register to write to.
valThe value to write.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

Collaboration diagram for BMM150:
Collaboration graph
[legend]

The documentation for this class was generated from the following files: