1 #include <rtthread.h>
2 #include <rtdevice.h>
3 #include "utest.h"
4 
5 #ifdef UTEST_SERIAL_TC
6 
block_read(rt_device_t uart_dev)7 static rt_bool_t block_read(rt_device_t uart_dev)
8 {
9     rt_size_t total_length, recv_length;
10     char      uart_read_buffer[1024], log_buffer[64];
11 
12     /* make sure device is closed and reopen it */
13     while (rt_device_close(uart_dev) != -RT_ERROR);
14     rt_device_open(uart_dev, RT_DEVICE_FLAG_TX_BLOCKING | RT_DEVICE_FLAG_RX_BLOCKING);
15 
16     rt_sprintf(log_buffer, "\nBLOCKING READ BEGIN, PLEASE SEND SOME DATAS\n");
17     rt_device_write(uart_dev, 0, log_buffer, rt_strlen(log_buffer));
18 
19     total_length  = 0;
20     recv_length   = 0;
21     recv_length   = rt_device_read(uart_dev, -1, uart_read_buffer, rt_strlen(log_buffer));
22     total_length += recv_length;
23 
24     rt_sprintf(log_buffer, "\nblock : %d bytes read, total: %d \n", recv_length, total_length);
25     rt_device_write(uart_dev, 0, log_buffer, rt_strlen(log_buffer));
26 
27     recv_length   = 0;
28     recv_length   = rt_device_read(uart_dev, -1, uart_read_buffer, rt_strlen(log_buffer));
29     total_length += recv_length;
30 
31     rt_sprintf(log_buffer, "\nblock : %d bytes read , total: %d \n", recv_length, total_length);
32     rt_device_write(uart_dev, 0, log_buffer, rt_strlen(log_buffer));
33 
34     recv_length   = 0;
35     recv_length   = rt_device_read(uart_dev, -1, uart_read_buffer, rt_strlen(log_buffer));
36     total_length += recv_length;
37 
38     rt_sprintf(log_buffer, "\nblock : %d bytes read , total: %d \n", recv_length, total_length);
39     rt_device_write(uart_dev, 0, log_buffer, rt_strlen(log_buffer));
40 
41     recv_length   = 0;
42     recv_length   = rt_device_read(uart_dev, -1, uart_read_buffer, rt_strlen(log_buffer));
43     total_length += recv_length;
44 
45     rt_sprintf(log_buffer, "\nblock : %d bytes read , total: %d \n", recv_length, total_length);
46     rt_device_write(uart_dev, 0, log_buffer, rt_strlen(log_buffer));
47 
48     recv_length   = 0;
49     recv_length   = rt_device_read(uart_dev, -1, uart_read_buffer, rt_strlen(log_buffer));
50     total_length += recv_length;
51 
52     rt_sprintf(log_buffer, "\nblock : %d bytes read , total: %d \n", recv_length, total_length);
53     rt_device_write(uart_dev, 0, log_buffer, rt_strlen(log_buffer));
54 
55     rt_sprintf(log_buffer, "BLOCKING READ END");
56     rt_device_write(uart_dev, 0, log_buffer, rt_strlen(log_buffer));
57 
58     return RT_TRUE;
59 }
60 
uart_test_blocking_rx(void)61 static void uart_test_blocking_rx(void)
62 {
63     rt_device_t uart_dev;
64     uart_dev = rt_device_find(RT_SERIAL_TC_DEVICE_NAME);
65     uassert_not_null(uart_dev);
66 
67     uassert_true(block_read(uart_dev));
68 }
69 
utest_tc_init(void)70 static rt_err_t utest_tc_init(void)
71 {
72     return RT_EOK;
73 }
74 
utest_tc_cleanup(void)75 static rt_err_t utest_tc_cleanup(void)
76 {
77     rt_device_t uart_dev = rt_device_find(RT_SERIAL_TC_DEVICE_NAME);
78     while (rt_device_close(uart_dev) != -RT_ERROR);
79     return RT_EOK;
80 }
81 
testcase(void)82 static void testcase(void)
83 {
84     UTEST_UNIT_RUN(uart_test_blocking_rx);
85 }
86 UTEST_TC_EXPORT(testcase, "uart_blocking_rx", utest_tc_init, utest_tc_cleanup, 10);
87 
88 #endif
89