From c7ec7a1752ec312317cfc1035d0b9b12a8b91001 Mon Sep 17 00:00:00 2001 From: sys64738 Date: Fri, 8 Jul 2022 04:07:38 +0200 Subject: [PATCH] hardware flow control(?) --- bsp/rp2040/m_default/cdc_uart.c | 8 +++++++- bsp/rp2040/m_default/pinout.h | 2 +- src/m_default/_default.c | 13 +++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/bsp/rp2040/m_default/cdc_uart.c b/bsp/rp2040/m_default/cdc_uart.c index f9e760e..73a7952 100644 --- a/bsp/rp2040/m_default/cdc_uart.c +++ b/bsp/rp2040/m_default/cdc_uart.c @@ -48,8 +48,10 @@ void cdc_uart_init(void) { gpio_set_function(PINOUT_UART_TX, GPIO_FUNC_UART); gpio_set_function(PINOUT_UART_RX, GPIO_FUNC_UART); + gpio_set_function(PINOUT_UART_CTS, GPIO_FUNC_SIO); + gpio_set_function(PINOUT_UART_RTS, GPIO_FUNC_SIO); uart_init(PINOUT_UART_INTERFACE, lc_brate/*PINOUT_UART_BAUDRATE*/); - uart_set_hw_flow(PINOUT_UART_INTERFACE, hwflow, hwflow); + //uart_set_hw_flow(PINOUT_UART_INTERFACE, hwflow, hwflow); uart_set_format(PINOUT_UART_INTERFACE, lc_data, lc_stop, lc_parity); bi_decl(bi_2pins_with_func(PINOUT_UART_TX, PINOUT_UART_RX, GPIO_FUNC_UART)); @@ -58,6 +60,8 @@ void cdc_uart_deinit(void) { uart_deinit(PINOUT_UART_INTERFACE); gpio_set_function(PINOUT_UART_TX, GPIO_FUNC_NULL); gpio_set_function(PINOUT_UART_RX, GPIO_FUNC_NULL); + gpio_set_function(PINOUT_UART_CTS, GPIO_FUNC_NULL); + gpio_set_function(PINOUT_UART_RTS, GPIO_FUNC_NULL); } void cdc_uart_task(void) { @@ -90,6 +94,8 @@ bool cdc_uart_get_hwflow(void) { bool cdc_uart_set_hwflow(bool enable) { hwflow = enable; //uart_set_hw_flow(PINOUT_UART_INTERFACE, enable, enable); + // TODO: CTS + gpio_put(PINOUT_UART_RTS, enable); return true; } diff --git a/bsp/rp2040/m_default/pinout.h b/bsp/rp2040/m_default/pinout.h index f672ee7..c7625c1 100644 --- a/bsp/rp2040/m_default/pinout.h +++ b/bsp/rp2040/m_default/pinout.h @@ -15,7 +15,7 @@ #define PINOUT_JTAG_TCK 2 // == SWCLK #define PINOUT_JTAG_TMS 3 // == SWDIO #define PINOUT_JTAG_TDI 4 -#define PINOUT_JTAG_TDO 5 +#define PINOUT_JTAG_TDO 5 // == SWO #define PINOUT_JTAG_nTRST 6 #define PINOUT_JTAG_nRESET 7 #define PINOUT_JTAG_PIO_DEV pio0 diff --git a/src/m_default/_default.c b/src/m_default/_default.c index c095418..22de00f 100644 --- a/src/m_default/_default.c +++ b/src/m_default/_default.c @@ -469,3 +469,16 @@ struct mode m_01_default = { }; // clang-format on +#if defined(DBOARD_HAS_UART) +// FIXME: use mode-specific callback here? +void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { + (void)dtr; + + if (mode_current != &m_01_default) return; + + if (itf == CDC_N_UART) { + cdc_uart_set_hwflow(rts); + } +} +#endif +