uart_framework.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * Change Logs:
  3. * Date Author Notes
  4. * 2024-05-24 Slyant the first version
  5. */
  6. #ifndef _UART_FRAMEWORK_H_
  7. #define _UART_FRAMEWORK_H_
  8. struct uart_framework_cfg
  9. {
  10. char *uart_name;
  11. rt_size_t max_frame_size;
  12. rt_uint32_t frame_interval_ms;
  13. rt_uint32_t send_interval_ms;
  14. rt_err_t (*rx_ind)(rt_device_t dev, rt_size_t size);
  15. void (*rs485_txd)(void);
  16. void (*rs485_rxd)(void);
  17. };
  18. struct uart_framework
  19. {
  20. rt_device_t uart_device;
  21. rt_uint8_t *rx_buf;
  22. rt_uint8_t rx_ch;
  23. rt_size_t rx_size;
  24. rt_sem_t rx_sem;
  25. rt_mutex_t dev_lock;
  26. rt_tick_t last_tick;
  27. rt_tick_t cur_tick;
  28. rt_tick_t send_tick;
  29. struct uart_framework_cfg cfg;
  30. };
  31. typedef struct uart_framework* uart_framework_t;
  32. uart_framework_t uart_framework_create(struct uart_framework_cfg *cfg);
  33. rt_size_t uart_framework_send(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  34. rt_size_t uart_framework_send_take(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  35. rt_size_t uart_framework_send_take_release(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  36. rt_err_t uart_framework_receive(uart_framework_t uf, rt_uint32_t timeout_ms,
  37. rt_err_t (*frame_handler)(rt_uint8_t *data, rt_size_t size), rt_uint8_t *out, rt_size_t out_max_size);
  38. rt_err_t uart_framework_receive_release(uart_framework_t uf, rt_uint32_t timeout_ms,
  39. rt_err_t (*frame_handler)(rt_uint8_t *data, rt_size_t size), rt_uint8_t *out, rt_size_t out_max_size);
  40. rt_err_t uart_framework_receive_take_release(uart_framework_t uf, rt_uint32_t timeout_ms,
  41. rt_err_t (*frame_handler)(rt_uint8_t *data, rt_size_t size), rt_uint8_t *out, rt_size_t out_max_size);
  42. #endif /* _UART_FRAMEWORK_H_ */