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;
}
```