資源簡介
在MTK功能機平臺實現mqtt協議,實現了connect ping subscribe public功能。實測可用。

代碼片段和文件信息
#include?“wwzlmqtt.h“
#include?“aliyun_iot_common_md5.h“
#define?MQTT_DUP_FLAG?????1<<3
#define?MQTT_QOS0_FLAG????0<<1
#define?MQTT_QOS1_FLAG????1<<1
#define?MQTT_QOS2_FLAG????2<<1
#define?MQTT_RETAIN_FLAG??1
#define?MQTT_CLEAN_SESSION??1<<1
#define?MQTT_WILL_FLAG??????1<<2
#define?MQTT_WILL_RETAIN????1<<5
#define?MQTT_USERNAME_FLAG??1<<7
#define?MQTT_PASSWORD_FLAG??1<<6
extern?int?wwzl_mqtt_send_socket(void*?socket_info?const?void*?buf?unsigned?int?count);
extern?kal_int16?len_trans;
uint8_t?mqtt_num_rem_len_bytes(const?uint8_t*?buf)?{
uint8_t?num_bytes?=?1;
//printf(“mqtt_num_rem_len_bytes\n“);
if?((buf[1]?&?0x80)?==?0x80)?{
num_bytes++;
if?((buf[2]?&?0x80)?==?0x80)?{
num_bytes?++;
if?((buf[3]?&?0x80)?==?0x80)?{
num_bytes?++;
}
}
}
return?num_bytes;
}
uint16_t?mqtt_parse_rem_len(const?uint8_t*?buf)?{
uint16_t?multiplier?=?1;
uint16_t?value?=?0;
uint8_t?digit;
//printf(“mqtt_parse_rem_len\n“);
buf++; //?skip?“flags“?byte?in?fixed?header
do?{
digit?=?*buf;
value?+=?(digit?&?127)?*?multiplier;
multiplier?*=?128;
buf++;
}?while?((digit?&?128)?!=?0);
return?value;
}
uint16_t?mqtt_parse_msg_id(const?uint8_t*?buf)?{
uint8_t?type?=?MQTTParseMessageType(buf);
uint8_t?qos?=?MQTTParseMessageQos(buf);
uint16_t?id?=?0;
//printf(“mqtt_parse_msg_id\n“);
if(type?>=?MQTT_MSG_PUBLISH?&&?type?<=?MQTT_MSG_UNSUBACK)?{
if(type?==?MQTT_MSG_PUBLISH)?{
if(qos?!=?0)?{
//?fixed?header?length?+?Topic?(UTF?encoded)
//?=?1?for?“flags“?byte?+?rlb?for?length?bytes?+?topic?size
uint8_t?rlb?=?mqtt_num_rem_len_bytes(buf);
uint8_t?offset?=?*(buf+1+rlb)<<8; //?topic?UTF?MSB
offset?|=?*(buf+1+rlb+1); //?topic?UTF?LSB
offset?+=?(1+rlb+2); //?fixed?header?+?topic?size
id?=?*(buf+offset)<<8; //?id?MSB
id?|=?*(buf+offset+1); //?id?LSB
}
}?else?{
//?fixed?header?length
//?1?for?“flags“?byte?+?rlb?for?length?bytes
uint8_t?rlb?=?mqtt_num_rem_len_bytes(buf);
id?=?*(buf+1+rlb)<<8; //?id?MSB
id?|=?*(buf+1+rlb+1); //?id?LSB
}
}
return?id;
}
uint16_t?mqtt_parse_pub_topic(const?uint8_t*?buf?uint8_t*?topic)?{
const?uint8_t*?ptr;
uint16_t?topic_len?=?mqtt_parse_pub_topic_ptr(buf?&ptr);
//printf(“mqtt_parse_pub_topic\n“);
if(topic_len?!=?0?&&?ptr?!=?NULL)?{
memcpy(topic?ptr?topic_len);
}
return?topic_len;
}
uint16_t?mqtt_parse_pub_topic_ptr(const?uint8_t*?buf?const?uint8_t?**topic_ptr)?{
uint16_t?len?=?0;
//printf(“mqtt_parse_pub_topic_ptr\n“);
if(MQTTParseMessageType(buf)?==?MQTT_MSG_PUBLISH)?{
//?fixed?header?length?=?1?for?“flags“?byte?+?rlb?for?length?bytes
uint8_t?rlb?=?mqtt_num_rem_len_bytes(buf);
len?=?*(buf+1+rlb)<<8; //?MSB?of?topic?UTF
len?|=?*(buf+1+rlb+1); //?LSB?of?topic?UTF
//?start?of?topic?=?add?1?for?“flags“?rlb?for?remaining?length?2?for?UTF
*topic_ptr?=?(buf?+?(1+rlb+2));
}?else?{
*topic_ptr?=?NULL;
}
return?len;
}
uint16_t?mqtt_parse_publish_msg(const?uint8_t*?buf?uint8_t*?msg)?{
const?uint
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????17772??2017-07-15?17:22??mtk?2503?mqtt\wwzlmqtt.c
?????文件???????9187??2017-07-06?12:13??mtk?2503?mqtt\wwzlmqtt.h
?????文件?????203895??2017-07-15?17:43??mtk?2503?mqtt\wwzl_w120ae_wx_tracker.c
?????文件??????40698??2017-07-15?12:23??mtk?2503?mqtt\wwzl_w120ae_wx_tracker.h
?????目錄??????????0??2017-07-24?10:44??mtk?2503?mqtt
-----------?---------??----------?-----??----
???????????????271552????????????????????5
- 上一篇:挖掘雞7.1~~非常不錯的工具
- 下一篇:Fluent動網格和VOF詳細設置教程
評論
共有 條評論