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 ) };