mirror of
https://github.com/eclipse/upm.git
synced 2025-03-24 01:10:22 +03:00
mpu9150: option to disable I2C bypass setting
The existing hardcoded logic enables i2c bypass mode for AK8975. This can cause the accelerometer to disappear on I2C bus. We add a new member as a switch that can be used to disable bypass. Change-Id: I2c61f4910d46ffb5940bb3c14b58bc65984fd12e Signed-off-by: Jianxun Zhang <jianxun.zhang@intel.com> Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit is contained in:
parent
fd509c7d79
commit
ac21c9336b
@ -31,11 +31,12 @@
|
|||||||
using namespace upm;
|
using namespace upm;
|
||||||
using namespace std;
|
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_mag(0), MPU60X0(bus, address)
|
||||||
{
|
{
|
||||||
m_magAddress = magAddress;
|
m_magAddress = magAddress;
|
||||||
m_i2cBus = bus;
|
m_i2cBus = bus;
|
||||||
|
m_enableAk8975 = enableAk8975;
|
||||||
}
|
}
|
||||||
|
|
||||||
MPU9150::~MPU9150()
|
MPU9150::~MPU9150()
|
||||||
@ -54,26 +55,30 @@ bool MPU9150::init()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now, we need to enable I2C bypass on the MPU60X0 component. This
|
// Enabling I2C bypass will allow us to access the
|
||||||
// will allow us to access the AK8975 Magnetometer on I2C addr 0x0c.
|
// AK8975 Magnetometer on I2C addr 0x0c.
|
||||||
if (!enableI2CBypass(true))
|
if (m_enableAk8975 == true)
|
||||||
{
|
{
|
||||||
throw std::runtime_error(std::string(__FUNCTION__) +
|
if (!enableI2CBypass(true))
|
||||||
": Unable to enable I2C bypass");
|
{
|
||||||
return false;
|
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
|
// Now that we've done that, create an AK8975 instance and
|
||||||
// initialize it.
|
// initialize it.
|
||||||
m_mag = new AK8975(m_i2cBus, m_magAddress);
|
|
||||||
|
|
||||||
if (!m_mag->init())
|
m_mag = new AK8975(m_i2cBus, m_magAddress);
|
||||||
{
|
|
||||||
throw std::runtime_error(std::string(__FUNCTION__) +
|
if (!m_mag->init())
|
||||||
": Unable to init magnetometer");
|
{
|
||||||
delete m_mag;
|
throw std::runtime_error(std::string(__FUNCTION__) +
|
||||||
m_mag = 0;
|
": Unable to init magnetometer");
|
||||||
return false;
|
delete m_mag;
|
||||||
|
m_mag = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -66,9 +66,11 @@ namespace upm {
|
|||||||
* @param bus I2C bus to use
|
* @param bus I2C bus to use
|
||||||
* @param address The address for this device
|
* @param address The address for this device
|
||||||
* @param magAddress The address of the connected magnetometer
|
* @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,
|
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
|
* MPU9150 destructor
|
||||||
@ -126,6 +128,7 @@ namespace upm {
|
|||||||
private:
|
private:
|
||||||
int m_i2cBus;
|
int m_i2cBus;
|
||||||
uint8_t m_magAddress;
|
uint8_t m_magAddress;
|
||||||
|
bool m_enableAk8975;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user