From 036ae93cbbcb73675a03fb59b344d57cbb659f48 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 30 Dec 2023 08:32:31 +1100 Subject: [PATCH] AP_DroneCAN: reimplement with BinarySemaphore --- libraries/AP_DroneCAN/AP_Canard_iface.cpp | 7 +++---- libraries/AP_DroneCAN/AP_Canard_iface.h | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/libraries/AP_DroneCAN/AP_Canard_iface.cpp b/libraries/AP_DroneCAN/AP_Canard_iface.cpp index 86bedca40e..ebece89626 100644 --- a/libraries/AP_DroneCAN/AP_Canard_iface.cpp +++ b/libraries/AP_DroneCAN/AP_Canard_iface.cpp @@ -406,10 +406,9 @@ void CanardInterface::process(uint32_t duration_ms) { WITH_SEMAPHORE(_sem_tx); canardCleanupStaleTransfers(&canard, AP_HAL::micros64()); } - uint64_t now = AP_HAL::micros64(); + const uint64_t now = AP_HAL::micros64(); if (now < deadline) { - _event_handle.wait(MIN(UINT16_MAX - 2U, deadline - now)); - hal.scheduler->delay_microseconds(50); + IGNORE_RETURN(sem_handle.wait(deadline - now)); } else { break; } @@ -436,7 +435,7 @@ bool CanardInterface::add_interface(AP_HAL::CANIface *can_iface) AP::can().log_text(AP_CANManager::LOG_ERROR, LOG_TAG, "DroneCANIfaceMgr: Can't alloc uavcan::iface\n"); return false; } - if (!can_iface->set_event_handle(&_event_handle)) { + if (!can_iface->set_event_handle(&sem_handle)) { AP::can().log_text(AP_CANManager::LOG_ERROR, LOG_TAG, "DroneCANIfaceMgr: Setting event handle failed\n"); return false; } diff --git a/libraries/AP_DroneCAN/AP_Canard_iface.h b/libraries/AP_DroneCAN/AP_Canard_iface.h index ce9b75ee92..43d786639f 100644 --- a/libraries/AP_DroneCAN/AP_Canard_iface.h +++ b/libraries/AP_DroneCAN/AP_Canard_iface.h @@ -72,7 +72,7 @@ private: static CanardInterface test_iface; #endif uint8_t num_ifaces; - HAL_EventHandle _event_handle; + HAL_BinarySemaphore sem_handle; bool initialized; HAL_Semaphore _sem_tx; HAL_Semaphore _sem_rx;