From 965cdd7e72174bbdc29d958185631bbe58b2025e Mon Sep 17 00:00:00 2001 From: Randy Mackay Date: Tue, 12 Jul 2022 14:29:35 +0900 Subject: [PATCH] AP_Proximity: fixup detection of serial drivers --- libraries/AP_Proximity/AP_Proximity.cpp | 167 +++++++++--------- libraries/AP_Proximity/AP_Proximity.h | 2 - .../AP_Proximity_Backend_Serial.cpp | 16 +- .../AP_Proximity_Backend_Serial.h | 7 +- .../AP_Proximity_LightWareSF45B.h | 5 +- 5 files changed, 98 insertions(+), 99 deletions(-) diff --git a/libraries/AP_Proximity/AP_Proximity.cpp b/libraries/AP_Proximity/AP_Proximity.cpp index 391aa30cb8..52f2d5ad45 100644 --- a/libraries/AP_Proximity/AP_Proximity.cpp +++ b/libraries/AP_Proximity/AP_Proximity.cpp @@ -109,16 +109,92 @@ void AP_Proximity::init() // init called a 2nd time? return; } - for (uint8_t i=0; ibegin(serial_manager.find_baudrate(AP_SerialManager::SerialProtocol_Lidar360, 0), rxspace(), 0); + _uart->begin(serial_manager.find_baudrate(AP_SerialManager::SerialProtocol_Lidar360, serial_instance), rxspace(), 0); } } -// detect if a proximity sensor is connected by looking for a -// configured serial port -bool AP_Proximity_Backend_Serial::detect(uint8_t instance) +// static detection function +// detect if a proximity sensor is connected by looking for a configured serial port +// serial_instance affects which serial port is used. Should be 0 or 1 depending on whether this is the 1st or 2nd proximity sensor with a serial interface +bool AP_Proximity_Backend_Serial::detect(uint8_t serial_instance) { - return AP::serialmanager().have_serial(AP_SerialManager::SerialProtocol_Lidar360, instance); + return AP::serialmanager().have_serial(AP_SerialManager::SerialProtocol_Lidar360, serial_instance); } #endif // HAL_PROXIMITY_ENABLED diff --git a/libraries/AP_Proximity/AP_Proximity_Backend_Serial.h b/libraries/AP_Proximity/AP_Proximity_Backend_Serial.h index e0164d6239..ac363fbe46 100644 --- a/libraries/AP_Proximity/AP_Proximity_Backend_Serial.h +++ b/libraries/AP_Proximity/AP_Proximity_Backend_Serial.h @@ -9,10 +9,13 @@ class AP_Proximity_Backend_Serial : public AP_Proximity_Backend public: AP_Proximity_Backend_Serial(AP_Proximity &_frontend, AP_Proximity::Proximity_State &_state, - AP_Proximity_Params& _params); + AP_Proximity_Params& _params, + uint8_t serial_instance); // static detection function - static bool detect(uint8_t instance); + // detect if a proximity sensor is connected by looking for a configured serial port + // serial_instance affects which serial port is used. Should be 0 or 1 depending on whether this is the 1st or 2nd proximity sensor with a serial interface + static bool detect(uint8_t serial_instance); protected: virtual uint16_t rxspace() const { return 0; }; diff --git a/libraries/AP_Proximity/AP_Proximity_LightWareSF45B.h b/libraries/AP_Proximity/AP_Proximity_LightWareSF45B.h index 95dc0eb65b..fb32d7ca23 100644 --- a/libraries/AP_Proximity/AP_Proximity_LightWareSF45B.h +++ b/libraries/AP_Proximity/AP_Proximity_LightWareSF45B.h @@ -12,8 +12,9 @@ public: // constructor AP_Proximity_LightWareSF45B(AP_Proximity &_frontend, AP_Proximity::Proximity_State &_state, - AP_Proximity_Params& _params) : - AP_Proximity_LightWareSerial(_frontend, _state, _params) {} + AP_Proximity_Params& _params, + uint8_t serial_instance) : + AP_Proximity_LightWareSerial(_frontend, _state, _params, serial_instance) {} uint16_t rxspace() const override { return 1280;