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