Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[drivers][serial_v2]允许阻塞接收超过rx缓冲区大小的数据、增加超时时间、flush、获取缓冲区数据长度命令、数据溢出逻… #9389

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
70a1361
[drivers][serial_v2]允许阻塞接收超过rx缓冲区大小的数据、增加超时时间、flush、获取缓冲区数据长度命令、数据溢出逻…
Ryan-CW-Code Sep 4, 2024
915ce05
format code
Ryan-CW-Code Sep 4, 2024
37140fe
[components][serial_v2] 优化txflush逻辑、对tx的activated做中断保护
Ryan-CW-Code Sep 4, 2024
bef1507
[components][at] at_client适配新版serial_v2
Ryan-CW-Code Sep 10, 2024
29a7414
[components][at] at_server适配新版serial_v2
Ryan-CW-Code Sep 10, 2024
0d92bda
[components][serial_v2] 测试用例增加循环调用,format测试用例
Ryan-CW-Code Sep 10, 2024
7acaae1
Merge branch 'RT-Thread:master' into serial_v2
Ryan-CW-Code Sep 10, 2024
db1a58e
[components][serial_v2] poll模式判断逻辑错误
Ryan-CW-Code Sep 10, 2024
849d327
[components][serial_v2] 测试用例去掉一些非必要延时
Ryan-CW-Code Sep 10, 2024
291373b
Merge branch 'serial_v2' of github.com:Ryan-CW-Code/ryan-rt-thread in…
Ryan-CW-Code Sep 10, 2024
c6c9f80
[components][serial_v2] 测试例程使用menuconfig进行配置,更新readme
Ryan-CW-Code Sep 10, 2024
3ae60c8
[components][at_client] at_client_getchar返回值错误、at_client解析线程优先级错误设置
Ryan-CW-Code Sep 10, 2024
5b84990
[components][at] 错误码应该返回负值
Ryan-CW-Code Sep 11, 2024
4eabec2
format code
Ryan-CW-Code Sep 11, 2024
61a0c61
[components][serial_v2] TCFLSH和FIONREAD完善、control函数增加错误返回值
Ryan-CW-Code Sep 11, 2024
6d2e90b
[components][serial_v2] RT_SERIAL_CTRL_GET_RX_DATA_LEN更改为RT_SERIAL_CT…
Ryan-CW-Code Sep 11, 2024
cd4a1a4
[utest][serial_v2] TC_UART_SEND_TIMES替换为RT_SERIAL_TC_SEND_ITERATIONS
Ryan-CW-Code Sep 11, 2024
cad404a
[components][serial_v2] FIONREAD参数应该是无符号类型
Ryan-CW-Code Sep 11, 2024
3c107c7
[utest][serial_v2] 完善测试用例
Ryan-CW-Code Sep 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bsp/at32/libraries/rt_drivers/drv_usart_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ static void usart_isr(struct rt_serial_device *serial)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), usart_data_receive(instance->uart_x));
rt_ringbuffer_putchar_force(&rx_fifo->rb, usart_data_receive(instance->uart_x));

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand Down
2 changes: 1 addition & 1 deletion bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ static void usart_isr (struct rt_serial_device *serial)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), usart_data_receive(uart->periph));
rt_ringbuffer_putchar_force(&rx_fifo->rb, usart_data_receive(uart->periph));

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);

Expand Down
2 changes: 1 addition & 1 deletion bsp/hc32/libraries/hc32_drivers/drv_usart_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ static void hc32_uart_rx_irq_handler(struct hc32_uart *uart)
struct rt_serial_rx_fifo *rx_fifo;
rx_fifo = (struct rt_serial_rx_fifo *)uart->serial.serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);
rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)USART_ReadData(uart->config->Instance));
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)USART_ReadData(uart->config->Instance));
rt_hw_serial_isr(&uart->serial, RT_SERIAL_EVENT_RX_IND);
}

