diff --git a/src/drivers/uavcannode/CMakeLists.txt b/src/drivers/uavcannode/CMakeLists.txt index 2e02adf84f..7478f21d4a 100644 --- a/src/drivers/uavcannode/CMakeLists.txt +++ b/src/drivers/uavcannode/CMakeLists.txt @@ -134,6 +134,7 @@ px4_add_module( UavcanNodeParamManager.hpp UavcanNodeParamManager.cpp DEPENDS + arch_watchdog_iwdg px4_uavcan_dsdlc drivers_bootloaders diff --git a/src/drivers/uavcannode/UavcanNode.cpp b/src/drivers/uavcannode/UavcanNode.cpp index 3376cee3dc..f760d6b776 100644 --- a/src/drivers/uavcannode/UavcanNode.cpp +++ b/src/drivers/uavcannode/UavcanNode.cpp @@ -35,6 +35,7 @@ #include "boot_app_shared.h" +#include #include #include @@ -145,6 +146,7 @@ int UavcanNode::getHardwareVersion(uavcan::protocol::HardwareVersion &hwver) int UavcanNode::start(uavcan::NodeID node_id, uint32_t bitrate) { + if (_instance != nullptr) { PX4_WARN("Already started"); return -1; @@ -232,6 +234,7 @@ void UavcanNode::busevent_signal_trampoline() static void cb_reboot(const uavcan::TimerEvent &) { + watchdog_pet(); board_reset(0); } @@ -310,6 +313,10 @@ void UavcanNode::Run() { pthread_mutex_lock(&_node_mutex); + // Bootloader started it. + + watchdog_pet(); + if (!_initialized) { get_node().setRestartRequestHandler(&restart_request_handler); @@ -434,6 +441,9 @@ extern "C" int uavcannode_start(int argc, char *argv[]) { //board_app_initialize(nullptr); + // Sarted byt the bootloader, we must pet it + watchdog_pet(); + // CAN bitrate int32_t bitrate = 0;