TuyaOS
tuya_svc_mqtt_client.h
浏览该文件的文档.
1
20#ifndef __TUYA_SVC_MQTT_CLIENT_H__
21#define __TUYA_SVC_MQTT_CLIENT_H__
22
23#include "tuya_cloud_types.h"
24#include "tuya_svc_netmgr.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30#ifndef QOS1_PUBACK_TIMEOUT
31#define QOS1_PUBACK_TIMEOUT 3 // qos1 publish respond timeout(s)
32#endif
33
34#ifndef QOS1_PUBLISH_SLOT_CNT
35#define QOS1_PUBLISH_SLOT_CNT 8 // slot count waiting for puback(new publish will be refused)
36#endif
37
38#ifndef QOS1_PUBACK_TIMEOUT_LIMIT
39#define QOS1_PUBACK_TIMEOUT_LIMIT 3 // continuous timeout count for qos1 publish(mqtt will close and reconnect)
40#endif
41
42#ifndef MAX_RANDOM_DELAY_BEFORE_RECONNECT
43#define MAX_RANDOM_DELAY_BEFORE_RECONNECT (5*60) // max random delay when connection broken(s)
44#endif
45
46#ifndef MQTT_HEATBEAT_INTERVAL
47#define MQTT_HEATBEAT_INTERVAL (60) // mqtt heartbeat interval(s)
48#endif
49
50#ifndef STACK_SIZE_MQTT_CLIENT
51#define STACK_SIZE_MQTT_CLIENT (4*1024) // stack size of mqtt client(Byte)
52#endif
53
54#ifndef MQTT_RECV_BUF_SIZE
55#define MQTT_RECV_BUF_SIZE (512) // size of mqtt recv buffer(Byte)
56#endif
57
58#ifndef MQTT_MAX_MESSGAE_SIZE
59#define MQTT_MAX_MESSGAE_SIZE (4096) // max size of mqtt msg(Byte, RTOS only)
60#endif
61
62#ifndef MQTT_RECV_SELECT_TIMEOUT
63#define MQTT_RECV_SELECT_TIMEOUT (3000) // powser saving need consider (ms)
64#endif
65
66#define MAX_BACKOFF_COUNT (8) //backoff array size
67typedef VOID* MQTT_HANDLE; //Definition of MQTT client handler
68
76typedef VOID (*CB_MQTT_DATA_RECV)(CONST CHAR_T *topic, BYTE_T *data, UINT_T len);
77
81typedef struct {
86
90 CHAR_T *client_id;
92 CHAR_T *user_name;
94 CHAR_T *passwd;
96 UINT_T heartbeat;
97
100} mqtt_ctx_t;
101
105typedef enum {
106 BACKOFF_RANDOM, // default(random % MAX_RANDOM_DELAY_BEFORE_RECONNECT)
107 BACKOFF_LOOP_CYCLE, // (1,2,3) ==> 1->2->3->1->2->3
108 BACKOFF_LOOP_LAST // (1,2,3) ==> 1->2->3->3->3->3
109} backoff_e;
110
111typedef struct {
112 backoff_e type;
113 union {
114 UINT_T random; //override MAX_RANDOM_DELAY_BEFORE_RECONNECT(unit s)
115 struct {
116 UINT_T arr[MAX_BACKOFF_COUNT]; //(unit s)
117 BYTE_T count;
118 }loop;
119 }data;
121
125typedef enum {
126 MQTT_CFG_LINKAGE, // linkage used for connection (netmgr_linkage_t*) (default: current active linkage)
127 MQTT_CFG_HEARTBEAT, // heartbeat interval (UINT:s) (default: MQTT_HEATBEAT_INTERVAL)
128 MQTT_CFG_SLEEP_WITHOUT_PERMIT, // (UINT:s)
129 MQTT_CFG_SOCKET_FD, // get mqtt client socket fd (readonly) (INT_T)
130 MQTT_CFG_DISCONNECT_WHEN_STOP, // disconnect from broker immediately when stop is called (BOOL_T) (default: true)
131 MQTT_CFG_BACKOFF_STRATEGY, // backoff strategy when connection broken (mqtt_backoff_t*)
132
133 MQTT_CFG_MAX
134} mqtt_cfg_e;
135
142typedef VOID (*CB_MQTT_PUB_INFORM)(OPERATE_RET op_ret, VOID *ctx);
143
147typedef struct {
151 BYTE_T qos;
153 BYTE_T *data;
155 UINT_T len;
157 UINT_T timeout;
161 VOID *ctx;
162} mqtt_msg_t;
163
167typedef struct {
169 CHAR_T **topics;
171 BYTE_T cnt;
177
181typedef VOID (*CB_MQTT_CONNECTED)(VOID);
185typedef VOID (*CB_MQTT_DISCONNECTED)(VOID);
191typedef VOID (*CB_MQTT_CONNECT_DENY)(BYTE_T deny_times);
192
201OPERATE_RET tuya_svc_mqtt_client_create(mqtt_ctx_t *ctx, MQTT_HANDLE *handle);
202
210OPERATE_RET tuya_svc_mqtt_client_destroy(MQTT_HANDLE handle);
211
219OPERATE_RET tuya_svc_mqtt_client_start(MQTT_HANDLE handle);
220
228OPERATE_RET tuya_svc_mqtt_client_stop(MQTT_HANDLE handle);
229
237OPERATE_RET tuya_svc_mqtt_client_restart(MQTT_HANDLE handle);
238
246OPERATE_RET tuya_svc_mqtt_client_pause(MQTT_HANDLE handle);
247
255OPERATE_RET tuya_svc_mqtt_client_resume(MQTT_HANDLE handle);
256
267OPERATE_RET tuya_svc_mqtt_client_register_cb(MQTT_HANDLE handle, CB_MQTT_CONNECTED cb_connected,
268 CB_MQTT_DISCONNECTED cb_disconnected, CB_MQTT_CONNECT_DENY cb_connect_deny);
269
277BOOL_T tuya_svc_mqtt_client_is_connected(MQTT_HANDLE handle);
278
288OPERATE_RET tuya_svc_mqtt_client_set_cfg(MQTT_HANDLE handle, mqtt_cfg_e cfg, VOID* data);
289
299OPERATE_RET tuya_svc_mqtt_client_get_cfg(MQTT_HANDLE handle, mqtt_cfg_e cfg, VOID* data);
300
309OPERATE_RET tuya_svc_mqtt_client_publish(MQTT_HANDLE handle, mqtt_msg_t* msg);
310
319OPERATE_RET tuya_svc_mqtt_client_subscribe(MQTT_HANDLE handle, mqtt_subscribe_t* sub);
320
329OPERATE_RET tuya_svc_mqtt_client_unsubscribe(MQTT_HANDLE handle, mqtt_subscribe_t* sub);
330
331#ifdef __cplusplus
332}
333#endif
334
335#endif //__TUYA_SVC_MQTT_CLIENT_H__
Definition: tuya_svc_mqtt_client.h:111
Definition of mqtt client context
Definition: tuya_svc_mqtt_client.h:81
UINT_T heartbeat
Definition: tuya_svc_mqtt_client.h:96
CHAR_T * broker_domain
Definition: tuya_svc_mqtt_client.h:83
CHAR_T * passwd
Definition: tuya_svc_mqtt_client.h:94
CHAR_T * user_name
Definition: tuya_svc_mqtt_client.h:92
CB_MQTT_DATA_RECV cb_data_recv
Definition: tuya_svc_mqtt_client.h:99
UINT_T broker_port
Definition: tuya_svc_mqtt_client.h:85
CHAR_T * subcribe_topic
Definition: tuya_svc_mqtt_client.h:88
CHAR_T * client_id
Definition: tuya_svc_mqtt_client.h:90
Definition of mqtt msg to publish
Definition: tuya_svc_mqtt_client.h:147
BYTE_T qos
Definition: tuya_svc_mqtt_client.h:151
CHAR_T * publish_topic
Definition: tuya_svc_mqtt_client.h:149
UINT_T timeout
Definition: tuya_svc_mqtt_client.h:157
CB_MQTT_PUB_INFORM cb_pub_inform
Definition: tuya_svc_mqtt_client.h:159
BYTE_T * data
Definition: tuya_svc_mqtt_client.h:153
UINT_T len
Definition: tuya_svc_mqtt_client.h:155
VOID * ctx
Definition: tuya_svc_mqtt_client.h:161
Definition of mqtt subscribe
Definition: tuya_svc_mqtt_client.h:167
CHAR_T ** topics
Definition: tuya_svc_mqtt_client.h:169
BYTE_T cnt
Definition: tuya_svc_mqtt_client.h:171
BOOL_T auto_resub
Definition: tuya_svc_mqtt_client.h:175
CB_MQTT_DATA_RECV cb_data_recv
Definition: tuya_svc_mqtt_client.h:173
backoff_e
Backoff strategy for reconnection when broken
Definition: tuya_svc_mqtt_client.h:105
OPERATE_RET tuya_svc_mqtt_client_set_cfg(MQTT_HANDLE handle, mqtt_cfg_e cfg, VOID *data)
Get cfg of mqtt client
OPERATE_RET tuya_svc_mqtt_client_restart(MQTT_HANDLE handle)
Restart mqtt client (or reconnect to broker when disconnected)
OPERATE_RET tuya_svc_mqtt_client_unsubscribe(MQTT_HANDLE handle, mqtt_subscribe_t *sub)
Unsubcribe topics within one mqtt request
VOID(* CB_MQTT_CONNECTED)(VOID)
MQTT client is connected to broker
Definition: tuya_svc_mqtt_client.h:181
OPERATE_RET tuya_svc_mqtt_client_get_cfg(MQTT_HANDLE handle, mqtt_cfg_e cfg, VOID *data)
Get cfg of mqtt client
VOID(* CB_MQTT_DISCONNECTED)(VOID)
MQTT client is disconnected from broker
Definition: tuya_svc_mqtt_client.h:185
OPERATE_RET tuya_svc_mqtt_client_create(mqtt_ctx_t *ctx, MQTT_HANDLE *handle)
Create mqtt client
VOID(* CB_MQTT_CONNECT_DENY)(BYTE_T deny_times)
MQTT client is not permited to connect to broker
Definition: tuya_svc_mqtt_client.h:191
OPERATE_RET tuya_svc_mqtt_client_start(MQTT_HANDLE handle)
Start mqtt client (or reconnect to broker when disconnected)
BOOL_T tuya_svc_mqtt_client_is_connected(MQTT_HANDLE handle)
Mqtt broker is connected or not
mqtt_cfg_e
Definition of mqtt cfg type
Definition: tuya_svc_mqtt_client.h:125
OPERATE_RET tuya_svc_mqtt_client_resume(MQTT_HANDLE handle)
Resume mqtt client
OPERATE_RET tuya_svc_mqtt_client_stop(MQTT_HANDLE handle)
Stop mqtt client (disconnect from mqtt broker)
OPERATE_RET tuya_svc_mqtt_client_subscribe(MQTT_HANDLE handle, mqtt_subscribe_t *sub)
Subcribe topics within one mqtt request
OPERATE_RET tuya_svc_mqtt_client_register_cb(MQTT_HANDLE handle, CB_MQTT_CONNECTED cb_connected, CB_MQTT_DISCONNECTED cb_disconnected, CB_MQTT_CONNECT_DENY cb_connect_deny)
Register event handers of MQTT client
OPERATE_RET tuya_svc_mqtt_client_publish(MQTT_HANDLE handle, mqtt_msg_t *msg)
Publish mqtt msg to broker
OPERATE_RET tuya_svc_mqtt_client_pause(MQTT_HANDLE handle)
Pause mqtt client
OPERATE_RET tuya_svc_mqtt_client_destroy(MQTT_HANDLE handle)
Close and destroy mqtt client
VOID(* CB_MQTT_DATA_RECV)(CONST CHAR_T *topic, BYTE_T *data, UINT_T len)
Callback when recv msg from broker
Definition: tuya_svc_mqtt_client.h:76
VOID(* CB_MQTT_PUB_INFORM)(OPERATE_RET op_ret, VOID *ctx)
Async callback that indicates QOS1 publish success or not.
Definition: tuya_svc_mqtt_client.h:142
TUYA network manager service