diff --git a/src/drivers/uavcan/actuators/esc.cpp b/src/drivers/uavcan/actuators/esc.cpp index 12f5d8600bf..de1f5ad2a99 100644 --- a/src/drivers/uavcan/actuators/esc.cpp +++ b/src/drivers/uavcan/actuators/esc.cpp @@ -39,6 +39,7 @@ #include "esc.hpp" #include +#include #include #define MOTOR_BIT(x) (1<<(x)) @@ -66,6 +67,12 @@ UavcanEscController::init() _esc_status_pub.advertise(); + int32_t iface_mask{0xFF}; + + if (param_get(param_find("UAVCAN_ESC_IFACE"), &iface_mask) == OK) { + _uavcan_pub_raw_cmd.getTransferSender().setIfaceMask(iface_mask); + } + return res; } diff --git a/src/drivers/uavcan/module.yaml b/src/drivers/uavcan/module.yaml index 9c2ba643dce..0579870297b 100644 --- a/src/drivers/uavcan/module.yaml +++ b/src/drivers/uavcan/module.yaml @@ -1,4 +1,29 @@ module_name: UAVCAN +parameters: +- group: UAVCAN + definitions: + UAVCAN_ESC_IFACE: + description: + short: Which CAN interfaces to output ESC messages on. + long: | + Since ESC messages are high priority and sent at a high rate, it is + recommended to only enable the interfaces that are actually used. + Otherwise, the ESC messages will arbitrate lower priority messages and + starve other nodes on the bus. + type: bitmask + bit: + 0: CAN1 + 1: CAN2 + 2: CAN3 + 3: CAN4 + 4: CAN5 + 5: CAN6 + 6: CAN7 + 7: CAN8 + default: 255 + min: 1 + max: 255 + reboot_required: true actuator_output: show_subgroups_if: 'UAVCAN_ENABLE>=3' config_parameters: