diff --git a/src/mpu9150/mpu9150.cxx b/src/mpu9150/mpu9150.cxx index a4463a9c..a253e843 100644 --- a/src/mpu9150/mpu9150.cxx +++ b/src/mpu9150/mpu9150.cxx @@ -31,11 +31,12 @@ using namespace upm; using namespace std; -MPU9150::MPU9150 (int bus, int address, int magAddress) : +MPU9150::MPU9150 (int bus, int address, int magAddress, bool enableAk8975) : m_mag(0), MPU60X0(bus, address) { m_magAddress = magAddress; m_i2cBus = bus; + m_enableAk8975 = enableAk8975; } MPU9150::~MPU9150() @@ -54,26 +55,30 @@ bool MPU9150::init() return false; } - // Now, we need to enable I2C bypass on the MPU60X0 component. This - // will allow us to access the AK8975 Magnetometer on I2C addr 0x0c. - if (!enableI2CBypass(true)) + // Enabling I2C bypass will allow us to access the + // AK8975 Magnetometer on I2C addr 0x0c. + if (m_enableAk8975 == true) { - throw std::runtime_error(std::string(__FUNCTION__) + - ": Unable to enable I2C bypass"); - return false; - } + if (!enableI2CBypass(true)) + { + throw std::runtime_error(std::string(__FUNCTION__) + + ": Unable to enable I2C bypass"); + return false; + } - // Now that we've done that, create an AK8975 instance and - // initialize it. - m_mag = new AK8975(m_i2cBus, m_magAddress); + // Now that we've done that, create an AK8975 instance and + // initialize it. - if (!m_mag->init()) - { - throw std::runtime_error(std::string(__FUNCTION__) + - ": Unable to init magnetometer"); - delete m_mag; - m_mag = 0; - return false; + m_mag = new AK8975(m_i2cBus, m_magAddress); + + if (!m_mag->init()) + { + throw std::runtime_error(std::string(__FUNCTION__) + + ": Unable to init magnetometer"); + delete m_mag; + m_mag = 0; + return false; + } } return true; diff --git a/src/mpu9150/mpu9150.h b/src/mpu9150/mpu9150.h index 32a69445..65679629 100644 --- a/src/mpu9150/mpu9150.h +++ b/src/mpu9150/mpu9150.h @@ -66,9 +66,11 @@ namespace upm { * @param bus I2C bus to use * @param address The address for this device * @param magAddress The address of the connected magnetometer + * @param enableAk8975 Enables i2c bypass mode for magnetometer, default + * is true */ MPU9150 (int bus=MPU9150_I2C_BUS, int address=MPU9150_DEFAULT_I2C_ADDR, - int magAddress=AK8975_DEFAULT_I2C_ADDR); + int magAddress=AK8975_DEFAULT_I2C_ADDR, bool enableAk8975=true); /** * MPU9150 destructor @@ -126,6 +128,7 @@ namespace upm { private: int m_i2cBus; uint8_t m_magAddress; + bool m_enableAk8975; }; }