AP_Baro: use GND_EXT_BUS to allow a specific bus to be probed

This commit is contained in:
Andrew Tridgell 2018-09-07 08:02:42 +10:00
parent dda8e7c35a
commit d79386d574

View File

@ -104,7 +104,7 @@ const AP_Param::GroupInfo AP_Baro::var_info[] = {
// @Param: EXT_BUS // @Param: EXT_BUS
// @DisplayName: External baro bus // @DisplayName: External baro bus
// @Description: This selects the bus number for looking for an I2C barometer // @Description: This selects the bus number for looking for an I2C barometer. When set to -1 it will probe all external i2c buses based on the GND_PROBE_EXT parameter.
// @Values: -1:Disabled,0:Bus0,1:Bus1 // @Values: -1:Disabled,0:Bus0,1:Bus1
// @User: Advanced // @User: Advanced
AP_GROUPINFO("EXT_BUS", 7, AP_Baro, _ext_bus, -1), AP_GROUPINFO("EXT_BUS", 7, AP_Baro, _ext_bus, -1),
@ -154,7 +154,7 @@ const AP_Param::GroupInfo AP_Baro::var_info[] = {
#ifdef HAL_PROBE_EXTERNAL_I2C_BAROS #ifdef HAL_PROBE_EXTERNAL_I2C_BAROS
// @Param: PROBE_EXT // @Param: PROBE_EXT
// @DisplayName: External barometers to probe // @DisplayName: External barometers to probe
// @Description: This sets which types of external i2c barometer to look for. It is a bitmask of barometer types // @Description: This sets which types of external i2c barometer to look for. It is a bitmask of barometer types. The I2C buses to probe is based on GND_EXT_BUS. If GND_EXT_BUS is -1 then it will probe all external buses, otherwise it will probe just the bus number given in GND_EXT_BUS.
// @Bitmask: 0:BMP085,1:BMP280,2:MS5611,3:MS5607,4:MS5637,5:FBM320,6:DPS280,7:LPS25H,8:Keller // @Bitmask: 0:BMP085,1:BMP280,2:MS5611,3:MS5607,4:MS5637,5:FBM320,6:DPS280,7:LPS25H,8:Keller
// @Values: 1:BMP085,2:BMP280,4:MS5611,8:MS5607,16:MS5637,32:FBM320,64:DPS280,128:LPS25H,256:Keller // @Values: 1:BMP085,2:BMP280,4:MS5611,8:MS5607,16:MS5637,32:FBM320,64:DPS280,128:LPS25H,256:Keller
// @User: Advanced // @User: Advanced
@ -636,6 +636,11 @@ void AP_Baro::_probe_i2c_barometers(void)
// no internal i2c baros, so this is safe // no internal i2c baros, so this is safe
mask |= hal.i2c_mgr->get_bus_mask_internal(); mask |= hal.i2c_mgr->get_bus_mask_internal();
} }
// if the user has set GND_EXT_BUS then probe the bus given by that parameter
int8_t ext_bus = _ext_bus;
if (ext_bus >= 0) {
mask = 1U << (uint8_t)ext_bus;
}
if (probe & PROBE_BMP085) { if (probe & PROBE_BMP085) {
FOREACH_I2C_MASK(i,mask) { FOREACH_I2C_MASK(i,mask) {
ADD_BACKEND(AP_Baro_BMP085::probe(*this, ADD_BACKEND(AP_Baro_BMP085::probe(*this,