From 7a0dbe8406caba02c0c8f879c1cb69dcadfab316 Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Tue, 9 Dec 2025 17:01:57 +0100 Subject: [PATCH 1/3] uavcan esc: remove unused includes --- src/drivers/uavcan/actuators/esc.cpp | 2 -- src/drivers/uavcan/actuators/esc.hpp | 6 +----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/drivers/uavcan/actuators/esc.cpp b/src/drivers/uavcan/actuators/esc.cpp index f39d589bf57b..33a955be8e17 100644 --- a/src/drivers/uavcan/actuators/esc.cpp +++ b/src/drivers/uavcan/actuators/esc.cpp @@ -43,8 +43,6 @@ #include #include -#define MOTOR_BIT(x) (1<<(x)) - using namespace time_literals; UavcanEscController::UavcanEscController(uavcan::INode &node) : diff --git a/src/drivers/uavcan/actuators/esc.hpp b/src/drivers/uavcan/actuators/esc.hpp index 90e8f5f5cccf..1170e67574d8 100644 --- a/src/drivers/uavcan/actuators/esc.hpp +++ b/src/drivers/uavcan/actuators/esc.hpp @@ -47,13 +47,9 @@ #include #include #include -#include #include -#include #include -#include -#include -#include +#include "../node_info.hpp" class UavcanEscController { From 6e299f568603eec1ff768daa0b413e236fc4b5f3 Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Wed, 10 Dec 2025 10:25:29 +0100 Subject: [PATCH 2/3] uavcan arming_status: disarm when terminated To stay consistent with kill. --- src/drivers/uavcan/arming_status.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/drivers/uavcan/arming_status.cpp b/src/drivers/uavcan/arming_status.cpp index 21b1c7f3f481..97d7c8ce0993 100644 --- a/src/drivers/uavcan/arming_status.cpp +++ b/src/drivers/uavcan/arming_status.cpp @@ -66,10 +66,9 @@ void UavcanArmingStatus::periodic_update(const uavcan::TimerEvent &) if (_actuator_armed_sub.update(&actuator_armed)) { uavcan::equipment::safety::ArmingStatus cmd; - if (actuator_armed.lockdown || actuator_armed.kill) { - cmd.status = cmd.STATUS_DISARMED; + bool lockdown_active = actuator_armed.lockdown || actuator_armed.termination || actuator_armed.kill; - } else if (actuator_armed.armed) { + if (!lockdown_active && actuator_armed.armed) { cmd.status = cmd.STATUS_FULLY_ARMED; } else { From b994aa919cbb03538b0350019adb060bd2e81bda Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Wed, 10 Dec 2025 17:21:10 +0100 Subject: [PATCH 3/3] uavcan: publish armed during actuator tests to make it possible spinning motors --- src/drivers/uavcan/arming_status.cpp | 2 +- src/drivers/uavcan/arming_status.hpp | 3 +++ src/drivers/uavcan/uavcan_main.cpp | 4 ++++ src/drivers/uavcan/uavcan_main.hpp | 2 ++ src/lib/mixer_module/mixer_module.hpp | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/drivers/uavcan/arming_status.cpp b/src/drivers/uavcan/arming_status.cpp index 97d7c8ce0993..80ce14065dfe 100644 --- a/src/drivers/uavcan/arming_status.cpp +++ b/src/drivers/uavcan/arming_status.cpp @@ -68,7 +68,7 @@ void UavcanArmingStatus::periodic_update(const uavcan::TimerEvent &) bool lockdown_active = actuator_armed.lockdown || actuator_armed.termination || actuator_armed.kill; - if (!lockdown_active && actuator_armed.armed) { + if (!lockdown_active && (actuator_armed.armed || _is_actuator_test_running)) { cmd.status = cmd.STATUS_FULLY_ARMED; } else { diff --git a/src/drivers/uavcan/arming_status.hpp b/src/drivers/uavcan/arming_status.hpp index 3c7bdd041b22..4cfaac4b56b7 100644 --- a/src/drivers/uavcan/arming_status.hpp +++ b/src/drivers/uavcan/arming_status.hpp @@ -57,6 +57,8 @@ class UavcanArmingStatus */ int init(); + void setActuatorTestRunning(bool running) {_is_actuator_test_running = running;} + private: /* * Max update rate to avoid exessive bus traffic @@ -80,4 +82,5 @@ class UavcanArmingStatus uORB::Subscription _actuator_armed_sub{ORB_ID(actuator_armed)}; + bool _is_actuator_test_running = false; }; diff --git a/src/drivers/uavcan/uavcan_main.cpp b/src/drivers/uavcan/uavcan_main.cpp index 5f9b55438ba0..742682cf4d50 100644 --- a/src/drivers/uavcan/uavcan_main.cpp +++ b/src/drivers/uavcan/uavcan_main.cpp @@ -969,6 +969,10 @@ UavcanNode::Run() } } +#if defined(CONFIG_UAVCAN_OUTPUTS_CONTROLLER) + _arming_status_controller.setActuatorTestRunning(_mixing_interface_esc.isActuatorTestRunning()); +#endif + perf_end(_cycle_perf); pthread_mutex_unlock(&_node_mutex); diff --git a/src/drivers/uavcan/uavcan_main.hpp b/src/drivers/uavcan/uavcan_main.hpp index ab49dfe50f8d..56f7c445fe41 100644 --- a/src/drivers/uavcan/uavcan_main.hpp +++ b/src/drivers/uavcan/uavcan_main.hpp @@ -136,6 +136,8 @@ class UavcanMixingInterfaceESC : public OutputModuleInterface MixingOutput &mixingOutput() { return _mixing_output; } + bool isActuatorTestRunning() const { return _mixing_output.isActuatorTestRunning(); } + protected: void Run() override; private: diff --git a/src/lib/mixer_module/mixer_module.hpp b/src/lib/mixer_module/mixer_module.hpp index 4fdc0f29046c..3e4cec0d51d9 100644 --- a/src/lib/mixer_module/mixer_module.hpp +++ b/src/lib/mixer_module/mixer_module.hpp @@ -163,6 +163,7 @@ class MixingOutput : public ModuleParams void setMaxTopicUpdateRate(unsigned max_topic_update_interval_us); const actuator_armed_s &armed() const { return _armed; } + bool isActuatorTestRunning() const { return _actuator_test.inTestMode(); } void setAllFailsafeValues(uint16_t value); void setAllDisarmedValues(uint16_t value);