luat_uart.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #ifndef LUAT_UART_H
  2. #define LUAT_UART_H
  3. #include "luat_msgbus.h"
  4. //校验位
  5. #define LUAT_PARITY_NONE 0
  6. #define LUAT_PARITY_ODD 1
  7. #define LUAT_PARITY_EVEN 2
  8. //高低位顺序
  9. #define LUAT_BIT_ORDER_LSB 0
  10. #define LUAT_BIT_ORDER_MSB 1
  11. //停止位
  12. #define LUAT_0_5_STOP_BITS 0xf0
  13. #define LUAT_1_5_STOP_BITS 0xf1
  14. #define LUAT_VUART_ID_0 0x20
  15. typedef struct luat_uart {
  16. int id; //串口编号
  17. int baud_rate; //波特率
  18. uint8_t data_bits; //数据位
  19. uint8_t stop_bits; //停止位 特别规定:LUAT_0_5_STOP_BITS:0.5位停止位,LUAT_1_5_STOP_BITS:1.5位停止位
  20. uint8_t bit_order; //高低位
  21. uint8_t parity; //奇偶校验位
  22. size_t bufsz; // 接收数据缓冲区大小
  23. uint32_t pin485; //转换485的pin, 如果没有则是0xffffffff
  24. uint32_t delay; //延迟时间,单位us
  25. uint8_t rx_level; //接收方向的电平
  26. } luat_uart_t;
  27. int l_uart_handler(lua_State *L, void* ptr);
  28. int luat_uart_setup(luat_uart_t* uart);
  29. int luat_uart_write(int uartid, void* data, size_t length);
  30. int luat_uart_read(int uartid, void* buffer, size_t length);
  31. int luat_uart_close(int uartid);
  32. int luat_uart_exist(int uartid);
  33. #ifdef LUAT_FORCE_WIN32
  34. int luat_uart_list(uint8_t* list, size_t buff_len);
  35. #endif
  36. int luat_setup_cb(int uartid, int received, int sent);
  37. /*
  38. 上报接收数据中断的逻辑:
  39. 1.串口初始化时,新建一个缓冲区
  40. 2.可以考虑多为用户申请几百字节的缓冲长度,用户处理时防止丢包
  41. 3.每次串口收到数据时,先存入缓冲区,记录长度
  42. 4.遇到以下情况时,再调用串口中断
  43. a)缓冲区满(帮用户多申请的的情况)/缓冲区只剩几百字节(按实际长度申请缓冲区的情况)
  44. b)收到fifo接收超时中断(此时串口数据应该是没有继续收了)
  45. 5.触发收到数据中断时,返回的数据应是缓冲区的数据
  46. 6.关闭串口时,释放缓冲区资源
  47. */
  48. #endif