Mqtt

>w## Notice > * please include the header file "mq.h" when you need to use mqtt. `#include "mq.h"` >i## data structure ``` typedef struct { unsigned char is_spt_offline_msg; /*!< support offline msg 1:support 0:not support */ char *offline_topic; /*!< offline topic */ char *offline_payload; /*!< offline payload */ } mq_offline_param_t; typedef struct { MQTTAsync client; /*!< connect client */ char *url; /*!< url */ unsigned int port; /*!< port */ char *client_id; /*!< client id */ char *group_id; /*!< group id */ char *user_name; /*!< user name */ char *user_passwd; /*!< user passwd */ unsigned int keep_interval; /*!< keep interval */ char *subscribed_topic; /*!< subscribed topic */ char *published_topic; /*!< published topic */ mq_offline_param_t offline_param; /*!< offline param */ pSuccess onconnect; /*!< onconnect callback */ pMessgeArrived memsge_arrived; /*!< memsge_arrived callback*/ pSuccess onpublish; /*!< on publish callback */ pSuccess onsubcribe; /*!< on subcribe callback*/ pIdle onidle; /*!< on idle callback 0:success !0:failture*/ pIdle onidlestatus; /*!< on idle status callback,return 1:idle 0:stop*/ } mq_param_t; ``` >i## mq_init ### Prototype `int mq_init(const mq_param_t* param);` ### Function * mq init ### Parameter |Name|Type|description| |-|-|-| |param|mq_param_t*|param for mq init| ### Retval |Value|Type|Description| |-|-|-| |=0|int|success| |<0|int|fail| >i## mq_send_message ### Prototype `int mq_send_message(int qos, const unsigned char *payload, unsigned int payload_len);` ### Function * mq send message ### Parameter |Name|Type|description| |-|-|-| |qos|int| Quality of Service 0,1,2| |payload|const unsigned char *| send message data| |payload_len| unsigned int|send message len| ### Retval |Value|Type|Description| |-|-|-| |=0|int|success| |<0|int|fail| >i## mq_get_connect_status ### Prototype `int mq_get_connect_status(void);` ### Function * mq get connect status ### Retval |Value|Type|Description| |-|-|-| |=0|int|success| |<0|int|fail| >s## Example ``` #define TOPIC_UPLINK "MQ_upload_MdmService" #define TOPIC_DOWNLINK "MQ_public_MdmService" #define TOPIC_OFFLINE "$SYS/getOfflineMsg" #define PAYLOAD_OFFLINE "{\"maxPushNum\":\"20\", \"pushOrder\":\"DESC\"}" static mq_param_t g_Param; static char client_id[64] = {0}; static char* get_dsn(char* buf, int len, const char* def) { memset(buf, 0, len); if (GetDSN((unsigned char *) buf, len) == 0) { return buf; } return def; } static char* mq_get_server_url(void) { return "post-cn-0pp0jkmhe0b.mqtt.aliyuncs.com"; } static int mq_get_server_port(void) { return 1883; } static char* mq_get_group_id(void) { return "GID_MdmService"; } static char* mq_get_user_name(void) { return "LTAI6tnHkvGWicD5"; } static char* mq_get_user_password(void) { return "OwPWw6Bk1XHPi9Pp+RZDERyorAc="; } static char* mq_get_client_id(void) { if (strlen(client_id) == 0) { return get_dsn(client_id, sizeof(client_id), NULL); } return client_id; } static int mq_get_keep_alive_interval(void) { return 60; } static void mq_onconnect(void) { LOGD("%s:: connect success \n", __FUNCTION__); } static void mq_onsubcribe(void) { LOGD("%s:: success %d\n", __FUNCTION__); } static void mq_onpublish(void) { LOGD("%s:: success %d\n", __FUNCTION__); } static void mq_messge_arrived(char *topicName, int topicLen, char *payload, int payloadLen) { LOGD("%s:: recv message from %s ,body is %s\n", __FUNCTION__, topicName, (char *)payload); } static int mq_idle_status(void) { if (GetSysStatus() && (NetDeviceGetConnectionStatus() == 1)) { return 1; } return 0; } int Mqtt_Init(void) { int ret = SUCCESS; memset(&g_Param, 0, sizeof(g_Param)); g_Param.url = mq_get_server_url(); g_Param.port = mq_get_server_port(); g_Param.client_id = mq_get_client_id(); g_Param.group_id = mq_get_group_id(); g_Param.user_name = mq_get_user_name(); g_Param.user_passwd = mq_get_user_password(); g_Param.keep_interval = mq_get_keep_alive_interval(); g_Param.subscribed_topic = TOPIC_DOWNLINK; g_Param.published_topic = TOPIC_OFFLINE; g_Param.onconnect = mq_onconnect; g_Param.memsge_arrived = mq_messge_arrived; g_Param.onsubcribe = mq_onsubcribe; g_Param.onpublish = mq_onpublish; g_Param.offline_param.is_spt_offline_msg = 1; g_Param.offline_param.offline_payload = PAYLOAD_OFFLINE; g_Param.offline_param.offline_topic = TOPIC_OFFLINE; g_Param.onidlestatus = mq_idle_status; ret = mq_init(&g_Param); LOGD("[%d:%s] mq_init return:%d", __LINE__, __func__, ret); return ret; } int MqttInitDemo(void) { int iRet = SUCCESS; iRet = Mqtt_Init(); if (SUCCESS == iRet) { mmi_clearLine(DISP_ClearALL); mmi_display(DISP_VCenter, DISP_HCenter, "mq init success"); mmi_inputWaitKeypress(3); return iRet; } mmi_clearLine(DISP_ClearALL); mmi_display(DISP_VCenter, DISP_HCenter, "mq init fail"); mmi_inputWaitKeypress(3); return iRet; } int MqttSendMessageDemo(void) { int iRet = SUCCESS; iRet = mq_send_message(1, PAYLOAD_OFFLINE, strlen(PAYLOAD_OFFLINE)); if (SUCCESS == iRet) { mmi_clearLine(DISP_ClearALL); mmi_display(DISP_VCenter, DISP_HCenter, "msg publish success"); mmi_inputWaitKeypress(3); return iRet; } mmi_clearLine(DISP_ClearALL); mmi_display(DISP_VCenter, DISP_HCenter, "msg publish fail"); mmi_inputWaitKeypress(3); return iRet; } ```