rtlink_port_uart.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-12-09 xiangxistu the first version
  9. */
  10. #define DBG_TAG "rtlink_hw"
  11. #define DBG_LVL DBG_INFO
  12. #include <rtdbg.h>
  13. #include <rtthread.h>
  14. #include <rtdevice.h>
  15. #include <rtlink_port.h>
  16. #ifdef PKG_PKG_RT_LINK_HW_DEVICE_NAME
  17. #define RT_LINK_HW_DEVICE_NAME PKG_PKG_RT_LINK_HW_DEVICE_NAME
  18. #else
  19. #error "PKG_PKG_RT_LINK_HW_DEVICE_NAME must be defined."
  20. #endif
  21. #ifdef RT_SERIAL_RB_BUFSZ
  22. #define RT_LINK_HW_RB_BUFSZ (RT_SERIAL_RB_BUFSZ)
  23. #else
  24. #define RT_LINK_HW_RB_BUFSZ 64
  25. #endif
  26. static struct rt_device *hw_device = RT_NULL;
  27. static rt_uint8_t buffer[RT_LINK_HW_RB_BUFSZ] = {0};
  28. rt_err_t rt_link_port_rx_ind(rt_device_t device, rt_size_t size)
  29. {
  30. RT_ASSERT(device != RT_NULL);
  31. rt_size_t length = rt_device_read(device, 0, buffer, sizeof(buffer));
  32. rt_link_hw_write_cb(&buffer, length);
  33. return RT_EOK;
  34. }
  35. rt_err_t rt_link_port_reconnect(void)
  36. {
  37. return RT_EOK;
  38. }
  39. rt_size_t rt_link_port_send(void *data, rt_size_t length)
  40. {
  41. rt_size_t size = 0;
  42. size = rt_device_write(hw_device, 0, data, length);
  43. return size;
  44. }
  45. rt_err_t rt_link_port_init(void)
  46. {
  47. hw_device = rt_device_find(RT_LINK_HW_DEVICE_NAME);
  48. if (hw_device)
  49. {
  50. rt_device_open(hw_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX);
  51. rt_device_set_rx_indicate(hw_device, rt_link_port_rx_ind);
  52. }
  53. else
  54. {
  55. LOG_E("Not find device %s", RT_LINK_HW_DEVICE_NAME);
  56. return -RT_ERROR;
  57. }
  58. return RT_EOK;
  59. }
  60. rt_err_t rt_link_port_deinit(void)
  61. {
  62. hw_device = rt_device_find(RT_LINK_HW_DEVICE_NAME);
  63. if (hw_device)
  64. {
  65. rt_device_close(hw_device);
  66. rt_device_set_rx_indicate(hw_device, RT_NULL);
  67. }
  68. else
  69. {
  70. LOG_E("Not find device %s", RT_LINK_HW_DEVICE_NAME);
  71. return -RT_ERROR;
  72. }
  73. return RT_EOK;
  74. }