From 97e87dfcdbabcb85706b76381fde62a6ebccfcbc Mon Sep 17 00:00:00 2001 From: Peter Barker Date: Wed, 29 Jan 2025 11:52:24 +1100 Subject: [PATCH] AP_HAL_ChibiOS: add get_device_ptr to HAL I2CDevice API --- libraries/AP_HAL_ChibiOS/I2CDevice.cpp | 15 +++++++-------- libraries/AP_HAL_ChibiOS/I2CDevice.h | 10 ++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/libraries/AP_HAL_ChibiOS/I2CDevice.cpp b/libraries/AP_HAL_ChibiOS/I2CDevice.cpp index 12bead827bd..c5cec1730de 100644 --- a/libraries/AP_HAL_ChibiOS/I2CDevice.cpp +++ b/libraries/AP_HAL_ChibiOS/I2CDevice.cpp @@ -449,18 +449,17 @@ bool I2CDevice::adjust_periodic_callback(AP_HAL::Device::PeriodicHandle h, uint3 return bus.adjust_timer(h, period_usec); } -AP_HAL::OwnPtr -I2CDeviceManager::get_device(uint8_t bus, uint8_t address, - uint32_t bus_clock, - bool use_smbus, - uint32_t timeout_ms) +AP_HAL::I2CDevice * +I2CDeviceManager::get_device_ptr(uint8_t bus, uint8_t address, + uint32_t bus_clock, + bool use_smbus, + uint32_t timeout_ms) { bus -= HAL_I2C_BUS_BASE; if (bus >= ARRAY_SIZE(I2CD)) { - return AP_HAL::OwnPtr(nullptr); + return nullptr; } - auto dev = AP_HAL::OwnPtr(NEW_NOTHROW I2CDevice(bus, address, bus_clock, use_smbus, timeout_ms)); - return dev; + return NEW_NOTHROW I2CDevice(bus, address, bus_clock, use_smbus, timeout_ms); } /* diff --git a/libraries/AP_HAL_ChibiOS/I2CDevice.h b/libraries/AP_HAL_ChibiOS/I2CDevice.h index 143fe29f1d7..48764657639 100644 --- a/libraries/AP_HAL_ChibiOS/I2CDevice.h +++ b/libraries/AP_HAL_ChibiOS/I2CDevice.h @@ -126,10 +126,12 @@ public: return static_cast(i2c_mgr); } - AP_HAL::OwnPtr get_device(uint8_t bus, uint8_t address, - uint32_t bus_clock=400000, - bool use_smbus = false, - uint32_t timeout_ms=4) override; + /* Get a pointer to a newly-allocated I2CDevice handle. Lifetime + * is externally handled */ + AP_HAL::I2CDevice *get_device_ptr(uint8_t bus, uint8_t address, + uint32_t bus_clock=400000, + bool use_smbus = false, + uint32_t timeout_ms=4) override; /* get mask of bus numbers for all configured I2C buses