uart_framework.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. void (*rs485_txd)(void);
  15. void (*rs485_rxd)(void);
  16. };
  17. struct uart_framework
  18. {
  19. rt_device_t uart_device;
  20. rt_uint8_t *rx_buf;
  21. rt_uint8_t rx_ch;
  22. rt_size_t rx_size;
  23. rt_sem_t rx_sem;
  24. rt_mutex_t dev_lock;
  25. rt_tick_t last_tick;
  26. rt_tick_t cur_tick;
  27. rt_tick_t send_tick;
  28. struct uart_framework_cfg cfg;
  29. };
  30. typedef struct uart_framework *uart_framework_t;
  31. uart_framework_t uart_framework_create(struct uart_framework_cfg *cfg);
  32. rt_size_t uart_framework_send(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  33. rt_size_t uart_framework_send_take(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  34. rt_size_t uart_framework_send_take_release(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  35. rt_err_t uart_framework_receive(uart_framework_t uf, rt_uint32_t timeout_ms,
  36. rt_err_t (*frame_handler)(rt_uint8_t *data, rt_size_t size), rt_uint8_t *out, rt_size_t out_max_size);
  37. rt_err_t uart_framework_receive_release(uart_framework_t uf, rt_uint32_t timeout_ms,
  38. rt_err_t (*frame_handler)(rt_uint8_t *data, rt_size_t size), rt_uint8_t *out, rt_size_t out_max_size);
  39. rt_err_t uart_framework_receive_take_release(uart_framework_t uf, rt_uint32_t timeout_ms,
  40. rt_err_t (*frame_handler)(rt_uint8_t *data, rt_size_t size), rt_uint8_t *out, rt_size_t out_max_size);
  41. #endif /* _UART_FRAMEWORK_H_ */