luat_mqtt.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #ifndef LUAT_MQTT_H
  2. #define LUAT_MQTT_H
  3. /**
  4. * @defgroup luatos_MQTT MQTT相关接口
  5. * @{
  6. */
  7. #define MQTT_MSG_RELEASE 0 /**< mqtt 释放资源前回调消息 */
  8. #define MQTT_MSG_TCP_TX_DONE 1 /**< mqtt tcp发送完成*/
  9. #define MQTT_MSG_TIMER_PING 2 /**< mqtt ping前回调消息 */
  10. #define MQTT_MSG_RECONNECT 3 /**< mqtt 重连前回调消息 */
  11. #define MQTT_MSG_CLOSE 4 /**< mqtt 关闭回调消息(不会再重连) */
  12. #define MQTT_ERROR_STATE_SOCKET -1
  13. #define MQTT_ERROR_STATE_DISCONNECT -2
  14. #ifndef MQTT_RECV_BUF_LEN_MAX
  15. #if defined(CHIP_EC618) || defined(CHIP_EC718)|| defined(CHIP_EC716)
  16. #define MQTT_RECV_BUF_LEN_MAX (32*1024) ///< MQTT 接收BUFF大小
  17. #else
  18. #define MQTT_RECV_BUF_LEN_MAX 4096 ///< MQTT 接收BUFF大小
  19. #endif
  20. #endif
  21. /**
  22. * @brief mqtt状态
  23. */
  24. typedef enum {
  25. MQTT_STATE_DISCONNECT , /**< mqtt 断开 */
  26. MQTT_STATE_SCONNECT , /**< mqtt socket连接中 */
  27. MQTT_STATE_MQTT , /**< mqtt socket已连接 mqtt连接中 */
  28. MQTT_STATE_READY /**< mqtt mqtt已连接 */
  29. }LUAT_MQTT_STATE_E;
  30. /**
  31. * @brief 设置MQTT客户端的配置参数
  32. */
  33. typedef struct{
  34. mqtt_broker_handle_t broker;/**< mqtt broker*/
  35. network_ctrl_t *netc; /**< mqtt netc*/
  36. luat_ip_addr_t ip_addr; /**<mqtt ip*/
  37. char host[192]; /**<mqtt host*/
  38. uint32_t buffer_offset; /**< 用于标识mqtt_packet_buffer当前有多少数据*/
  39. uint32_t rxbuff_size; /**< mqtt_packet_buffer的长度*/
  40. uint8_t *mqtt_packet_buffer;/**< 接收BUFF*/
  41. void* mqtt_cb; /**< mqtt 回调函数*/
  42. int8_t error_state; /**< mqtt 错误状态*/
  43. uint16_t remote_port; /**< 远程端口号*/
  44. uint32_t keepalive; /**< 心跳时长 单位s*/
  45. uint8_t adapter_index; /**< 适配器索引号, 似乎并没有什么用*/
  46. LUAT_MQTT_STATE_E mqtt_state; /**< mqtt状态*/
  47. uint8_t reconnect; /**< mqtt是否重连*/
  48. uint32_t reconnect_time; /**< mqtt重连时间 单位ms*/
  49. void* reconnect_timer; /**< mqtt重连定时器*/
  50. void* ping_timer; /**< mqtt_ping定时器*/
  51. int mqtt_ref; /**< 强制引用自身避免被GC*/
  52. void* userdata; /**< userdata */
  53. }luat_mqtt_ctrl_t;
  54. typedef struct{
  55. uint16_t topic_len;
  56. uint16_t payload_len;
  57. uint8_t data[];
  58. }luat_mqtt_msg_t;
  59. /**
  60. * @brief 设置MQTT服务端服务器信息、加密信息
  61. */
  62. typedef struct luat_mqtt_connopts
  63. {
  64. const char* host;/**< 服务器HOST*/
  65. uint16_t port;/**< 服务器端口*/
  66. uint8_t is_tls;/**< 是否采用tls加密*/
  67. uint8_t is_ipv6;
  68. uint8_t verify;
  69. const char* server_cert;
  70. size_t server_cert_len;
  71. const char* client_cert;
  72. size_t client_cert_len;
  73. const char* client_key;
  74. size_t client_key_len;
  75. const char* client_password;
  76. size_t client_password_len;
  77. }luat_mqtt_connopts_t;
  78. typedef void (*luat_mqtt_cb_t)(luat_mqtt_ctrl_t *luat_mqtt_ctrl, uint16_t event);
  79. /**
  80. *@brief 发起MQTT连接
  81. *@param mqtt_ctrl luatos_mqtt对象实例
  82. *@return 成功为0,其他值失败
  83. */
  84. int luat_mqtt_connect(luat_mqtt_ctrl_t *mqtt_ctrl);
  85. // static int luat_mqtt_msg_cb(luat_mqtt_ctrl_t *mqtt_ctrl);
  86. // int l_mqtt_callback(lua_State *L, void* ptr);
  87. int l_luat_mqtt_msg_cb(luat_mqtt_ctrl_t * ctrl, int arg1, int arg2);
  88. int32_t luat_mqtt_callback(void *data, void *param);
  89. LUAT_RT_RET_TYPE luat_mqtt_timer_callback(LUAT_RT_CB_PARAM);
  90. // int luat_mqtt_read_packet(luat_mqtt_ctrl_t *mqtt_ctrl);
  91. int luat_mqtt_send_packet(void* socket_info, const void* buf, unsigned int count);
  92. /**
  93. *@brief 关闭MQTT连接,如果设置了自动重连,回重新自动连接
  94. *@param mqtt_ctrl luatos_mqtt对象实例
  95. *@return 成功为0,其他值失败
  96. */
  97. void luat_mqtt_close_socket(luat_mqtt_ctrl_t *mqtt_ctrl);
  98. /**
  99. *@brief 获取MQTT连接状态
  100. *@param mqtt_ctrl luatos_mqtt对象实例
  101. *@return LUAT_MQTT_STATE_E
  102. */
  103. LUAT_MQTT_STATE_E luat_mqtt_state_get(luat_mqtt_ctrl_t *mqtt_ctrl);
  104. /**
  105. *@brief 释放MQTT资源,释放后luatos_mqtt对象不可用
  106. *@param mqtt_ctrl luatos_mqtt对象实例
  107. *@return 成功为0,其他值失败
  108. */
  109. void luat_mqtt_release_socket(luat_mqtt_ctrl_t *mqtt_ctrl);
  110. /**
  111. *@brief 初始化luatos_mqtt(初始化MQTT)
  112. *@param mqtt_ctrl luatos_mqtt对象实例
  113. *@param adapter_index 网卡类型(唯一值 NW_ADAPTER_INDEX_LWIP_GPRS)
  114. *@return 成功为0,其他值失败
  115. */
  116. int luat_mqtt_init(luat_mqtt_ctrl_t *mqtt_ctrl, int adapter_index);
  117. /**
  118. *@brief 设置MQTT服务器信息、加密信息函数
  119. *@param mqtt_ctrl luatos_mqtt对象实例
  120. *@param opts 结构体MQTT服务器信息、加密信息函数
  121. *@return 成功为0,其他值失败
  122. */
  123. int luat_mqtt_set_connopts(luat_mqtt_ctrl_t *mqtt_ctrl, luat_mqtt_connopts_t *opts);
  124. /**
  125. *@brief 设置MQTT服务器接收buff大小
  126. *@param mqtt_ctrl luatos_mqtt对象实例
  127. *@param rxbuff_size 接收buff大小
  128. *@return 成功为0,其他值失败
  129. */
  130. int luat_mqtt_set_rxbuff_size(luat_mqtt_ctrl_t *mqtt_ctrl, uint32_t rxbuff_size);
  131. /**
  132. *@brief 设置MQTT服务器信息、加密信息函数
  133. *@param mqtt_ctrl luatos_mqtt对象实例
  134. *@param opts 结构体MQTT服务器信息、加密信息函数
  135. *@return 成功为0,其他值失败
  136. */
  137. /**
  138. *@brief 手动发起重连
  139. *@param mqtt_ctrl luatos_mqtt对象实例
  140. *@return 成功为0,其他值失败
  141. */
  142. int luat_mqtt_reconnect(luat_mqtt_ctrl_t *mqtt_ctrl);
  143. /**
  144. *@brief 发送ping包
  145. *@param mqtt_ctrl luatos_mqtt对象实例
  146. *@return 成功为0,其他值失败
  147. */
  148. int luat_mqtt_ping(luat_mqtt_ctrl_t *mqtt_ctrl);
  149. /**
  150. *@brief 设置遗嘱消息
  151. *@param mqtt_ctrl luatos_mqtt对象实例
  152. *@param topic 遗嘱消息的topic
  153. *@param payload 遗嘱消息的payload
  154. *@param payload_len 遗嘱消息payload的长度
  155. *@param qos 遗嘱消息的qos
  156. *@param retain 遗嘱消息的retain
  157. *@return 成功为0,其他值失败
  158. */
  159. 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);
  160. /**
  161. *@brief 设置MQTT事件回调函数
  162. *@param mqtt_ctrl luatos_mqtt对象实例
  163. *@param mqtt_cb 回调函数
  164. *@return 成功为0,其他值失败
  165. */
  166. int luat_mqtt_set_cb(luat_mqtt_ctrl_t *mqtt_ctrl, luat_mqtt_cb_t mqtt_cb);
  167. /** @}*/
  168. #endif