[peripherals] MPUxxxx: configure multiple I2C slaves

This commit is contained in:
Felix Ruess
2015-12-27 20:08:40 +01:00
committed by Gautier Hattenberger
parent 525b441c1f
commit bee9326c54
8 changed files with 44 additions and 12 deletions
+1
View File
@@ -44,6 +44,7 @@ void mpu60x0_set_default_config(struct Mpu60x0Config *c)
*/
c->nb_bytes = 15;
c->nb_slaves = 0;
c->nb_slave_init = 0;
c->i2c_bypass = FALSE;
}
+1
View File
@@ -87,6 +87,7 @@ struct Mpu60x0Config {
bool_t i2c_bypass;
uint8_t nb_slaves; ///< number of used I2C slaves
uint8_t nb_slave_init; ///< number of already configured/initialized slaves
struct Mpu60x0I2cSlave slaves[5]; ///< I2C slaves
enum Mpu60x0MstClk i2c_mst_clk; ///< MPU I2C master clock speed
uint8_t i2c_mst_delay; ///< MPU I2C slaves delayed sample rate
+10 -3
View File
@@ -130,7 +130,7 @@ void mpu60x0_i2c_event(struct Mpu60x0_I2c *mpu)
}
}
/** @todo: only one slave so far. */
/** configure the registered I2C slaves */
bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
{
struct Mpu60x0_I2c *mpu_i2c = (struct Mpu60x0_I2c *)(mpu);
@@ -150,8 +150,15 @@ bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
mpu_i2c->slave_init_status++;
break;
case MPU60X0_I2C_CONF_SLAVES_CONFIGURE:
/* configure each slave. TODO: currently only one */
if (mpu_i2c->config.slaves[0].configure(mpu_set, mpu)) {
/* configure each slave until all nb_slaves are done */
if (mpu_i2c->config.nb_slave_init < mpu_i2c->config.nb_slaves) {
// proceed to next slave if configure for current one returns true
if (mpu_i2c->config.slaves[mpu_i2c->config.nb_slave_init].configure(mpu_set, mpu)) {
mpu_i2c->config.nb_slave_init++;
}
}
else {
/* all slave devies configured, continue MPU side configuration of I2C slave stuff */
mpu_i2c->slave_init_status++;
}
break;
+10 -3
View File
@@ -148,7 +148,7 @@ void mpu60x0_spi_event(struct Mpu60x0_Spi *mpu)
}
}
/** @todo: only one slave so far. */
/** configure the registered I2C slaves */
bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
{
struct Mpu60x0_Spi *mpu_spi = (struct Mpu60x0_Spi *)(mpu);
@@ -175,8 +175,15 @@ bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
mpu_spi->slave_init_status++;
break;
case MPU60X0_SPI_CONF_SLAVES_CONFIGURE:
/* configure first slave, only one slave supported so far */
if (mpu_spi->config.slaves[0].configure(mpu_set, mpu)) {
/* configure each slave until all nb_slaves are done */
if (mpu_spi->config.nb_slave_init < mpu_spi->config.nb_slaves) {
// proceed to next slave if configure for current one returns true
if (mpu_spi->config.slaves[mpu_spi->config.nb_slave_init].configure(mpu_set, mpu)) {
mpu_spi->config.nb_slave_init++;
}
}
else {
/* all slave devies configured, continue MPU side configuration of I2C slave stuff */
mpu_spi->slave_init_status++;
}
break;
+1
View File
@@ -45,6 +45,7 @@ void mpu9250_set_default_config(struct Mpu9250Config *c)
*/
c->nb_bytes = 15;
c->nb_slaves = 0;
c->nb_slave_init = 0;
c->i2c_bypass = FALSE;
}
+1
View File
@@ -90,6 +90,7 @@ struct Mpu9250Config {
bool_t i2c_bypass;
uint8_t nb_slaves; ///< number of used I2C slaves
uint8_t nb_slave_init; ///< number of already configured/initialized slaves
struct Mpu9250I2cSlave slaves[5]; ///< I2C slaves
enum Mpu9250MstClk i2c_mst_clk; ///< MPU I2C master clock speed
uint8_t i2c_mst_delay; ///< MPU I2C slaves delayed sample rate
+10 -3
View File
@@ -163,7 +163,7 @@ bool_t imu_mpu9250_configure_mag_slave(Mpu9250ConfigSet mpu_set __attribute__((u
}
}
/** @todo: only one slave so far. */
/** configure the registered I2C slaves */
bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
{
struct Mpu9250_I2c *mpu_i2c = (struct Mpu9250_I2c *)(mpu);
@@ -183,8 +183,15 @@ bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
mpu_i2c->slave_init_status++;
break;
case MPU9250_I2C_CONF_SLAVES_CONFIGURE:
/* configure each slave. TODO: currently only one */
if (mpu_i2c->config.slaves[0].configure(mpu_set, mpu)) {
/* configure each slave until all nb_slaves are done */
if (mpu_i2c->config.nb_slave_init < mpu_i2c->config.nb_slaves) {
// proceed to next slave if configure for current one returns true
if (mpu_i2c->config.slaves[mpu_i2c->config.nb_slave_init].configure(mpu_set, mpu)) {
mpu_i2c->config.nb_slave_init++;
}
}
else {
/* all slave devies configured, continue MPU side configuration of I2C slave stuff */
mpu_i2c->slave_init_status++;
}
break;
+10 -3
View File
@@ -145,7 +145,7 @@ void mpu9250_spi_event(struct Mpu9250_Spi *mpu)
}
}
/** @todo: only one slave so far. */
/** configure the registered I2C slaves */
bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
{
struct Mpu9250_Spi *mpu_spi = (struct Mpu9250_Spi *)(mpu);
@@ -172,8 +172,15 @@ bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
mpu_spi->slave_init_status++;
break;
case MPU9250_SPI_CONF_SLAVES_CONFIGURE:
/* configure first slave, only one slave supported so far */
if (mpu_spi->config.slaves[0].configure(mpu_set, mpu)) {
/* configure each slave until all nb_slaves are done */
if (mpu_spi->config.nb_slave_init < mpu_spi->config.nb_slaves) {
// proceed to next slave if configure for current one returns true
if (mpu_spi->config.slaves[mpu_spi->config.nb_slave_init].configure(mpu_set, mpu)) {
mpu_spi->config.nb_slave_init++;
}
}
else {
/* all slave devies configured, continue MPU side configuration of I2C slave stuff */
mpu_spi->slave_init_status++;
}
break;