From 9015001b420267f71dd3914a90f984947366c165 Mon Sep 17 00:00:00 2001 From: Alexander Lerach Date: Tue, 2 Sep 2025 20:02:15 +0200 Subject: [PATCH] uavcan: fix driver init after stop/start (#25511) --- .../uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp | 4 ++-- src/drivers/uavcannode/UavcanNode.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp index baddaa5997..2a8ff73fc9 100644 --- a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp +++ b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp @@ -644,7 +644,7 @@ uavcan::int16_t CanIface::configureFilters(const uavcan::CanFilterConfig *filter bool CanIface::waitCCCRBitStateChange(uint32_t mask, bool target_state) { -#if UAVCAN_STM32_NUTTX +#if UAVCAN_STM32H7_NUTTX const unsigned Timeout = 1000; #else const unsigned Timeout = 2000000; @@ -657,7 +657,7 @@ bool CanIface::waitCCCRBitStateChange(uint32_t mask, bool target_state) return true; } -#if UAVCAN_STM32_NUTTX +#if UAVCAN_STM32H7_NUTTX ::usleep(1000); #endif } diff --git a/src/drivers/uavcannode/UavcanNode.cpp b/src/drivers/uavcannode/UavcanNode.cpp index a79485dbf6..505bf4272c 100644 --- a/src/drivers/uavcannode/UavcanNode.cpp +++ b/src/drivers/uavcannode/UavcanNode.cpp @@ -505,12 +505,16 @@ void UavcanNode::Run() if (can_init_res < 0) { PX4_ERR("CAN driver init failed %i", can_init_res); + ScheduleClear(); + return; } int rv = _node.start(); if (rv < 0) { PX4_ERR("Failed to start the node"); + ScheduleClear(); + return; } // If the node_id was not supplied by the bootloader do Dynamic Node ID allocation @@ -528,6 +532,8 @@ void UavcanNode::Run() if (client_start_res < 0) { PX4_ERR("Failed to start the dynamic node ID client"); + ScheduleClear(); + return; } } }