diff --git a/src/drivers/uavcan/actuators/esc.cpp b/src/drivers/uavcan/actuators/esc.cpp index f39d589bf5..33a955be8e 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 90e8f5f5cc..1170e67574 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 { diff --git a/src/drivers/uavcan/arming_status.cpp b/src/drivers/uavcan/arming_status.cpp index 21b1c7f3f4..80ce14065d 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 || _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 3c7bdd041b..4cfaac4b56 100644 --- a/src/drivers/uavcan/arming_status.hpp +++ b/src/drivers/uavcan/arming_status.hpp @@ -57,6 +57,8 @@ public: */ int init(); + void setActuatorTestRunning(bool running) {_is_actuator_test_running = running;} + private: /* * Max update rate to avoid exessive bus traffic @@ -80,4 +82,5 @@ private: 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 5f9b55438b..742682cf4d 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 ab49dfe50f..56f7c445fe 100644 --- a/src/drivers/uavcan/uavcan_main.hpp +++ b/src/drivers/uavcan/uavcan_main.hpp @@ -136,6 +136,8 @@ public: 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 4fdc0f2904..3e4cec0d51 100644 --- a/src/lib/mixer_module/mixer_module.hpp +++ b/src/lib/mixer_module/mixer_module.hpp @@ -163,6 +163,7 @@ public: 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);