uart_framework.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. rt_bool_t is_waiting_response;
  30. struct uart_framework_cfg cfg;
  31. };
  32. typedef struct uart_framework *uart_framework_t;
  33. uart_framework_t uart_framework_create(struct uart_framework_cfg *cfg);
  34. rt_size_t uart_framework_send(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  35. rt_size_t uart_framework_send_take(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  36. rt_size_t uart_framework_send_take_release(uart_framework_t uf, rt_uint8_t *data, rt_size_t size);
  37. rt_err_t uart_framework_receive(uart_framework_t uf, rt_uint32_t timeout_ms, rt_uint8_t *out, rt_size_t *out_size,
  38. rt_size_t out_max_size);
  39. rt_err_t uart_framework_receive_release(uart_framework_t uf, rt_uint32_t timeout_ms, rt_uint8_t *out,
  40. rt_size_t *out_size, rt_size_t out_max_size);
  41. rt_err_t uart_framework_receive_take_release(uart_framework_t uf, rt_uint32_t timeout_ms, rt_uint8_t *out,
  42. rt_size_t *out_size, rt_size_t out_max_size);
  43. rt_err_t uart_framework_receive_without_waiting_response(uart_framework_t uf,
  44. void (*frame_handler_callback)(rt_uint8_t *data, rt_size_t size), rt_uint8_t *out, rt_size_t *out_size,
  45. rt_size_t out_max_size);
  46. #endif /* _UART_FRAMEWORK_H_ */