luat_mqtt.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #ifndef LUAT_MQTT_H
  2. #define LUAT_MQTT_H
  3. /**
  4. * @defgroup luatos_MQTT MQTT相关接口
  5. * @{
  6. */
  7. #define MQTT_MSG_RELEASE 0
  8. #define MQTT_MSG_TIMER_PING 2
  9. #define MQTT_MSG_RECONNECT 3
  10. #define MQTT_MSG_CLOSE 4
  11. #ifdef CHIP_EC618
  12. #define MQTT_RECV_BUF_LEN_MAX 8192 ///< MQTT 接收BUFF大小
  13. #else
  14. #define MQTT_RECV_BUF_LEN_MAX 4096 ///< MQTT 接收BUFF大小
  15. #endif
  16. /**
  17. * @brief 设置MQTT客户端的配置参数
  18. */
  19. typedef struct{
  20. mqtt_broker_handle_t broker;/**< mqtt broker*/
  21. network_ctrl_t *netc; /**< mqtt netc*/
  22. luat_ip_addr_t ip_addr; /**<mqtt ip*/
  23. char host[192]; /**<mqtt host*/
  24. uint16_t buffer_offset; /**< 用于标识mqtt_packet_buffer当前有多少数据*/
  25. uint8_t mqtt_packet_buffer[MQTT_RECV_BUF_LEN_MAX + 4];/**< 接收BUFF*/
  26. int mqtt_cb; /**< mqtt 回调函数*/
  27. uint16_t remote_port; /**< 远程端口号*/
  28. uint32_t keepalive; /**< 心跳时长 单位s*/
  29. uint8_t adapter_index; /**< 适配器索引号, 似乎并没有什么用*/
  30. uint8_t mqtt_state; /**< mqtt状态*/
  31. uint8_t reconnect; /**< mqtt是否重连*/
  32. uint32_t reconnect_time; /**< mqtt重连时间 单位ms*/
  33. void* reconnect_timer; /**< mqtt重连定时器*/
  34. void* ping_timer; /**< mqtt_ping定时器*/
  35. int mqtt_ref; /**< 强制引用自身避免被GC*/
  36. void* userdata; /**< userdata */
  37. }luat_mqtt_ctrl_t;
  38. typedef struct{
  39. uint16_t topic_len;
  40. uint16_t payload_len;
  41. uint8_t data[];
  42. }luat_mqtt_msg_t;
  43. /**
  44. * @brief 设置MQTT服务端服务器信息、加密信息
  45. */
  46. typedef struct luat_mqtt_connopts
  47. {
  48. const char* host;/**< 服务器HOST*/
  49. uint16_t port;/**< 服务器端口*/
  50. uint8_t is_tls;/**< 是否采用tls加密*/
  51. uint8_t is_ipv6;
  52. uint8_t verify;
  53. const char* server_cert;
  54. size_t server_cert_len;
  55. const char* client_cert;
  56. size_t client_cert_len;
  57. const char* client_key;
  58. size_t client_key_len;
  59. const char* client_password;
  60. size_t client_password_len;
  61. }luat_mqtt_connopts_t;
  62. typedef void (*luat_mqtt_cb_t)(luat_mqtt_ctrl_t *luat_mqtt_ctrl, uint16_t event);
  63. /**
  64. *@brief 发起MQTT连接
  65. *@param mqtt_ctrl luatos_mqtt对象实例
  66. *@return 成功为0,其他值失败
  67. */
  68. int luat_mqtt_connect(luat_mqtt_ctrl_t *mqtt_ctrl);
  69. // static int luat_mqtt_msg_cb(luat_mqtt_ctrl_t *mqtt_ctrl);
  70. // int l_mqtt_callback(lua_State *L, void* ptr);
  71. int l_luat_mqtt_msg_cb(luat_mqtt_ctrl_t * ctrl, int arg1, int arg2);
  72. int32_t luat_mqtt_callback(void *data, void *param);
  73. LUAT_RT_RET_TYPE luat_mqtt_timer_callback(LUAT_RT_CB_PARAM);
  74. // int luat_mqtt_read_packet(luat_mqtt_ctrl_t *mqtt_ctrl);
  75. int luat_mqtt_send_packet(void* socket_info, const void* buf, unsigned int count);
  76. /**
  77. *@brief 关闭MQTT连接,如果设置了自动重连,回重新自动连接
  78. *@param mqtt_ctrl luatos_mqtt对象实例
  79. *@return 成功为0,其他值失败
  80. */
  81. void luat_mqtt_close_socket(luat_mqtt_ctrl_t *mqtt_ctrl);
  82. void luat_mqtt_release_socket(luat_mqtt_ctrl_t *mqtt_ctrl);
  83. /**
  84. *@brief 初始化luatos_mqtt(初始化MQTT)
  85. *@param mqtt_ctrl luatos_mqtt对象实例
  86. *@param adapter_index 网卡类型(唯一值 NW_ADAPTER_INDEX_LWIP_GPRS)
  87. *@return 成功为0,其他值失败
  88. */
  89. int luat_mqtt_init(luat_mqtt_ctrl_t *mqtt_ctrl, int adapter_index);
  90. /**
  91. *@brief 设置MQTT服务器信息、加密信息函数
  92. *@param mqtt_ctrl luatos_mqtt对象实例
  93. *@param opts 结构体MQTT服务器信息、加密信息函数
  94. *@return 成功为0,其他值失败
  95. */
  96. int luat_mqtt_set_connopts(luat_mqtt_ctrl_t *mqtt_ctrl, luat_mqtt_connopts_t *opts);
  97. /**
  98. *@brief 设置MQTT服务器信息、加密信息函数
  99. *@param mqtt_ctrl luatos_mqtt对象实例
  100. *@param opts 结构体MQTT服务器信息、加密信息函数
  101. *@return 成功为0,其他值失败
  102. */
  103. /**
  104. *@brief 手动发起重连
  105. *@param mqtt_ctrl luatos_mqtt对象实例
  106. *@return 成功为0,其他值失败
  107. */
  108. int luat_mqtt_reconnect(luat_mqtt_ctrl_t *mqtt_ctrl);
  109. int luat_mqtt_ping(luat_mqtt_ctrl_t *mqtt_ctrl);
  110. /**
  111. *@brief 设置遗嘱消息
  112. *@param mqtt_ctrl luatos_mqtt对象实例
  113. *@param topic 遗嘱消息的topic
  114. *@param payload 遗嘱消息的payload
  115. *@param payload_len 遗嘱消息payload的长度
  116. *@param qos 遗嘱消息的qos
  117. *@param retain 遗嘱消息的retain
  118. *@return 成功为0,其他值失败
  119. */
  120. int luat_mqtt_set_will(luat_mqtt_ctrl_t *mqtt_ctrl, const char* topic, const char* payload, size_t payload_len, uint8_t qos, size_t retain);
  121. /**
  122. *@brief 设置MQTT事件回调函数
  123. *@param mqtt_ctrl luatos_mqtt对象实例
  124. *@param mqtt_cb 回调函数
  125. *@return 成功为0,其他值失败
  126. */
  127. int luat_mqtt_set_cb(luat_mqtt_ctrl_t *mqtt_ctrl, luat_mqtt_cb_t mqtt_cb);
  128. /** @}*/
  129. #endif