From 0ef4f1b7bd02255773a75dea0392104810b39159 Mon Sep 17 00:00:00 2001 From: Pascal <81227020+minotico@users.noreply.github.com> Date: Thu, 8 Jan 2026 02:59:03 +0100 Subject: [PATCH] Add uxrce dds flow control flag (#26209) * added flow control bitfield * shortened to 16 char param name length * refactored changes for uxrce flow control param * reverted additions to docs * Update src/modules/uxrce_dds_client/module.yaml Co-authored-by: Hamish Willee --------- Co-authored-by: minotico <81227020-minotico@users.noreply.github.com> Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com> Co-authored-by: Hamish Willee --- src/modules/uxrce_dds_client/module.yaml | 11 +++++++++++ src/modules/uxrce_dds_client/uxrce_dds_client.cpp | 12 ++++++++++-- src/modules/uxrce_dds_client/uxrce_dds_client.h | 3 ++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/modules/uxrce_dds_client/module.yaml b/src/modules/uxrce_dds_client/module.yaml index 3e9d03fcc9..5988a5a92c 100644 --- a/src/modules/uxrce_dds_client/module.yaml +++ b/src/modules/uxrce_dds_client/module.yaml @@ -142,3 +142,14 @@ parameters: category: System reboot_required: true default: -1 + + UXRCE_DDS_FLCTRL: + description: + short: Enable serial flow control for UXRCE interface + long: | + This is used to enable flow control for the serial uXRCE instance. + Used for reliable high bandwidth communication. + type: boolean + category: System + reboot_required: true + default: 0 diff --git a/src/modules/uxrce_dds_client/uxrce_dds_client.cpp b/src/modules/uxrce_dds_client/uxrce_dds_client.cpp index d5f2b57042..5eff22af36 100644 --- a/src/modules/uxrce_dds_client/uxrce_dds_client.cpp +++ b/src/modules/uxrce_dds_client/uxrce_dds_client.cpp @@ -837,8 +837,16 @@ bool UxrceddsClient::setBaudrate(int fd, unsigned baud) // uart_config.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG); - /* no parity, one stop bit, disable flow control */ - uart_config.c_cflag &= ~(CSTOPB | PARENB | CRTSCTS); + /* no parity, one stop bit */ + uart_config.c_cflag &= ~(CSTOPB | PARENB); + + /* enable flow control if needed */ + if (_param_uxrce_dds_flctrl.get() > 0) { + uart_config.c_cflag |= CRTSCTS; + + } else { + uart_config.c_cflag &= ~CRTSCTS; + } /* set baud rate */ if ((termios_state = cfsetispeed(&uart_config, speed)) < 0) { diff --git a/src/modules/uxrce_dds_client/uxrce_dds_client.h b/src/modules/uxrce_dds_client/uxrce_dds_client.h index 7b5208a80e..c5c60b1784 100644 --- a/src/modules/uxrce_dds_client/uxrce_dds_client.h +++ b/src/modules/uxrce_dds_client/uxrce_dds_client.h @@ -210,6 +210,7 @@ private: (ParamInt) _param_uxrce_dds_syncc, (ParamInt) _param_uxrce_dds_synct, (ParamInt) _param_uxrce_dds_tx_to, - (ParamInt) _param_uxrce_dds_rx_to + (ParamInt) _param_uxrce_dds_rx_to, + (ParamInt) _param_uxrce_dds_flctrl ) };