Expand Down
4 changes: 2 additions & 2 deletions bsp/hpmicro/libraries/drivers/drv_uart_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -645,7 +645,7 @@ static void hpm_uart_isr(struct rt_serial_device *serial)
while (uart_check_status(uart->uart_base, uart_stat_data_ready)) {
count++;
put_char = uart_read_byte(uart->uart_base);
rt_ringbuffer_putchar(&(rx_fifo->rb), put_char);
rt_ringbuffer_putchar_force(&rx_fifo->rb, put_char);
/*in order to ensure rx fifo there are remaining bytes*/
if (count > 12) {
break;
Expand All @@ -656,7 +656,7 @@ static void hpm_uart_isr(struct rt_serial_device *serial)
if (irq_id == uart_intr_id_rx_timeout) {
while ((uart_check_status(uart->uart_base, uart_stat_data_ready)) || (uart_check_status(uart->uart_base, uart_stat_overrun_error))) {
put_char= uart_read_byte(uart->uart_base);
rt_ringbuffer_putchar(&(rx_fifo->rb), put_char);
rt_ringbuffer_putchar_force(&rx_fifo->rb, put_char);
}
rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand Down
2 changes: 1 addition & 1 deletion bsp/microchip/common/board/serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ static void serial_rxcallback(const struct usart_async_descriptor *const io_desc

do {
ringbuffer_get((struct ringbuffer *const)&io_descr->rx, &data);
rt_ringbuffer_putchar(&(rx_fifo->rb), data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, data);
} while (0); // maybe not only one byte

#endif
Expand Down
20 changes: 10 additions & 10 deletions bsp/renesas/libraries/HAL_Drivers/drv_usart_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ void user_uart0_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -313,7 +313,7 @@ void user_uart1_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -336,7 +336,7 @@ void user_uart2_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -359,7 +359,7 @@ void user_uart3_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -382,7 +382,7 @@ void user_uart4_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -405,7 +405,7 @@ void user_uart5_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -428,7 +428,7 @@ void user_uart6_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -451,7 +451,7 @@ void user_uart7_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -474,7 +474,7 @@ void user_uart8_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -497,7 +497,7 @@ void user_uart9_callback(uart_callback_args_t *p_args)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)p_args->data);
rt_ringbuffer_putchar_force(&rx_fifo->rb, (rt_uint8_t)p_args->data);

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand Down
4 changes: 2 additions & 2 deletions bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ static void uart_isr(struct rt_serial_device *serial)
rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

rt_ringbuffer_putchar(&(rx_fifo->rb), UART_GET_RDR(&uart->handle, stm32_uart_get_mask(uart->handle.Init.WordLength, uart->handle.Init.Parity)));
rt_ringbuffer_putchar_force(&rx_fifo->rb, UART_GET_RDR(&uart->handle, stm32_uart_get_mask(uart->handle.Init.WordLength, uart->handle.Init.Parity)));

rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
}
Expand All @@ -459,7 +459,7 @@ static void uart_isr(struct rt_serial_device *serial)
RT_ASSERT(tx_fifo != RT_NULL);

rt_uint8_t put_char = 0;
if (rt_ringbuffer_getchar(&(tx_fifo->rb), &put_char))
if (rt_ringbuffer_getchar(&tx_fifo->rb, &put_char))
{
UART_SET_TDR(&uart->handle, put_char);
}
Expand Down
13 changes: 11 additions & 2 deletions components/drivers/include/drivers/serial_v2.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2006-2023, RT-Thread Development Team
* Copyright (c) 2006-2024 RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
Expand Down Expand Up @@ -70,7 +70,12 @@
#define RT_SERIAL_EVENT_TX_DONE 0x02 /* Tx complete */
#define RT_SERIAL_EVENT_RX_DMADONE 0x03 /* Rx DMA transfer done */
#define RT_SERIAL_EVENT_TX_DMADONE 0x04 /* Tx DMA transfer done */
#define RT_SERIAL_EVENT_RX_TIMEOUT 0x05 /* Rx timeout */

#define RT_SERIAL_CTRL_RX_TIMEOUT (RT_DEVICE_CTRL_MASK + 0x01) /* Rx timeout. Call before rt_device_read. not supported in poll mode */
#define RT_SERIAL_CTRL_TX_TIMEOUT (RT_DEVICE_CTRL_MASK + 0x02) /* Tx timeout. Call before rt_device_write. not supported in poll mode */
#define RT_SERIAL_CTRL_RX_FLUSH (RT_DEVICE_CTRL_MASK + 0x03) /* Clear rx buffer. Discard all data */
#define RT_SERIAL_CTRL_TX_FLUSH (RT_DEVICE_CTRL_MASK + 0x04) /* Clear tx buffer. Blocking and wait for the send buffer data to be sent. not supported in poll mode */
#define RT_SERIAL_CTRL_GET_UNREAD_BYTES_COUNT (RT_DEVICE_CTRL_MASK + 0x05) /* get unread bytes count. not supported in poll mode */

#define RT_SERIAL_ERR_OVERRUN 0x01
#define RT_SERIAL_ERR_FRAMING 0x02
Expand Down Expand Up @@ -137,6 +142,8 @@ struct rt_serial_rx_fifo

rt_uint16_t rx_cpt_index;

rt_int32_t rx_timeout;

/* software fifo */
rt_uint8_t buffer[];
};
Expand All @@ -150,6 +157,8 @@ struct rt_serial_tx_fifo

rt_size_t put_size;

rt_int32_t tx_timeout;

rt_bool_t activated;

struct rt_completion tx_cpt;
Expand Down
Loading
Loading