Protect mag and baro against NULL instance

This commit is contained in:
jflyper 2018-11-23 15:55:03 +09:00
parent 2a748e73d0
commit 9c45eee0e6
2 changed files with 27 additions and 13 deletions

View File

@ -157,21 +157,28 @@ bool baroDetect(baroDev_t *dev, baroSensor_e baroHardwareToUse)
#endif
switch (barometerConfig()->baro_bustype) {
case BUSTYPE_I2C:
#ifdef USE_I2C
case BUSTYPE_I2C:
dev->busdev.bustype = BUSTYPE_I2C;
dev->busdev.busdev_u.i2c.device = I2C_CFG_TO_DEV(barometerConfig()->baro_i2c_device);
dev->busdev.busdev_u.i2c.address = barometerConfig()->baro_i2c_address;
#endif
break;
#endif
case BUSTYPE_SPI:
#ifdef USE_SPI
case BUSTYPE_SPI:
{
SPI_TypeDef *instance = spiInstanceByDevice(SPI_CFG_TO_DEV(barometerConfig()->baro_spi_device));
if (!instance) {
return false;
}
dev->busdev.bustype = BUSTYPE_SPI;
spiBusSetInstance(&dev->busdev, spiInstanceByDevice(SPI_CFG_TO_DEV(barometerConfig()->baro_spi_device)));
spiBusSetInstance(&dev->busdev, instance);
dev->busdev.busdev_u.spi.csnPin = IOGetByTag(barometerConfig()->baro_spi_csn);
#endif
}
break;
#endif
default:
return false;

View File

@ -133,16 +133,23 @@ bool compassDetect(magDev_t *dev)
busdev->bustype = BUSTYPE_I2C;
busdev->busdev_u.i2c.device = I2C_CFG_TO_DEV(compassConfig()->mag_i2c_device);
busdev->busdev_u.i2c.address = compassConfig()->mag_i2c_address;
#endif
break;
#endif
#ifdef USE_SPI
case BUSTYPE_SPI:
{
SPI_TypeDef *instance = spiInstanceByDevice(SPI_CFG_TO_DEV(compassConfig()->mag_spi_device));
if (!instance) {
return false;
}
busdev->bustype = BUSTYPE_SPI;
spiBusSetInstance(busdev, spiInstanceByDevice(SPI_CFG_TO_DEV(compassConfig()->mag_spi_device)));
spiBusSetInstance(busdev, instance);
busdev->busdev_u.spi.csnPin = IOGetByTag(compassConfig()->mag_spi_csn);
#endif
}
break;
#endif
#if defined(USE_MAG_AK8963) && (defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_MPU9250))
case BUSTYPE_MPU_SLAVE:
@ -155,8 +162,8 @@ bool compassDetect(magDev_t *dev)
return false;
}
}
#endif
break;
#endif
default:
return false;