diff --git a/boards/ark/can-flow/src/board_config.h b/boards/ark/can-flow/src/board_config.h index 8096f5a5ad..40f302e19b 100644 --- a/boards/ark/can-flow/src/board_config.h +++ b/boards/ark/can-flow/src/board_config.h @@ -48,6 +48,7 @@ /* CAN termination software control */ #define GPIO_CAN1_TERMINATION /* PB13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN13) +#define GPIO_CAN_TERM GPIO_CAN1_TERMINATION /* Boot config */ #define GPIO_BOOT_CONFIG /* PC15 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN15|GPIO_EXTI) diff --git a/boards/ark/can-gps/src/board_config.h b/boards/ark/can-gps/src/board_config.h index 9bccc881c9..723310472f 100644 --- a/boards/ark/can-gps/src/board_config.h +++ b/boards/ark/can-gps/src/board_config.h @@ -60,6 +60,7 @@ /* CAN termination software control */ #define GPIO_CAN1_TERMINATION /* PB13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN13) +#define GPIO_CAN_TERM GPIO_CAN1_TERMINATION /* ICM42688p FSYNC */ #define GPIO_42688P_FSYNC /* PB8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN8) diff --git a/boards/ark/can-rtk-gps/src/board_config.h b/boards/ark/can-rtk-gps/src/board_config.h index e6ba3d52f4..2263956bae 100644 --- a/boards/ark/can-rtk-gps/src/board_config.h +++ b/boards/ark/can-rtk-gps/src/board_config.h @@ -60,6 +60,7 @@ /* CAN termination software control */ #define GPIO_CAN1_TERMINATION /* PB13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN13) +#define GPIO_CAN_TERM GPIO_CAN1_TERMINATION /* ICM42688p FSYNC */ #define GPIO_42688P_FSYNC /* PB8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN8) diff --git a/src/drivers/uavcannode/UavcanNode.cpp b/src/drivers/uavcannode/UavcanNode.cpp index 13b0755c29..de4db64e3e 100644 --- a/src/drivers/uavcannode/UavcanNode.cpp +++ b/src/drivers/uavcannode/UavcanNode.cpp @@ -513,6 +513,19 @@ extern "C" int uavcannode_start(int argc, char *argv[]) // Sarted byt the bootloader, we must pet it watchdog_pet(); +#if defined(GPIO_CAN_TERM) + int32_t can_term = 0; + param_get(param_find("CANNODE_TERM"), &can_term); + + if (can_term != 0) { + px4_arch_gpiowrite(GPIO_CAN_TERM, true); + + } else { + px4_arch_gpiowrite(GPIO_CAN_TERM, false); + } + +#endif + // CAN bitrate int32_t bitrate = 0; diff --git a/src/drivers/uavcannode/uavcannode_params.c b/src/drivers/uavcannode/uavcannode_params.c index d16284c1e9..9dae5697df 100644 --- a/src/drivers/uavcannode/uavcannode_params.c +++ b/src/drivers/uavcannode/uavcannode_params.c @@ -50,3 +50,12 @@ PARAM_DEFINE_INT32(CANNODE_NODE_ID, 120); * @group UAVCAN */ PARAM_DEFINE_INT32(CANNODE_BITRATE, 1000000); + +/** + * CAN built-in bus termination + * + * @boolean + * @max 1 + * @group UAVCAN + */ +PARAM_DEFINE_INT32(CANNODE_TERM, 0);