TuyaOS
tuya_lib_mqtt.h
1#ifndef __LIBEMQTT_H__
2#define __LIBEMQTT_H__
3
4#if 1
5#include <stdint.h>
6#else
7#include "espressif/c_types.h"
8#endif
9
10#define MQTT_CONF_USERNAME_LENGTH 40+1
11#ifndef MQTT_CONF_USERNAME_LENGTH
12#define MQTT_CONF_USERNAME_LENGTH 13 // Recommended by MQTT Specification (12 + '\0')
13#endif
14
15#define MQTT_CONF_PASSWORD_LENGTH 16+1
16#ifndef MQTT_CONF_PASSWORD_LENGTH
17#define MQTT_CONF_PASSWORD_LENGTH 13 // Recommended by MQTT Specification (12 + '\0')
18#endif
19
20
21#define MQTT_MSG_CONNECT 1<<4
22#define MQTT_MSG_CONNACK 2<<4
23#define MQTT_MSG_PUBLISH 3<<4
24#define MQTT_MSG_PUBACK 4<<4
25#define MQTT_MSG_PUBREC 5<<4
26#define MQTT_MSG_PUBREL 6<<4
27#define MQTT_MSG_PUBCOMP 7<<4
28#define MQTT_MSG_SUBSCRIBE 8<<4
29#define MQTT_MSG_SUBACK 9<<4
30#define MQTT_MSG_UNSUBSCRIBE 10<<4
31#define MQTT_MSG_UNSUBACK 11<<4
32#define MQTT_MSG_PINGREQ 12<<4
33#define MQTT_MSG_PINGRESP 13<<4
34#define MQTT_MSG_DISCONNECT 14<<4
35
36
42#define MQTTParseMessageType(buffer) ( *buffer & 0xF0 )
43
50#define MQTTParseMessageDuplicate(buffer) ( *buffer & 0x08 )
51
57#define MQTTParseMessageQos(buffer) ( (*buffer & 0x06) >> 1 )
58
65#define MQTTParseMessageRetain(buffer) ( *buffer & 0x01 )
66
67
78uint8_t tuya_mqtt_num_rem_len_bytes(const uint8_t* buf);
79
88uint32_t tuya_mqtt_parse_rem_len(const uint8_t* buf);
89
96uint16_t tuya_mqtt_parse_msg_id(const uint8_t* buf);
97
108uint16_t tuya_mqtt_parse_pub_topic(const uint8_t* buf, uint8_t* topic);
109
114uint16_t tuya_mqtt_parse_pub_topic_ptr(const uint8_t* buf, const uint8_t** topic_ptr);
115
126uint32_t tuya_mqtt_parse_publish_msg(const uint8_t* buf, uint8_t* msg);
127
132uint32_t tuya_mqtt_parse_pub_msg_ptr(const uint8_t* buf, const uint8_t** msg_ptr);
133
134
135typedef struct {
136 void* socket_info;
137 int (*sendBuf)(void* socket_info, const void* buf, unsigned int count);
138 // Connection info
139 char clientid[50];
140 // Auth fields
141 char username[MQTT_CONF_USERNAME_LENGTH];
142 char password[MQTT_CONF_PASSWORD_LENGTH];
143 // Will topic
144 uint8_t will_retain;
145 uint8_t will_qos;
146 uint8_t clean_session;
147 // Management fields
148 uint16_t seq;
149 uint16_t alive;
151
152
159void tuya_mqtt_init(tuya_mqtt_broker_handle_t* broker, const char* clientid);
160
168void tuya_mqtt_init_auth(tuya_mqtt_broker_handle_t* broker, const char* username, const char* password);
169
176void tuya_mqtt_set_alive(tuya_mqtt_broker_handle_t* broker, uint16_t alive);
177
185int tuya_mqtt_connect(tuya_mqtt_broker_handle_t* broker);
186
196int tuya_mqtt_disconnect(tuya_mqtt_broker_handle_t* broker);
197
198#if 0
209int mqtt_publish(tuya_mqtt_broker_handle_t* broker, const char* topic, const char* msg, uint8_t retain);
210#endif
211
225int tuya_mqtt_pub_msg_with_dup(tuya_mqtt_broker_handle_t* broker, const char* topic, const unsigned char* msg,
226 const uint32_t m_len, uint8_t retain, uint8_t qos, uint16_t message_id, uint8_t is_dup);
227
228int tuya_mqtt_pub_msg_with_qos(tuya_mqtt_broker_handle_t* broker, const char* topic, const unsigned char* msg,
229 const uint32_t m_len, uint8_t retain, uint8_t qos, uint16_t message_id);
230
231void tuya_mqtt_get_qos_msg_id(tuya_mqtt_broker_handle_t* broker, uint8_t qos, uint16_t* message_id);
232
241int tuya_mqtt_puback(tuya_mqtt_broker_handle_t* broker, uint16_t message_id);
242
251int tuya_mqtt_pubrel(tuya_mqtt_broker_handle_t* broker, uint16_t message_id);
252
262int tuya_mqtt_subscribe(tuya_mqtt_broker_handle_t* broker, const char* topic, uint16_t* message_id);
263
273int tuya_mqtt_subscribe_ext(tuya_mqtt_broker_handle_t* broker, const char* topics[], uint8_t cnt, uint16_t* message_id);
274
284int tuya_mqtt_unsubscribe(tuya_mqtt_broker_handle_t* broker, const char* topic, uint16_t* message_id);
285
295int tuya_mqtt_unsubscribe_ext(tuya_mqtt_broker_handle_t* broker, const char* topics[], uint8_t cnt, uint16_t* message_id);
296
297
305int tuya_mqtt_ping(tuya_mqtt_broker_handle_t* broker);
306
307
308#endif // __LIBEMQTT_H__
Definition: tuya_lib_mqtt.h:135