AP_Rangefinder: search buses 0 and 1 for Maxbotix I2C driver

This commit is contained in:
Francisco Ferreira 2017-09-23 23:33:04 +01:00
parent be1f0801a3
commit 02586b0a2e
No known key found for this signature in database
GPG Key ID: F63C20A6773E787E
3 changed files with 15 additions and 7 deletions

View File

@ -35,9 +35,10 @@ extern const AP_HAL::HAL& hal;
constructor is not called until detect() returns true, so we
already know that we should setup the rangefinder
*/
AP_RangeFinder_MaxsonarI2CXL::AP_RangeFinder_MaxsonarI2CXL(RangeFinder::RangeFinder_State &_state)
AP_RangeFinder_MaxsonarI2CXL::AP_RangeFinder_MaxsonarI2CXL(RangeFinder::RangeFinder_State &_state,
AP_HAL::OwnPtr<AP_HAL::I2CDevice> dev)
: AP_RangeFinder_Backend(_state)
, _dev(hal.i2c_mgr->get_device(1, AP_RANGE_FINDER_MAXSONARI2CXL_DEFAULT_ADDR))
, _dev(std::move(dev))
{
}
@ -46,10 +47,11 @@ AP_RangeFinder_MaxsonarI2CXL::AP_RangeFinder_MaxsonarI2CXL(RangeFinder::RangeFin
trying to take a reading on I2C. If we get a result the sensor is
there.
*/
AP_RangeFinder_Backend *AP_RangeFinder_MaxsonarI2CXL::detect(RangeFinder::RangeFinder_State &_state)
AP_RangeFinder_Backend *AP_RangeFinder_MaxsonarI2CXL::detect(RangeFinder::RangeFinder_State &_state,
AP_HAL::OwnPtr<AP_HAL::I2CDevice> dev)
{
AP_RangeFinder_MaxsonarI2CXL *sensor
= new AP_RangeFinder_MaxsonarI2CXL(_state);
= new AP_RangeFinder_MaxsonarI2CXL(_state, std::move(dev));
if (!sensor) {
return nullptr;
}

View File

@ -17,7 +17,8 @@ class AP_RangeFinder_MaxsonarI2CXL : public AP_RangeFinder_Backend
{
public:
// static detection function
static AP_RangeFinder_Backend *detect(RangeFinder::RangeFinder_State &_state);
static AP_RangeFinder_Backend *detect(RangeFinder::RangeFinder_State &_state,
AP_HAL::OwnPtr<AP_HAL::I2CDevice> dev);
// update state
void update(void);
@ -30,7 +31,8 @@ protected:
private:
// constructor
AP_RangeFinder_MaxsonarI2CXL(RangeFinder::RangeFinder_State &_state);
AP_RangeFinder_MaxsonarI2CXL(RangeFinder::RangeFinder_State &_state,
AP_HAL::OwnPtr<AP_HAL::I2CDevice> dev);
bool _init(void);
void _timer(void);

View File

@ -614,7 +614,11 @@ void RangeFinder::detect_instance(uint8_t instance)
}
break;
case RangeFinder_TYPE_MBI2C:
_add_backend(AP_RangeFinder_MaxsonarI2CXL::detect(state[instance]));
if (!_add_backend(AP_RangeFinder_MaxsonarI2CXL::detect(state[instance],
hal.i2c_mgr->get_device(1, AP_RANGE_FINDER_MAXSONARI2CXL_DEFAULT_ADDR)))) {
_add_backend(AP_RangeFinder_MaxsonarI2CXL::detect(state[instance],
hal.i2c_mgr->get_device(0, AP_RANGE_FINDER_MAXSONARI2CXL_DEFAULT_ADDR)));
}
break;
case RangeFinder_TYPE_LWI2C:
if (state[instance].address) {