uart_blocking_rx.c 2.9 KB

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