115 lines
3.0 KiB
C
115 lines
3.0 KiB
C
#ifndef __MQTT_UTILS_H__
|
|
#define __MQTT_UTILS_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <semaphore.h>
|
|
|
|
#include "MQTTAsync.h"
|
|
#include "MQTTClientPersistence.h"
|
|
#include "json_utils.h"
|
|
|
|
#ifndef offsetof
|
|
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
|
#endif
|
|
|
|
#ifndef container_of
|
|
/**
|
|
* container_of - cast a member of a structure out to the containing structure
|
|
* @ptr: the pointer to the member.
|
|
* @type: the type of the container struct this is embedded in.
|
|
* @member: the name of the member within the struct.
|
|
*
|
|
*/
|
|
#define container_of(ptr, type, member) ({ \
|
|
const typeof(((type *)0)->member) * __mptr = (ptr); \
|
|
(type *)((char *)__mptr - offsetof(type, member)); })
|
|
#endif
|
|
|
|
typedef struct
|
|
{
|
|
MQTTAsync client;
|
|
MQTTAsync_responseOptions sub_opts;
|
|
MQTTAsync_responseOptions pub_opts;
|
|
|
|
sem_t sem_connect; //mqtt connect semaphore
|
|
|
|
/* MQTT options */
|
|
enum MQTTASYNC_TRACE_LEVELS tracelevel;
|
|
char host[64]; //mqtt broker ip
|
|
int port; //mqtt broker port
|
|
char username[64]; //user name
|
|
char password[64]; //user password
|
|
int keepalive; //mqtt keepalive
|
|
int retain; //mqtt retain
|
|
char clientid[256]; //mqtt client id
|
|
char productcode[64]; //mqtt productcode
|
|
int MQTTVersion;
|
|
|
|
/* will options */
|
|
char* will_topic;
|
|
char* will_payload;
|
|
int will_qos;
|
|
int will_retain;
|
|
|
|
/* TLS options */
|
|
char protocol[64]; //tcp ssl wss
|
|
int insecure;
|
|
char* capath;
|
|
char* cert;
|
|
char* cafile;
|
|
char* key;
|
|
char* keypass;
|
|
char* ciphers;
|
|
}mqtt_utils_t;
|
|
|
|
extern mqtt_utils_t mqtt_config;
|
|
extern void PutDataIntoMQueue(char *payload);
|
|
|
|
typedef struct{
|
|
char msg_messageId[32];
|
|
char msg_fwVersion[32];
|
|
char msg_fwUrl[256];
|
|
int msg_taskId;
|
|
}mqtt_parm_download_t;
|
|
|
|
typedef struct
|
|
{
|
|
char msg_deviceId[32];
|
|
char msg_messageId[64];
|
|
char msg_key[32];
|
|
char msg_devName[32];
|
|
char msg_taskId[32];
|
|
char msg_groupNo[4];
|
|
char msg_time[32];
|
|
char msg_ext1[32];
|
|
char msg_ext2[32];
|
|
char msg_sn[32];
|
|
char msg_zipPath[512]; // 添加OTA固件下载路径字段
|
|
char msg_md5[64]; // 添加OTA固件MD5校验字段
|
|
char msg_type[16]; // 添加OTA任务类型字段
|
|
char msg_version[32]; // 添加OTA固件版本字段
|
|
int msg_opNumber;
|
|
int msg_action;
|
|
int msg_color;
|
|
int msg_duration;
|
|
}mqtt_parm_t;
|
|
|
|
extern void mqtt_net_failure(int *failure_times);
|
|
extern int mqtt_utils_init(mqtt_utils_t *mqtt_utils);
|
|
extern int get_trace_level_by_name(char *name);
|
|
extern int mqtt_utils_subscribe(mqtt_utils_t *mqtt_utils, char *topic, int qos);
|
|
extern int mqtt_utils_publish(mqtt_utils_t *mqtt_utils, char *topic, int qos, const char *data, int datalen);
|
|
extern int mqtt_utils_uninit(mqtt_utils_t *mqtt_utils);
|
|
extern void mqtt_utils_check_connection_status(void);
|
|
extern void mqtt_utils_try_different_topics(void);
|
|
void mqtt_server_reply(char *sn,char *msg_id,json_object *functions);
|
|
void mqtt_server_events_report(char *sn,char *msg_id,json_object *events,char *productid);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|