From 274759aafb156a9e2e45ae7106c9fa6195a9a5fb Mon Sep 17 00:00:00 2001 From: huang <1085210385@qq.com> Date: Wed, 27 Sep 2023 14:02:20 +0800 Subject: [PATCH 1/5] Merge branch '2023_open_source_contest' of https://gitlink.org.cn/hc0014/xiuos into 2023_open_source_contest --- APP_Framework/Applications/app_test/Makefile | 3 +- .../app_test/test_mqttclient/MQTTConnect.h | 137 ++++ .../test_mqttclient/MQTTConnectClient.c | 214 +++++ .../test_mqttclient/MQTTConnectServer.c | 148 ++++ .../test_mqttclient/MQTTDeserializePublish.c | 107 +++ .../app_test/test_mqttclient/MQTTFormat.c | 262 +++++++ .../app_test/test_mqttclient/MQTTFormat.h | 37 + .../app_test/test_mqttclient/MQTTPacket.c | 412 ++++++++++ .../app_test/test_mqttclient/MQTTPacket.h | 134 ++++ .../app_test/test_mqttclient/MQTTPublish.h | 38 + .../test_mqttclient/MQTTSerializePublish.c | 169 ++++ .../app_test/test_mqttclient/MQTTSubscribe.h | 39 + .../test_mqttclient/MQTTSubscribeClient.c | 137 ++++ .../test_mqttclient/MQTTSubscribeServer.c | 112 +++ .../test_mqttclient/MQTTUnsubscribe.h | 38 + .../test_mqttclient/MQTTUnsubscribeClient.c | 106 +++ .../test_mqttclient/MQTTUnsubscribeServer.c | 102 +++ .../app_test/test_mqttclient/Makefile | 14 + .../app_test/test_mqttclient/README.md | 15 + .../app_test/test_mqttclient/StackTrace.h | 78 ++ .../test_mqttclient/test_mqttclient.c | 728 ++++++++++++++++++ .../test_mqttclient/test_mqttclient.h | 75 ++ .../app_test/test_mqttclient/transport.c | 102 +++ .../app_test/test_mqttclient/transport.h | 45 ++ .../app_test/test_mqttclient/图片1.png | Bin 0 -> 19570 bytes .../app_test/test_mqttclient/图片2.png | Bin 0 -> 14573 bytes .../app_test/test_mqttclient/图片3.png | Bin 0 -> 29378 bytes APP_Framework/lib/cJSON/Makefile | 1 + APP_Framework/lib/cJSON/cJSON_Process.c | 85 ++ APP_Framework/lib/cJSON/cJSON_Process.h | 23 + 30 files changed, 3360 insertions(+), 1 deletion(-) create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTConnect.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTConnectClient.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTConnectServer.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTDeserializePublish.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTFormat.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTFormat.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTPacket.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTPacket.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTPublish.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTSerializePublish.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribe.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribeClient.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribeServer.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribe.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribeClient.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribeServer.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/Makefile create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/README.md create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/StackTrace.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/transport.c create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/transport.h create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/图片1.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/图片2.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/图片3.png create mode 100644 APP_Framework/lib/cJSON/cJSON_Process.c create mode 100644 APP_Framework/lib/cJSON/cJSON_Process.h diff --git a/APP_Framework/Applications/app_test/Makefile b/APP_Framework/Applications/app_test/Makefile index 6b0c1ea96..fd1906309 100644 --- a/APP_Framework/Applications/app_test/Makefile +++ b/APP_Framework/Applications/app_test/Makefile @@ -24,7 +24,7 @@ endif ifeq ($(CONFIG_ADD_XIZI_FEATURES),y) SRC_FILES := test_shell.c - + ifeq ($(CONFIG_USER_TEST_ADC),y) SRC_FILES += test_adc.c endif @@ -130,6 +130,7 @@ ifeq ($(CONFIG_ADD_XIZI_FEATURES),y) endif ifeq ($(CONFIG_USER_TEST_MQTTCLIENT),y) + SRC_DIR:= test_mqttclient SRC_FILES += endif diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnect.h b/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnect.h new file mode 100644 index 000000000..4d247a3c2 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnect.h @@ -0,0 +1,137 @@ +/******************************************************************************* + * Copyright (c) 2014, 2017 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + * Ian Craggs - fix for issue #64, bit order in connack response + *******************************************************************************/ + +#ifndef MQTTCONNECT_H_ +#define MQTTCONNECT_H_ + +#if !defined(DLLImport) + #define DLLImport +#endif +#if !defined(DLLExport) + #define DLLExport +#endif + + +typedef union +{ + unsigned char all; /**< all connect flags */ +#if defined(REVERSED) + struct + { + unsigned int username : 1; /**< 3.1 user name */ + unsigned int password : 1; /**< 3.1 password */ + unsigned int willRetain : 1; /**< will retain setting */ + unsigned int willQoS : 2; /**< will QoS value */ + unsigned int will : 1; /**< will flag */ + unsigned int cleansession : 1; /**< clean session flag */ + unsigned int : 1; /**< unused */ + } bits; +#else + struct + { + unsigned int : 1; /**< unused */ + unsigned int cleansession : 1; /**< cleansession flag */ + unsigned int will : 1; /**< will flag */ + unsigned int willQoS : 2; /**< will QoS value */ + unsigned int willRetain : 1; /**< will retain setting */ + unsigned int password : 1; /**< 3.1 password */ + unsigned int username : 1; /**< 3.1 user name */ + } bits; +#endif +} MQTTConnectFlags; /**< connect flags byte */ + + + +/** + * Defines the MQTT "Last Will and Testament" (LWT) settings for + * the connect packet. + */ +typedef struct +{ + /** The eyecatcher for this structure. must be MQTW. */ + char struct_id[4]; + /** The version number of this structure. Must be 0 */ + int struct_version; + /** The LWT topic to which the LWT message will be published. */ + MQTTString topicName; + /** The LWT payload. */ + MQTTString message; + /** + * The retained flag for the LWT message (see MQTTAsync_message.retained). + */ + unsigned char retained; + /** + * The quality of service setting for the LWT message (see + * MQTTAsync_message.qos and @ref qos). + */ + char qos; +} MQTTPacket_willOptions; + + +#define MQTTPacket_willOptions_initializer { {'M', 'Q', 'T', 'W'}, 0, {NULL, {0, NULL}}, {NULL, {0, NULL}}, 0, 0 } + + +typedef struct +{ + /** The eyecatcher for this structure. must be MQTC. */ + char struct_id[4]; + /** The version number of this structure. Must be 0 */ + int struct_version; + /** Version of MQTT to be used. 3 = 3.1 4 = 3.1.1 + */ + unsigned char MQTTVersion; + MQTTString clientID; + unsigned short keepAliveInterval; + unsigned char cleansession; + unsigned char willFlag; + MQTTPacket_willOptions will; + MQTTString username; + MQTTString password; +} MQTTPacket_connectData; + +typedef union +{ + unsigned char all; /**< all connack flags */ +#if defined(REVERSED) + struct + { + unsigned int reserved : 7; /**< unused */ + unsigned int sessionpresent : 1; /**< session present flag */ + } bits; +#else + struct + { + unsigned int sessionpresent : 1; /**< session present flag */ + unsigned int reserved: 7; /**< unused */ + } bits; +#endif +} MQTTConnackFlags; /**< connack flags byte */ + +#define MQTTPacket_connectData_initializer { {'M', 'Q', 'T', 'C'}, 0, 4, {NULL, {0, NULL}}, 60, 1, 0, \ + MQTTPacket_willOptions_initializer, {NULL, {0, NULL}}, {NULL, {0, NULL}} } + +DLLExport int MQTTSerialize_connect(unsigned char* buf, int buflen, MQTTPacket_connectData* options); +DLLExport int MQTTDeserialize_connect(MQTTPacket_connectData* data, unsigned char* buf, int len); + +DLLExport int MQTTSerialize_connack(unsigned char* buf, int buflen, unsigned char connack_rc, unsigned char sessionPresent); +DLLExport int MQTTDeserialize_connack(unsigned char* sessionPresent, unsigned char* connack_rc, unsigned char* buf, int buflen); + +DLLExport int MQTTSerialize_disconnect(unsigned char* buf, int buflen); +DLLExport int MQTTSerialize_pingreq(unsigned char* buf, int buflen); + +#endif /* MQTTCONNECT_H_ */ diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnectClient.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnectClient.c new file mode 100644 index 000000000..5f3cc2963 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnectClient.c @@ -0,0 +1,214 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + +/** + * Determines the length of the MQTT connect packet that would be produced using the supplied connect options. + * @param options the options to be used to build the connect packet + * @return the length of buffer needed to contain the serialized version of the packet + */ +int MQTTSerialize_connectLength(MQTTPacket_connectData* options) +{ + int len = 0; + + FUNC_ENTRY; + + if (options->MQTTVersion == 3) + len = 12; /* variable depending on MQTT or MQIsdp */ + else if (options->MQTTVersion == 4) + len = 10; + + len += MQTTstrlen(options->clientID)+2; + if (options->willFlag) + len += MQTTstrlen(options->will.topicName)+2 + MQTTstrlen(options->will.message)+2; + if (options->username.cstring || options->username.lenstring.data) + len += MQTTstrlen(options->username)+2; + if (options->password.cstring || options->password.lenstring.data) + len += MQTTstrlen(options->password)+2; + + FUNC_EXIT_RC(len); + return len; +} + + +/** + * Serializes the connect options into the buffer. + * @param buf the buffer into which the packet will be serialized + * @param len the length in bytes of the supplied buffer + * @param options the options to be used to build the connect packet + * @return serialized length, or error if 0 + */ +int MQTTSerialize_connect(unsigned char* buf, int buflen, MQTTPacket_connectData* options) +{ + unsigned char *ptr = buf; + MQTTHeader header = {0}; + MQTTConnectFlags flags = {0}; + int len = 0; + int rc = -1; + + FUNC_ENTRY; + if (MQTTPacket_len(len = MQTTSerialize_connectLength(options)) > buflen) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = CONNECT; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, len); /* write remaining length */ + + if (options->MQTTVersion == 4) + { + writeCString(&ptr, "MQTT"); + writeChar(&ptr, (char) 4); + } + else + { + writeCString(&ptr, "MQIsdp"); + writeChar(&ptr, (char) 3); + } + + flags.all = 0; + flags.bits.cleansession = options->cleansession; + flags.bits.will = (options->willFlag) ? 1 : 0; + if (flags.bits.will) + { + flags.bits.willQoS = options->will.qos; + flags.bits.willRetain = options->will.retained; + } + + if (options->username.cstring || options->username.lenstring.data) + flags.bits.username = 1; + if (options->password.cstring || options->password.lenstring.data) + flags.bits.password = 1; + + writeChar(&ptr, flags.all); + writeInt(&ptr, options->keepAliveInterval); + writeMQTTString(&ptr, options->clientID); + if (options->willFlag) + { + writeMQTTString(&ptr, options->will.topicName); + writeMQTTString(&ptr, options->will.message); + } + if (flags.bits.username) + writeMQTTString(&ptr, options->username); + if (flags.bits.password) + writeMQTTString(&ptr, options->password); + + rc = ptr - buf; + + exit: FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Deserializes the supplied (wire) buffer into connack data - return code + * @param sessionPresent the session present flag returned (only for MQTT 3.1.1) + * @param connack_rc returned integer value of the connack return code + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param len the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int MQTTDeserialize_connack(unsigned char* sessionPresent, unsigned char* connack_rc, unsigned char* buf, int buflen) +{ + MQTTHeader header = {0}; + unsigned char* curdata = buf; + unsigned char* enddata = NULL; + int rc = 0; + int mylen; + MQTTConnackFlags flags = {0}; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + if (header.bits.type != CONNACK) + goto exit; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + if (enddata - curdata < 2) + goto exit; + + flags.all = readChar(&curdata); + *sessionPresent = flags.bits.sessionpresent; + *connack_rc = readChar(&curdata); + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes a 0-length packet into the supplied buffer, ready for writing to a socket + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer, to avoid overruns + * @param packettype the message type + * @return serialized length, or error if 0 + */ +int MQTTSerialize_zero(unsigned char* buf, int buflen, unsigned char packettype) +{ + MQTTHeader header = {0}; + int rc = -1; + unsigned char *ptr = buf; + + FUNC_ENTRY; + if (buflen < 2) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + header.byte = 0; + header.bits.type = packettype; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, 0); /* write remaining length */ + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes a disconnect packet into the supplied buffer, ready for writing to a socket + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer, to avoid overruns + * @return serialized length, or error if 0 + */ +int MQTTSerialize_disconnect(unsigned char* buf, int buflen) +{ + return MQTTSerialize_zero(buf, buflen, DISCONNECT); +} + + +/** + * Serializes a disconnect packet into the supplied buffer, ready for writing to a socket + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer, to avoid overruns + * @return serialized length, or error if 0 + */ +int MQTTSerialize_pingreq(unsigned char* buf, int buflen) +{ + return MQTTSerialize_zero(buf, buflen, PINGREQ); +} diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnectServer.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnectServer.c new file mode 100644 index 000000000..07c7cb537 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTConnectServer.c @@ -0,0 +1,148 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "StackTrace.h" +#include "MQTTPacket.h" +#include + +#define min(a, b) ((a < b) ? a : b) + + +/** + * Validates MQTT protocol name and version combinations + * @param protocol the MQTT protocol name as an MQTTString + * @param version the MQTT protocol version number, as in the connect packet + * @return correct MQTT combination? 1 is true, 0 is false + */ +int MQTTPacket_checkVersion(MQTTString* protocol, int version) +{ + int rc = 0; + + if (version == 3 && memcmp(protocol->lenstring.data, "MQIsdp", + min(6, protocol->lenstring.len)) == 0) + rc = 1; + else if (version == 4 && memcmp(protocol->lenstring.data, "MQTT", + min(4, protocol->lenstring.len)) == 0) + rc = 1; + return rc; +} + + +/** + * Deserializes the supplied (wire) buffer into connect data structure + * @param data the connect data structure to be filled out + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param len the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int MQTTDeserialize_connect(MQTTPacket_connectData* data, unsigned char* buf, int len) +{ + MQTTHeader header = {0}; + MQTTConnectFlags flags = {0}; + unsigned char* curdata = buf; + unsigned char* enddata = &buf[len]; + int rc = 0; + MQTTString Protocol; + int version; + int mylen = 0; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + if (header.bits.type != CONNECT) + goto exit; + + curdata += MQTTPacket_decodeBuf(curdata, &mylen); /* read remaining length */ + + if (!readMQTTLenString(&Protocol, &curdata, enddata) || + enddata - curdata < 0) /* do we have enough data to read the protocol version byte? */ + goto exit; + + version = (int)readChar(&curdata); /* Protocol version */ + /* If we don't recognize the protocol version, we don't parse the connect packet on the + * basis that we don't know what the format will be. + */ + if (MQTTPacket_checkVersion(&Protocol, version)) + { + flags.all = readChar(&curdata); + data->cleansession = flags.bits.cleansession; + data->keepAliveInterval = readInt(&curdata); + if (!readMQTTLenString(&data->clientID, &curdata, enddata)) + goto exit; + data->willFlag = flags.bits.will; + if (flags.bits.will) + { + data->will.qos = flags.bits.willQoS; + data->will.retained = flags.bits.willRetain; + if (!readMQTTLenString(&data->will.topicName, &curdata, enddata) || + !readMQTTLenString(&data->will.message, &curdata, enddata)) + goto exit; + } + if (flags.bits.username) + { + if (enddata - curdata < 3 || !readMQTTLenString(&data->username, &curdata, enddata)) + goto exit; /* username flag set, but no username supplied - invalid */ + if (flags.bits.password && + (enddata - curdata < 3 || !readMQTTLenString(&data->password, &curdata, enddata))) + goto exit; /* password flag set, but no password supplied - invalid */ + } + else if (flags.bits.password) + goto exit; /* password flag set without username - invalid */ + rc = 1; + } +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes the connack packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param connack_rc the integer connack return code to be used + * @param sessionPresent the MQTT 3.1.1 sessionPresent flag + * @return serialized length, or error if 0 + */ +int MQTTSerialize_connack(unsigned char* buf, int buflen, unsigned char connack_rc, unsigned char sessionPresent) +{ + MQTTHeader header = {0}; + int rc = 0; + unsigned char *ptr = buf; + MQTTConnackFlags flags = {0}; + + FUNC_ENTRY; + if (buflen < 2) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + header.byte = 0; + header.bits.type = CONNACK; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ + + flags.all = 0; + flags.bits.sessionpresent = sessionPresent; + writeChar(&ptr, flags.all); + writeChar(&ptr, connack_rc); + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTDeserializePublish.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTDeserializePublish.c new file mode 100644 index 000000000..5014c46d3 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTDeserializePublish.c @@ -0,0 +1,107 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "StackTrace.h" +#include "MQTTPacket.h" +#include + +#define min(a, b) ((a < b) ? 1 : 0) + +/** + * Deserializes the supplied (wire) buffer into publish data + * @param dup returned integer - the MQTT dup flag + * @param qos returned integer - the MQTT QoS value + * @param retained returned integer - the MQTT retained flag + * @param packetid returned integer - the MQTT packet identifier + * @param topicName returned MQTTString - the MQTT topic in the publish + * @param payload returned byte buffer - the MQTT publish payload + * @param payloadlen returned integer - the length of the MQTT payload + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return error code. 1 is success + */ +int MQTTDeserialize_publish(unsigned char* dup, int* qos, unsigned char* retained, unsigned short* packetid, MQTTString* topicName, + unsigned char** payload, int32_t* payloadlen, unsigned char* buf, int buflen) +{ + MQTTHeader header = {0}; + unsigned char* curdata = buf; + unsigned char* enddata = NULL; + int rc = 0; + int mylen = 0; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + if (header.bits.type != PUBLISH) + goto exit; + *dup = header.bits.dup; + *qos = header.bits.qos; + *retained = header.bits.retain; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + + if (!readMQTTLenString(topicName, &curdata, enddata) || + enddata - curdata < 0) /* do we have enough data to read the protocol version byte? */ + goto exit; + + if (*qos > 0) + *packetid = readInt(&curdata); + + *payloadlen = enddata - curdata; + *payload = curdata; + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + + +/** + * Deserializes the supplied (wire) buffer into an ack + * @param packettype returned integer - the MQTT packet type + * @param dup returned integer - the MQTT dup flag + * @param packetid returned integer - the MQTT packet identifier + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int MQTTDeserialize_ack(unsigned char* packettype, unsigned char* dup, unsigned short* packetid, unsigned char* buf, int buflen) +{ + MQTTHeader header = {0}; + unsigned char* curdata = buf; + unsigned char* enddata = NULL; + int rc = 0; + int mylen; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + *dup = header.bits.dup; + *packettype = header.bits.type; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + + if (enddata - curdata < 2) + goto exit; + *packetid = readInt(&curdata); + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTFormat.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTFormat.c new file mode 100644 index 000000000..2eff31f89 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTFormat.c @@ -0,0 +1,262 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "StackTrace.h" +#include "MQTTPacket.h" + +#include + + +const char* MQTTPacket_names[] = +{ + "RESERVED", "CONNECT", "CONNACK", "PUBLISH", "PUBACK", "PUBREC", "PUBREL", + "PUBCOMP", "SUBSCRIBE", "SUBACK", "UNSUBSCRIBE", "UNSUBACK", + "PINGREQ", "PINGRESP", "DISCONNECT" +}; + + +const char* MQTTPacket_getName(unsigned short packetid) +{ + return MQTTPacket_names[packetid]; +} + + +int MQTTStringFormat_connect(char* strbuf, int strbuflen, MQTTPacket_connectData* data) +{ + int strindex = 0; + + strindex = snprintf(strbuf, strbuflen, + "CONNECT MQTT version %d, client id %.*s, clean session %d, keep alive %d", + (int)data->MQTTVersion, data->clientID.lenstring.len, data->clientID.lenstring.data, + (int)data->cleansession, data->keepAliveInterval); + if (data->willFlag) + strindex += snprintf(&strbuf[strindex], strbuflen - strindex, + ", will QoS %d, will retain %d, will topic %.*s, will message %.*s", + data->will.qos, data->will.retained, + data->will.topicName.lenstring.len, data->will.topicName.lenstring.data, + data->will.message.lenstring.len, data->will.message.lenstring.data); + if (data->username.lenstring.data && data->username.lenstring.len > 0) + strindex += snprintf(&strbuf[strindex], strbuflen - strindex, + ", user name %.*s", data->username.lenstring.len, data->username.lenstring.data); + if (data->password.lenstring.data && data->password.lenstring.len > 0) + strindex += snprintf(&strbuf[strindex], strbuflen - strindex, + ", password %.*s", data->password.lenstring.len, data->password.lenstring.data); + return strindex; +} + + +int MQTTStringFormat_connack(char* strbuf, int strbuflen, unsigned char connack_rc, unsigned char sessionPresent) +{ + int strindex = snprintf(strbuf, strbuflen, "CONNACK session present %d, rc %d", sessionPresent, connack_rc); + return strindex; +} + + +int MQTTStringFormat_publish(char* strbuf, int strbuflen, unsigned char dup, int qos, unsigned char retained, + unsigned short packetid, MQTTString topicName, unsigned char* payload, int payloadlen) +{ + int strindex = snprintf(strbuf, strbuflen, + "PUBLISH dup %d, QoS %d, retained %d, packet id %d, topic %.*s, payload length %d, payload %.*s", + dup, qos, retained, packetid, + (topicName.lenstring.len < 20) ? topicName.lenstring.len : 20, topicName.lenstring.data, + payloadlen, (payloadlen < 20) ? payloadlen : 20, payload); + return strindex; +} + + +int MQTTStringFormat_ack(char* strbuf, int strbuflen, unsigned char packettype, unsigned char dup, unsigned short packetid) +{ + int strindex = snprintf(strbuf, strbuflen, "%s, packet id %d", MQTTPacket_names[packettype], packetid); + if (dup) + strindex += snprintf(strbuf + strindex, strbuflen - strindex, ", dup %d", dup); + return strindex; +} + + +int MQTTStringFormat_subscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, int count, + MQTTString topicFilters[], int requestedQoSs[]) +{ + return snprintf(strbuf, strbuflen, + "SUBSCRIBE dup %d, packet id %d count %d topic %.*s qos %d", + dup, packetid, count, + topicFilters[0].lenstring.len, topicFilters[0].lenstring.data, + requestedQoSs[0]); +} + + +int MQTTStringFormat_suback(char* strbuf, int strbuflen, unsigned short packetid, int count, int* grantedQoSs) +{ + return snprintf(strbuf, strbuflen, + "SUBACK packet id %d count %d granted qos %d", packetid, count, grantedQoSs[0]); +} + + +int MQTTStringFormat_unsubscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, + int count, MQTTString topicFilters[]) +{ + return snprintf(strbuf, strbuflen, + "UNSUBSCRIBE dup %d, packet id %d count %d topic %.*s", + dup, packetid, count, + topicFilters[0].lenstring.len, topicFilters[0].lenstring.data); +} + + +#if defined(MQTT_CLIENT) +char* MQTTFormat_toClientString(char* strbuf, int strbuflen, unsigned char* buf, int buflen) +{ + int index = 0; + int rem_length = 0; + MQTTHeader header = {0}; + int strindex = 0; + + header.byte = buf[index++]; + index += MQTTPacket_decodeBuf(&buf[index], &rem_length); + + switch (header.bits.type) + { + + case CONNACK: + { + unsigned char sessionPresent, connack_rc; + if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) == 1) + strindex = MQTTStringFormat_connack(strbuf, strbuflen, connack_rc, sessionPresent); + } + break; + case PUBLISH: + { + unsigned char dup, retained, *payload; + unsigned short packetid; + int qos, payloadlen; + MQTTString topicName = MQTTString_initializer; + if (MQTTDeserialize_publish(&dup, &qos, &retained, &packetid, &topicName, + &payload, &payloadlen, buf, buflen) == 1) + strindex = MQTTStringFormat_publish(strbuf, strbuflen, dup, qos, retained, packetid, + topicName, payload, payloadlen); + } + break; + case PUBACK: + case PUBREC: + case PUBREL: + case PUBCOMP: + { + unsigned char packettype, dup; + unsigned short packetid; + if (MQTTDeserialize_ack(&packettype, &dup, &packetid, buf, buflen) == 1) + strindex = MQTTStringFormat_ack(strbuf, strbuflen, packettype, dup, packetid); + } + break; + case SUBACK: + { + unsigned short packetid; + int maxcount = 1, count = 0; + int grantedQoSs[1]; + if (MQTTDeserialize_suback(&packetid, maxcount, &count, grantedQoSs, buf, buflen) == 1) + strindex = MQTTStringFormat_suback(strbuf, strbuflen, packetid, count, grantedQoSs); + } + break; + case UNSUBACK: + { + unsigned short packetid; + if (MQTTDeserialize_unsuback(&packetid, buf, buflen) == 1) + strindex = MQTTStringFormat_ack(strbuf, strbuflen, UNSUBACK, 0, packetid); + } + break; + case PINGREQ: + case PINGRESP: + case DISCONNECT: + strindex = snprintf(strbuf, strbuflen, "%s", MQTTPacket_names[header.bits.type]); + break; + } + return strbuf; +} +#endif + +#if defined(MQTT_SERVER) +char* MQTTFormat_toServerString(char* strbuf, int strbuflen, unsigned char* buf, int buflen) +{ + int index = 0; + int rem_length = 0; + MQTTHeader header = {0}; + int strindex = 0; + + header.byte = buf[index++]; + index += MQTTPacket_decodeBuf(&buf[index], &rem_length); + + switch (header.bits.type) + { + case CONNECT: + { + MQTTPacket_connectData data; + int rc; + if ((rc = MQTTDeserialize_connect(&data, buf, buflen)) == 1) + strindex = MQTTStringFormat_connect(strbuf, strbuflen, &data); + } + break; + case PUBLISH: + { + unsigned char dup, retained, *payload; + unsigned short packetid; + int qos, payloadlen; + MQTTString topicName = MQTTString_initializer; + if (MQTTDeserialize_publish(&dup, &qos, &retained, &packetid, &topicName, + &payload, &payloadlen, buf, buflen) == 1) + strindex = MQTTStringFormat_publish(strbuf, strbuflen, dup, qos, retained, packetid, + topicName, payload, payloadlen); + } + break; + case PUBACK: + case PUBREC: + case PUBREL: + case PUBCOMP: + { + unsigned char packettype, dup; + unsigned short packetid; + if (MQTTDeserialize_ack(&packettype, &dup, &packetid, buf, buflen) == 1) + strindex = MQTTStringFormat_ack(strbuf, strbuflen, packettype, dup, packetid); + } + break; + case SUBSCRIBE: + { + unsigned char dup; + unsigned short packetid; + int maxcount = 1, count = 0; + MQTTString topicFilters[1]; + int requestedQoSs[1]; + if (MQTTDeserialize_subscribe(&dup, &packetid, maxcount, &count, + topicFilters, requestedQoSs, buf, buflen) == 1) + strindex = MQTTStringFormat_subscribe(strbuf, strbuflen, dup, packetid, count, topicFilters, requestedQoSs);; + } + break; + case UNSUBSCRIBE: + { + unsigned char dup; + unsigned short packetid; + int maxcount = 1, count = 0; + MQTTString topicFilters[1]; + if (MQTTDeserialize_unsubscribe(&dup, &packetid, maxcount, &count, topicFilters, buf, buflen) == 1) + strindex = MQTTStringFormat_unsubscribe(strbuf, strbuflen, dup, packetid, count, topicFilters); + } + break; + case PINGREQ: + case PINGRESP: + case DISCONNECT: + strindex = snprintf(strbuf, strbuflen, "%s", MQTTPacket_names[header.bits.type]); + break; + } + strbuf[strbuflen] = '\0'; + return strbuf; +} +#endif diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTFormat.h b/APP_Framework/Applications/app_test/test_mqttclient/MQTTFormat.h new file mode 100644 index 000000000..47b0c4143 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTFormat.h @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#if !defined(MQTTFORMAT_H) +#define MQTTFORMAT_H + +#include "StackTrace.h" +#include "MQTTPacket.h" + +const char* MQTTPacket_getName(unsigned short packetid); +int MQTTStringFormat_connect(char* strbuf, int strbuflen, MQTTPacket_connectData* data); +int MQTTStringFormat_connack(char* strbuf, int strbuflen, unsigned char connack_rc, unsigned char sessionPresent); +int MQTTStringFormat_publish(char* strbuf, int strbuflen, unsigned char dup, int qos, unsigned char retained, + unsigned short packetid, MQTTString topicName, unsigned char* payload, int payloadlen); +int MQTTStringFormat_ack(char* strbuf, int strbuflen, unsigned char packettype, unsigned char dup, unsigned short packetid); +int MQTTStringFormat_subscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, int count, + MQTTString topicFilters[], int requestedQoSs[]); +int MQTTStringFormat_suback(char* strbuf, int strbuflen, unsigned short packetid, int count, int* grantedQoSs); +int MQTTStringFormat_unsubscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, + int count, MQTTString topicFilters[]); +char* MQTTFormat_toClientString(char* strbuf, int strbuflen, unsigned char* buf, int buflen); +char* MQTTFormat_toServerString(char* strbuf, int strbuflen, unsigned char* buf, int buflen); + +#endif diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTPacket.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTPacket.c new file mode 100644 index 000000000..4f1f95a78 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTPacket.c @@ -0,0 +1,412 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Sergio R. Caprile - non-blocking packet read functions for stream transport + *******************************************************************************/ + +#include "StackTrace.h" +#include "MQTTPacket.h" + +#include + +/** + * Encodes the message length according to the MQTT algorithm + * @param buf the buffer into which the encoded data is written + * @param length the length to be encoded + * @return the number of bytes written to buffer + */ +int MQTTPacket_encode(unsigned char* buf, int length) +{ + int rc = 0; + + FUNC_ENTRY; + do + { + char d = length % 128; + length /= 128; + /* if there are more digits to encode, set the top bit of this digit */ + if (length > 0) + d |= 0x80; + buf[rc++] = d; + } while (length > 0); + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Decodes the message length according to the MQTT algorithm + * @param getcharfn pointer to function to read the next character from the data source + * @param value the decoded length returned + * @return the number of bytes read from the socket + */ +int MQTTPacket_decode(int (*getcharfn)(unsigned char*, int), int* value) +{ + unsigned char c; + int multiplier = 1; + int len = 0; +#define MAX_NO_OF_REMAINING_LENGTH_BYTES 4 + + FUNC_ENTRY; + *value = 0; + do + { + int rc = MQTTPACKET_READ_ERROR; + + if (++len > MAX_NO_OF_REMAINING_LENGTH_BYTES) + { + rc = MQTTPACKET_READ_ERROR; /* bad data */ + goto exit; + } + rc = (*getcharfn)(&c, 1); + if (rc != 1) + goto exit; + *value += (c & 127) * multiplier; + multiplier *= 128; + } while ((c & 128) != 0); +exit: + FUNC_EXIT_RC(len); + return len; +} + + +int MQTTPacket_len(int rem_len) +{ + rem_len += 1; /* header byte */ + + /* now remaining_length field */ + if (rem_len < 128) + rem_len += 1; + else if (rem_len < 16384) + rem_len += 2; + else if (rem_len < 2097151) + rem_len += 3; + else + rem_len += 4; + return rem_len; +} + + +static unsigned char* bufptr; + +int bufchar(unsigned char* c, int count) +{ + int i; + + for (i = 0; i < count; ++i) + *c = *bufptr++; + return count; +} + + +int MQTTPacket_decodeBuf(unsigned char* buf, int* value) +{ + bufptr = buf; + return MQTTPacket_decode(bufchar, value); +} + + +/** + * Calculates an integer from two bytes read from the input buffer + * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned + * @return the integer value calculated + */ +int readInt(unsigned char** pptr) +{ + unsigned char* ptr = *pptr; + int len = 256*(*ptr) + (*(ptr+1)); + *pptr += 2; + return len; +} + + +/** + * Reads one character from the input buffer. + * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned + * @return the character read + */ +char readChar(unsigned char** pptr) +{ + char c = **pptr; + (*pptr)++; + return c; +} + + +/** + * Writes one character to an output buffer. + * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned + * @param c the character to write + */ +void writeChar(unsigned char** pptr, char c) +{ + **pptr = c; + (*pptr)++; +} + + +/** + * Writes an integer as 2 bytes to an output buffer. + * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned + * @param anInt the integer to write + */ +void writeInt(unsigned char** pptr, int anInt) +{ + **pptr = (unsigned char)(anInt / 256); + (*pptr)++; + **pptr = (unsigned char)(anInt % 256); + (*pptr)++; +} + + +/** + * Writes a "UTF" string to an output buffer. Converts C string to length-delimited. + * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned + * @param string the C string to write + */ +void writeCString(unsigned char** pptr, const char* string) +{ + int len = strlen(string); + writeInt(pptr, len); + memcpy(*pptr, string, len); + *pptr += len; +} + + +int getLenStringLen(char* ptr) +{ + int len = 256*((unsigned char)(*ptr)) + (unsigned char)(*(ptr+1)); + return len; +} + + +void writeMQTTString(unsigned char** pptr, MQTTString mqttstring) +{ + if (mqttstring.lenstring.len > 0) + { + writeInt(pptr, mqttstring.lenstring.len); + memcpy(*pptr, mqttstring.lenstring.data, mqttstring.lenstring.len); + *pptr += mqttstring.lenstring.len; + } + else if (mqttstring.cstring) + writeCString(pptr, mqttstring.cstring); + else + writeInt(pptr, 0); +} + + +/** + * @param mqttstring the MQTTString structure into which the data is to be read + * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned + * @param enddata pointer to the end of the data: do not read beyond + * @return 1 if successful, 0 if not + */ +int readMQTTLenString(MQTTString* mqttstring, unsigned char** pptr, unsigned char* enddata) +{ + int rc = 0; + + FUNC_ENTRY; + /* the first two bytes are the length of the string */ + if (enddata - (*pptr) > 1) /* enough length to read the integer? */ + { + mqttstring->lenstring.len = readInt(pptr); /* increments pptr to point past length */ + if (&(*pptr)[mqttstring->lenstring.len] <= enddata) + { + mqttstring->lenstring.data = (char*)*pptr; + *pptr += mqttstring->lenstring.len; + rc = 1; + } + } + mqttstring->cstring = NULL; + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Return the length of the MQTTstring - C string if there is one, otherwise the length delimited string + * @param mqttstring the string to return the length of + * @return the length of the string + */ +int MQTTstrlen(MQTTString mqttstring) +{ + int rc = 0; + + if (mqttstring.cstring) + rc = strlen(mqttstring.cstring); + else + rc = mqttstring.lenstring.len; + return rc; +} + + +/** + * Compares an MQTTString to a C string + * @param a the MQTTString to compare + * @param bptr the C string to compare + * @return boolean - equal or not + */ +int MQTTPacket_equals(MQTTString* a, char* bptr) +{ + int alen = 0, + blen = 0; + char *aptr; + + if (a->cstring) + { + aptr = a->cstring; + alen = strlen(a->cstring); + } + else + { + aptr = a->lenstring.data; + alen = a->lenstring.len; + } + blen = strlen(bptr); + + return (alen == blen) && (strncmp(aptr, bptr, alen) == 0); +} + + +/** + * Helper function to read packet data from some source into a buffer + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param getfn pointer to a function which will read any number of bytes from the needed source + * @return integer MQTT packet type, or -1 on error + * @note the whole message must fit into the caller's buffer + */ +int MQTTPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)) +{ + int rc = -1; + MQTTHeader header = {0}; + int len = 0; + int rem_len = 0; + + /* 1. read the header byte. This has the packet type in it */ + if ((*getfn)(buf, 1) != 1) + goto exit; + + len = 1; + /* 2. read the remaining length. This is variable in itself */ + MQTTPacket_decode(getfn, &rem_len); + len += MQTTPacket_encode(buf + 1, rem_len); /* put the original remaining length back into the buffer */ + + /* 3. read the rest of the buffer using a callback to supply the rest of the data */ + if((rem_len + len) > buflen) + goto exit; + if (rem_len && ((*getfn)(buf + len, rem_len) != rem_len)) + goto exit; + + header.byte = buf[0]; + rc = header.bits.type; +exit: + return rc; +} + +/** + * Decodes the message length according to the MQTT algorithm, non-blocking + * @param trp pointer to a transport structure holding what is needed to solve getting data from it + * @param value the decoded length returned + * @return integer the number of bytes read from the socket, 0 for call again, or -1 on error + */ +static int MQTTPacket_decodenb(MQTTTransport *trp) +{ + unsigned char c; + int rc = MQTTPACKET_READ_ERROR; + + FUNC_ENTRY; + if(trp->len == 0){ /* initialize on first call */ + trp->multiplier = 1; + trp->rem_len = 0; + } + do { + int frc; + if (trp->len >= MAX_NO_OF_REMAINING_LENGTH_BYTES) + goto exit; + if ((frc=(*trp->getfn)(trp->sck, &c, 1)) == -1) + goto exit; + if (frc == 0){ + rc = 0; + goto exit; + } + ++(trp->len); + trp->rem_len += (c & 127) * trp->multiplier; + trp->multiplier *= 128; + } while ((c & 128) != 0); + rc = trp->len; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + +/** + * Helper function to read packet data from some source into a buffer, non-blocking + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param trp pointer to a transport structure holding what is needed to solve getting data from it + * @return integer MQTT packet type, 0 for call again, or -1 on error + * @note the whole message must fit into the caller's buffer + */ +int MQTTPacket_readnb(unsigned char* buf, int buflen, MQTTTransport *trp) +{ + int rc = -1, frc; + MQTTHeader header = {0}; + + switch(trp->state){ + default: + trp->state = 0; + /*FALLTHROUGH*/ + case 0: + /* read the header byte. This has the packet type in it */ + if ((frc=(*trp->getfn)(trp->sck, buf, 1)) == -1) + goto exit; + if (frc == 0) + return 0; + trp->len = 0; + ++trp->state; + /*FALLTHROUGH*/ + /* read the remaining length. This is variable in itself */ + case 1: + if((frc=MQTTPacket_decodenb(trp)) == MQTTPACKET_READ_ERROR) + goto exit; + if(frc == 0) + return 0; + trp->len = 1 + MQTTPacket_encode(buf + 1, trp->rem_len); /* put the original remaining length back into the buffer */ + if((trp->rem_len + trp->len) > buflen) + goto exit; + ++trp->state; + /*FALLTHROUGH*/ + case 2: + if(trp->rem_len){ + /* read the rest of the buffer using a callback to supply the rest of the data */ + if ((frc=(*trp->getfn)(trp->sck, buf + trp->len, trp->rem_len)) == -1) + goto exit; + if (frc == 0) + return 0; + trp->rem_len -= frc; + trp->len += frc; + if(trp->rem_len) + return 0; + } + header.byte = buf[0]; + rc = header.bits.type; + break; + } + +exit: + trp->state = 0; + return rc; +} + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTPacket.h b/APP_Framework/Applications/app_test/test_mqttclient/MQTTPacket.h new file mode 100644 index 000000000..a1c5038d8 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTPacket.h @@ -0,0 +1,134 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ +#include + +#ifndef MQTTPACKET_H_ +#define MQTTPACKET_H_ + +#if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */ +extern "C" { +#endif + +#if defined(WIN32_DLL) || defined(WIN64_DLL) + #define DLLImport __declspec(dllimport) + #define DLLExport __declspec(dllexport) +#elif defined(LINUX_SO) + #define DLLImport extern + #define DLLExport __attribute__ ((visibility ("default"))) +#else + #define DLLImport + #define DLLExport +#endif + +enum errors +{ + MQTTPACKET_BUFFER_TOO_SHORT = -2, + MQTTPACKET_READ_ERROR = -1, + MQTTPACKET_READ_COMPLETE +}; + +enum msgTypes +{ + CONNECT = 1, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, + PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, + PINGREQ, PINGRESP, DISCONNECT +}; + +/** + * Bitfields for the MQTT header byte. + */ +typedef union +{ + unsigned char byte; /**< the whole byte */ +#if defined(REVERSED) + struct + { + unsigned int type : 4; /**< message type nibble */ + unsigned int dup : 1; /**< DUP flag bit */ + unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ + unsigned int retain : 1; /**< retained flag bit */ + } bits; +#else + struct + { + unsigned int retain : 1; /**< retained flag bit */ + unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ + unsigned int dup : 1; /**< DUP flag bit */ + unsigned int type : 4; /**< message type nibble */ + } bits; +#endif +} MQTTHeader; + +typedef struct +{ + int len; + char* data; +} MQTTLenString; + +typedef struct +{ + char* cstring; + MQTTLenString lenstring; +} MQTTString; + +#define MQTTString_initializer {NULL, {0, NULL}} + +int MQTTstrlen(MQTTString mqttstring); + +#include "MQTTConnect.h" +#include "MQTTPublish.h" +#include "MQTTSubscribe.h" +#include "MQTTUnsubscribe.h" +#include "MQTTFormat.h" + +DLLExport int MQTTSerialize_ack(unsigned char* buf, int buflen, unsigned char type, unsigned char dup, unsigned short packetid); +DLLExport int MQTTDeserialize_ack(unsigned char* packettype, unsigned char* dup, unsigned short* packetid, unsigned char* buf, int buflen); + +int MQTTPacket_len(int rem_len); +DLLExport int MQTTPacket_equals(MQTTString* a, char* b); + +DLLExport int MQTTPacket_encode(unsigned char* buf, int length); +int MQTTPacket_decode(int (*getcharfn)(unsigned char*, int), int* value); +int MQTTPacket_decodeBuf(unsigned char* buf, int* value); + +int readInt(unsigned char** pptr); +char readChar(unsigned char** pptr); +void writeChar(unsigned char** pptr, char c); +void writeInt(unsigned char** pptr, int anInt); +int readMQTTLenString(MQTTString* mqttstring, unsigned char** pptr, unsigned char* enddata); +void writeCString(unsigned char** pptr, const char* string); +void writeMQTTString(unsigned char** pptr, MQTTString mqttstring); + +DLLExport int MQTTPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)); + +typedef struct { + int (*getfn)(void *, unsigned char*, int); /* must return -1 for error, 0 for call again, or the number of bytes read */ + void *sck; /* pointer to whatever the system may use to identify the transport */ + int multiplier; + int rem_len; + int len; + char state; +}MQTTTransport; + +int MQTTPacket_readnb(unsigned char* buf, int buflen, MQTTTransport *trp); + +#ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ +} +#endif + + +#endif /* MQTTPACKET_H_ */ diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTPublish.h b/APP_Framework/Applications/app_test/test_mqttclient/MQTTPublish.h new file mode 100644 index 000000000..88aca927e --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTPublish.h @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ + +#ifndef MQTTPUBLISH_H_ +#define MQTTPUBLISH_H_ + +#if !defined(DLLImport) + #define DLLImport +#endif +#if !defined(DLLExport) + #define DLLExport +#endif + +DLLExport int MQTTSerialize_publish(unsigned char* buf, int buflen, unsigned char dup, int qos, unsigned char retained, unsigned short packetid, + MQTTString topicName, unsigned char* payload, int payloadlen); + +DLLExport int MQTTDeserialize_publish(unsigned char* dup, int* qos, unsigned char* retained, unsigned short* packetid, MQTTString* topicName, + unsigned char** payload, int32_t* payloadlen, unsigned char* buf, int len); + +DLLExport int MQTTSerialize_puback(unsigned char* buf, int buflen, unsigned short packetid); +DLLExport int MQTTSerialize_pubrel(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid); +DLLExport int MQTTSerialize_pubcomp(unsigned char* buf, int buflen, unsigned short packetid); + +#endif /* MQTTPUBLISH_H_ */ diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTSerializePublish.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTSerializePublish.c new file mode 100644 index 000000000..77a58b54a --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTSerializePublish.c @@ -0,0 +1,169 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Ian Craggs - fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=453144 + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + + +/** + * Determines the length of the MQTT publish packet that would be produced using the supplied parameters + * @param qos the MQTT QoS of the publish (packetid is omitted for QoS 0) + * @param topicName the topic name to be used in the publish + * @param payloadlen the length of the payload to be sent + * @return the length of buffer needed to contain the serialized version of the packet + */ +int MQTTSerialize_publishLength(int qos, MQTTString topicName, int payloadlen) +{ + int len = 0; + + len += 2 + MQTTstrlen(topicName) + payloadlen; + if (qos > 0) + len += 2; /* packetid */ + return len; +} + + +/** + * Serializes the supplied publish data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param dup integer - the MQTT dup flag + * @param qos integer - the MQTT QoS value + * @param retained integer - the MQTT retained flag + * @param packetid integer - the MQTT packet identifier + * @param topicName MQTTString - the MQTT topic in the publish + * @param payload byte buffer - the MQTT publish payload + * @param payloadlen integer - the length of the MQTT payload + * @return the length of the serialized data. <= 0 indicates error + */ +int MQTTSerialize_publish(unsigned char* buf, int buflen, unsigned char dup, int qos, unsigned char retained, unsigned short packetid, + MQTTString topicName, unsigned char* payload, int payloadlen) +{ + unsigned char *ptr = buf; + MQTTHeader header = {0}; + int rem_len = 0; + int rc = 0; + + FUNC_ENTRY; + if (MQTTPacket_len(rem_len = MQTTSerialize_publishLength(qos, topicName, payloadlen)) > buflen) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.bits.type = PUBLISH; + header.bits.dup = dup; + header.bits.qos = qos; + header.bits.retain = retained; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; + + writeMQTTString(&ptr, topicName); + + if (qos > 0) + writeInt(&ptr, packetid); + + memcpy(ptr, payload, payloadlen); + ptr += payloadlen; + + rc = ptr - buf; + +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + + +/** + * Serializes the ack packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param type the MQTT packet type + * @param dup the MQTT dup flag + * @param packetid the MQTT packet identifier + * @return serialized length, or error if 0 + */ +int MQTTSerialize_ack(unsigned char* buf, int buflen, unsigned char packettype, unsigned char dup, unsigned short packetid) +{ + MQTTHeader header = {0}; + int rc = 0; + unsigned char *ptr = buf; + + FUNC_ENTRY; + if (buflen < 4) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + header.bits.type = packettype; + header.bits.dup = dup; + header.bits.qos = (packettype == PUBREL) ? 1 : 0; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ + writeInt(&ptr, packetid); + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes a puback packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param packetid integer - the MQTT packet identifier + * @return serialized length, or error if 0 + */ +int MQTTSerialize_puback(unsigned char* buf, int buflen, unsigned short packetid) +{ + return MQTTSerialize_ack(buf, buflen, PUBACK, 0, packetid); +} + + +/** + * Serializes a pubrel packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param dup integer - the MQTT dup flag + * @param packetid integer - the MQTT packet identifier + * @return serialized length, or error if 0 + */ +int MQTTSerialize_pubrel(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid) +{ + return MQTTSerialize_ack(buf, buflen, PUBREL, dup, packetid); +} + + +/** + * Serializes a pubrel packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param packetid integer - the MQTT packet identifier + * @return serialized length, or error if 0 + */ +int MQTTSerialize_pubcomp(unsigned char* buf, int buflen, unsigned short packetid) +{ + return MQTTSerialize_ack(buf, buflen, PUBCOMP, 0, packetid); +} + + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribe.h b/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribe.h new file mode 100644 index 000000000..4b702bd59 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribe.h @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ + +#ifndef MQTTSUBSCRIBE_H_ +#define MQTTSUBSCRIBE_H_ + +#if !defined(DLLImport) + #define DLLImport +#endif +#if !defined(DLLExport) + #define DLLExport +#endif + +DLLExport int MQTTSerialize_subscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, + int count, MQTTString topicFilters[], int32_t requestedQoSs[]); + +DLLExport int MQTTDeserialize_subscribe(unsigned char* dup, unsigned short* packetid, + int maxcount, int* count, MQTTString topicFilters[], int requestedQoSs[], unsigned char* buf, int len); + +DLLExport int MQTTSerialize_suback(unsigned char* buf, int buflen, unsigned short packetid, int count, int* grantedQoSs); + +DLLExport int MQTTDeserialize_suback(unsigned short* packetid, int maxcount, int32_t* count, int32_t grantedQoSs[], unsigned char* buf, int len); + + +#endif /* MQTTSUBSCRIBE_H_ */ diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribeClient.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribeClient.c new file mode 100644 index 000000000..dc131882d --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribeClient.c @@ -0,0 +1,137 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + +/** + * Determines the length of the MQTT subscribe packet that would be produced using the supplied parameters + * @param count the number of topic filter strings in topicFilters + * @param topicFilters the array of topic filter strings to be used in the publish + * @return the length of buffer needed to contain the serialized version of the packet + */ +int MQTTSerialize_subscribeLength(int count, MQTTString topicFilters[]) +{ + int i; + int len = 2; /* packetid */ + + for (i = 0; i < count; ++i) + len += 2 + MQTTstrlen(topicFilters[i]) + 1; /* length + topic + req_qos */ + return len; +} + + +/** + * Serializes the supplied subscribe data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied bufferr + * @param dup integer - the MQTT dup flag + * @param packetid integer - the MQTT packet identifier + * @param count - number of members in the topicFilters and reqQos arrays + * @param topicFilters - array of topic filter names + * @param requestedQoSs - array of requested QoS + * @return the length of the serialized data. <= 0 indicates error + */ +int MQTTSerialize_subscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, int count, + MQTTString topicFilters[], int32_t requestedQoSs[]) +{ + unsigned char *ptr = buf; + MQTTHeader header = {0}; + int rem_len = 0; + int rc = 0; + int i = 0; + + FUNC_ENTRY; + if (MQTTPacket_len(rem_len = MQTTSerialize_subscribeLength(count, topicFilters)) > buflen) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = SUBSCRIBE; + header.bits.dup = dup; + header.bits.qos = 1; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; + + writeInt(&ptr, packetid); + + for (i = 0; i < count; ++i) + { + writeMQTTString(&ptr, topicFilters[i]); + writeChar(&ptr, requestedQoSs[i]); + } + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + + +/** + * Deserializes the supplied (wire) buffer into suback data + * @param packetid returned integer - the MQTT packet identifier + * @param maxcount - the maximum number of members allowed in the grantedQoSs array + * @param count returned integer - number of members in the grantedQoSs array + * @param grantedQoSs returned array of integers - the granted qualities of service + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int MQTTDeserialize_suback(unsigned short* packetid, int maxcount, int32_t* count, int32_t grantedQoSs[], unsigned char* buf, int buflen) +{ + MQTTHeader header = {0}; + unsigned char* curdata = buf; + unsigned char* enddata = NULL; + int rc = 0; + int mylen; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + if (header.bits.type != SUBACK) + goto exit; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + if (enddata - curdata < 2) + goto exit; + + *packetid = readInt(&curdata); + + *count = 0; + while (curdata < enddata) + { + if (*count > maxcount) + { + rc = -1; + goto exit; + } + grantedQoSs[(*count)++] = readChar(&curdata); + } + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribeServer.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribeServer.c new file mode 100644 index 000000000..5579645fe --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTSubscribeServer.c @@ -0,0 +1,112 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + + +/** + * Deserializes the supplied (wire) buffer into subscribe data + * @param dup integer returned - the MQTT dup flag + * @param packetid integer returned - the MQTT packet identifier + * @param maxcount - the maximum number of members allowed in the topicFilters and requestedQoSs arrays + * @param count - number of members in the topicFilters and requestedQoSs arrays + * @param topicFilters - array of topic filter names + * @param requestedQoSs - array of requested QoS + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return the length of the serialized data. <= 0 indicates error + */ +int MQTTDeserialize_subscribe(unsigned char* dup, unsigned short* packetid, int maxcount, int* count, MQTTString topicFilters[], + int requestedQoSs[], unsigned char* buf, int buflen) +{ + MQTTHeader header = {0}; + unsigned char* curdata = buf; + unsigned char* enddata = NULL; + int rc = -1; + int mylen = 0; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + if (header.bits.type != SUBSCRIBE) + goto exit; + *dup = header.bits.dup; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + + *packetid = readInt(&curdata); + + *count = 0; + while (curdata < enddata) + { + if (!readMQTTLenString(&topicFilters[*count], &curdata, enddata)) + goto exit; + if (curdata >= enddata) /* do we have enough data to read the req_qos version byte? */ + goto exit; + requestedQoSs[*count] = readChar(&curdata); + (*count)++; + } + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes the supplied suback data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param packetid integer - the MQTT packet identifier + * @param count - number of members in the grantedQoSs array + * @param grantedQoSs - array of granted QoS + * @return the length of the serialized data. <= 0 indicates error + */ +int MQTTSerialize_suback(unsigned char* buf, int buflen, unsigned short packetid, int count, int* grantedQoSs) +{ + MQTTHeader header = {0}; + int rc = -1; + unsigned char *ptr = buf; + int i; + + FUNC_ENTRY; + if (buflen < 2 + count) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + header.byte = 0; + header.bits.type = SUBACK; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, 2 + count); /* write remaining length */ + + writeInt(&ptr, packetid); + + for (i = 0; i < count; ++i) + writeChar(&ptr, grantedQoSs[i]); + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribe.h b/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribe.h new file mode 100644 index 000000000..355ca9a42 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribe.h @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ + +#ifndef MQTTUNSUBSCRIBE_H_ +#define MQTTUNSUBSCRIBE_H_ + +#if !defined(DLLImport) + #define DLLImport +#endif +#if !defined(DLLExport) + #define DLLExport +#endif + +DLLExport int MQTTSerialize_unsubscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, + int count, MQTTString topicFilters[]); + +DLLExport int MQTTDeserialize_unsubscribe(unsigned char* dup, unsigned short* packetid, int max_count, int* count, MQTTString topicFilters[], + unsigned char* buf, int len); + +DLLExport int MQTTSerialize_unsuback(unsigned char* buf, int buflen, unsigned short packetid); + +DLLExport int MQTTDeserialize_unsuback(unsigned short* packetid, unsigned char* buf, int len); + +#endif /* MQTTUNSUBSCRIBE_H_ */ diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribeClient.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribeClient.c new file mode 100644 index 000000000..e7ec53021 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribeClient.c @@ -0,0 +1,106 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + +/** + * Determines the length of the MQTT unsubscribe packet that would be produced using the supplied parameters + * @param count the number of topic filter strings in topicFilters + * @param topicFilters the array of topic filter strings to be used in the publish + * @return the length of buffer needed to contain the serialized version of the packet + */ +int MQTTSerialize_unsubscribeLength(int count, MQTTString topicFilters[]) +{ + int i; + int len = 2; /* packetid */ + + for (i = 0; i < count; ++i) + len += 2 + MQTTstrlen(topicFilters[i]); /* length + topic*/ + return len; +} + + +/** + * Serializes the supplied unsubscribe data into the supplied buffer, ready for sending + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @param dup integer - the MQTT dup flag + * @param packetid integer - the MQTT packet identifier + * @param count - number of members in the topicFilters array + * @param topicFilters - array of topic filter names + * @return the length of the serialized data. <= 0 indicates error + */ +int MQTTSerialize_unsubscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, + int count, MQTTString topicFilters[]) +{ + unsigned char *ptr = buf; + MQTTHeader header = {0}; + int rem_len = 0; + int rc = -1; + int i = 0; + + FUNC_ENTRY; + if (MQTTPacket_len(rem_len = MQTTSerialize_unsubscribeLength(count, topicFilters)) > buflen) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = UNSUBSCRIBE; + header.bits.dup = dup; + header.bits.qos = 1; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; + + writeInt(&ptr, packetid); + + for (i = 0; i < count; ++i) + writeMQTTString(&ptr, topicFilters[i]); + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Deserializes the supplied (wire) buffer into unsuback data + * @param packetid returned integer - the MQTT packet identifier + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int MQTTDeserialize_unsuback(unsigned short* packetid, unsigned char* buf, int buflen) +{ + unsigned char type = 0; + unsigned char dup = 0; + int rc = 0; + + FUNC_ENTRY; + rc = MQTTDeserialize_ack(&type, &dup, packetid, buf, buflen); + if (type == UNSUBACK) + rc = 1; + FUNC_EXIT_RC(rc); + return rc; +} + + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribeServer.c b/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribeServer.c new file mode 100644 index 000000000..42b6102a7 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/MQTTUnsubscribeServer.c @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + + +/** + * Deserializes the supplied (wire) buffer into unsubscribe data + * @param dup integer returned - the MQTT dup flag + * @param packetid integer returned - the MQTT packet identifier + * @param maxcount - the maximum number of members allowed in the topicFilters and requestedQoSs arrays + * @param count - number of members in the topicFilters and requestedQoSs arrays + * @param topicFilters - array of topic filter names + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return the length of the serialized data. <= 0 indicates error + */ +int MQTTDeserialize_unsubscribe(unsigned char* dup, unsigned short* packetid, int maxcount, int* count, MQTTString topicFilters[], + unsigned char* buf, int len) +{ + MQTTHeader header = {0}; + unsigned char* curdata = buf; + unsigned char* enddata = NULL; + int rc = 0; + int mylen = 0; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + if (header.bits.type != UNSUBSCRIBE) + goto exit; + *dup = header.bits.dup; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + + *packetid = readInt(&curdata); + + *count = 0; + while (curdata < enddata) + { + if (!readMQTTLenString(&topicFilters[*count], &curdata, enddata)) + goto exit; + (*count)++; + } + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes the supplied unsuback data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param packetid integer - the MQTT packet identifier + * @return the length of the serialized data. <= 0 indicates error + */ +int MQTTSerialize_unsuback(unsigned char* buf, int buflen, unsigned short packetid) +{ + MQTTHeader header = {0}; + int rc = 0; + unsigned char *ptr = buf; + + FUNC_ENTRY; + if (buflen < 2) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + header.byte = 0; + header.bits.type = UNSUBACK; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ + + writeInt(&ptr, packetid); + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/Makefile b/APP_Framework/Applications/app_test/test_mqttclient/Makefile new file mode 100644 index 000000000..437645fde --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/Makefile @@ -0,0 +1,14 @@ +SRC_FILES += test_mqttclient.c\ + MQTTPacket.c\ + MQTTConnectClient.c \ + MQTTConnectServer.c \ + MQTTDeserializePublish.c \ + MQTTFormat.c \ + MQTTSerializePublish.c \ + MQTTSubscribeClient.c \ + MQTTSubscribeServer.c \ + MQTTUnsubscribeClient.c \ + MQTTUnsubscribeServer.c \ + transport.c + +include $(KERNEL_ROOT)/compiler.mk \ No newline at end of file diff --git a/APP_Framework/Applications/app_test/test_mqttclient/README.md b/APP_Framework/Applications/app_test/test_mqttclient/README.md new file mode 100644 index 000000000..2aeca82e6 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/README.md @@ -0,0 +1,15 @@ +本代码实现了MQTT对服务器订阅主体并发送信息功能 + +测试流程为: + +首先执行setip命令,设置设备ip地址 + +![图片2](.\图片2.png) + +随后执行“MqttSocketSendTest 服务器ip”命令,订阅主题并发送test信息 + +![图片1](.\图片1.png) + +最终服务器接收到信息,如图所示 + +![图片3](.\图片3.png) diff --git a/APP_Framework/Applications/app_test/test_mqttclient/StackTrace.h b/APP_Framework/Applications/app_test/test_mqttclient/StackTrace.h new file mode 100644 index 000000000..2808a0d18 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/StackTrace.h @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Ian Craggs - fix for bug #434081 + *******************************************************************************/ + +#ifndef STACKTRACE_H_ +#define STACKTRACE_H_ + +#include +#define NOSTACKTRACE 1 + +#if defined(NOSTACKTRACE) +#define FUNC_ENTRY +#define FUNC_ENTRY_NOLOG +#define FUNC_ENTRY_MED +#define FUNC_ENTRY_MAX +#define FUNC_EXIT +#define FUNC_EXIT_NOLOG +#define FUNC_EXIT_MED +#define FUNC_EXIT_MAX +#define FUNC_EXIT_RC(x) +#define FUNC_EXIT_MED_RC(x) +#define FUNC_EXIT_MAX_RC(x) + +#else + +#if defined(WIN32) +#define inline __inline +#define FUNC_ENTRY StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MINIMUM) +#define FUNC_ENTRY_NOLOG StackTrace_entry(__FUNCTION__, __LINE__, -1) +#define FUNC_ENTRY_MED StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MEDIUM) +#define FUNC_ENTRY_MAX StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MAXIMUM) +#define FUNC_EXIT StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MINIMUM) +#define FUNC_EXIT_NOLOG StackTrace_exit(__FUNCTION__, __LINE__, -1) +#define FUNC_EXIT_MED StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MEDIUM) +#define FUNC_EXIT_MAX StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MAXIMUM) +#define FUNC_EXIT_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MINIMUM) +#define FUNC_EXIT_MED_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MEDIUM) +#define FUNC_EXIT_MAX_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MAXIMUM) +#else +#define FUNC_ENTRY StackTrace_entry(__func__, __LINE__, TRACE_MINIMUM) +#define FUNC_ENTRY_NOLOG StackTrace_entry(__func__, __LINE__, -1) +#define FUNC_ENTRY_MED StackTrace_entry(__func__, __LINE__, TRACE_MEDIUM) +#define FUNC_ENTRY_MAX StackTrace_entry(__func__, __LINE__, TRACE_MAXIMUM) +#define FUNC_EXIT StackTrace_exit(__func__, __LINE__, NULL, TRACE_MINIMUM) +#define FUNC_EXIT_NOLOG StackTrace_exit(__func__, __LINE__, NULL, -1) +#define FUNC_EXIT_MED StackTrace_exit(__func__, __LINE__, NULL, TRACE_MEDIUM) +#define FUNC_EXIT_MAX StackTrace_exit(__func__, __LINE__, NULL, TRACE_MAXIMUM) +#define FUNC_EXIT_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MINIMUM) +#define FUNC_EXIT_MED_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MEDIUM) +#define FUNC_EXIT_MAX_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MAXIMUM) + +void StackTrace_entry(const char* name, int line, int trace); +void StackTrace_exit(const char* name, int line, void* return_value, int trace); + +void StackTrace_printStack(FILE* dest); +char* StackTrace_get(unsigned long); + +#endif + +#endif + + + + +#endif /* STACKTRACE_H_ */ diff --git a/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.c b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.c new file mode 100644 index 000000000..c316935d5 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.c @@ -0,0 +1,728 @@ +#include +#include "test_mqttclient.h" +#include +#ifdef ADD_XIZI_FEATURES +#include +#include +#include "lwip/sys.h" +#include "lwip/api.h" + +#include "MQTTPacket.h" +#include "MQTTSubscribe.h" +#include "transport.h" +#include + +#endif + +#ifdef ADD_NUTTX_FEATURES +#include +#include +#include +#include "stdio.h" +#endif + + +#define MQTT_DEMO_BUF_SIZE 65535 +#define MQTT_DEMO_SEND_TIMES 20 +#define LWIP_MQTT_DEMO_TASK_STACK_SIZE 4096 +#define LWIP_MQTT_DEMO_TASK_PRIO 20 + +static char mqtt_demo_ipaddr[] = {192, 168, 130, 77}; +static char mqtt_demo_netmask[] = {255, 255, 254, 0}; +static char mqtt_demo_gwaddr[] = {192, 168, 130, 1}; + +static pthread_t mqtt_client_task; +static pthread_t mqtt_server_task; + +static uint16_t mqtt_socket_port = 1883; +static char mqtt_ip_str[128] = {192,168,100,1}; + +void MqttSocketConfigParam(char *ip_str) +{ + int ip1, ip2, ip3, ip4, port = 0; + + if(ip_str == NULL) + return; + + if(sscanf(ip_str, "%d.%d.%d.%d:%d", &ip1, &ip2, &ip3, &ip4, &port)) { + printf("config ip %s port %d\n", ip_str, port); + strcpy(mqtt_ip_str, ip_str); + if(port) + mqtt_socket_port = port; + return; + } + + if(sscanf(ip_str, "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4)) { + printf("config ip %s\n", ip_str); + strcpy(mqtt_ip_str, ip_str); + } +} + +MQTT_USER_MSG mqtt_user_msg; + +uint8_t MQTT_Connect(void) +{ + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; + uint8_t buf[200]; + int buflen = sizeof(buf); + int len = 0; + data.clientID.cstring = CLIENT_ID; //随机 + data.keepAliveInterval = KEEPLIVE_TIME; //保持活跃 + data.username.cstring = USER_NAME; //用户名 + data.password.cstring = PASSWORD; //密钥 + data.MQTTVersion = MQTT_VERSION; //3表示3.1版本,4表示3.11版本 + data.cleansession = 1; + //组装消息 + len = MQTTSerialize_connect((unsigned char *)buf, buflen, &data); + //发送消息 + transport_sendPacketBuffer(buf, len); + + /* 等待连接响应 */ + if (MQTTPacket_read(buf, buflen, transport_getdata) == CONNACK) + { + unsigned char sessionPresent, connack_rc; + if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) != 1 || connack_rc != 0) + { + lw_print("无法连接,错误代码是: %d!\n", connack_rc); + return Connect_NOK; + } + else + { + lw_print("用户名与密钥验证成功,MQTT连接成功!\n"); + return Connect_OK; + } + } + else + lw_print("MQTT连接无响应!\n"); + return Connect_NOTACK; +} + + +int32_t MQTT_PingReq(int32_t sock) +{ + int32_t len; + uint8_t buf[200]; + int32_t buflen = sizeof(buf); + fd_set readfd; + struct timeval tv; + tv.tv_sec = 5; + tv.tv_usec = 0; + + FD_ZERO(&readfd); + FD_SET(sock,&readfd); + + len = MQTTSerialize_pingreq(buf, buflen); + transport_sendPacketBuffer(buf, len); + + //等待可读事件 + if(select(sock+1,&readfd,NULL,NULL,&tv) == 0) + return -1; + + //有可读事件 + if(FD_ISSET(sock,&readfd) == 0) + return -2; + + if(MQTTPacket_read(buf, buflen, transport_getdata) != PINGRESP) + return -3; + + return 0; + +} + + +/************************************************************************ +** 函数名称: MQTTSubscribe +** 函数功能: 订阅消息 +** 入口参数: int32_t sock:套接字 +** int8_t *topic:主题 +** enum QoS pos:消息质量 +** 出口参数: >=0:发送成功 <0:发送失败 +** 备 注: +************************************************************************/ +int32_t MQTTSubscribe(int32_t sock,char *topic,enum QoS pos) +{ + static uint32_t PacketID = 0; + uint16_t packetidbk = 0; + int32_t conutbk = 0; + uint8_t buf[100]; + int32_t buflen = sizeof(buf); + MQTTString topicString = MQTTString_initializer; + int32_t len; + int32_t req_qos,qosbk; + + fd_set readfd; + struct timeval tv; + tv.tv_sec = 2; + tv.tv_usec = 0; + + FD_ZERO(&readfd); + FD_SET(sock,&readfd); + + //复制主题 + topicString.cstring = (char *)topic; + //订阅质量 + req_qos = pos; + + //串行化订阅消息 + len = MQTTSerialize_subscribe(buf, buflen, 0, PacketID++, 1, &topicString, &req_qos); + //发送TCP数据 + if(transport_sendPacketBuffer(buf, len) < 0) + return -1; + + //等待可读事件--等待超时 + if(select(sock+1,&readfd,NULL,NULL,&tv) == 0) + return -2; + //有可读事件--没有可读事件 + if(FD_ISSET(sock,&readfd) == 0) + return -3; + + //等待订阅返回--未收到订阅返回 + if(MQTTPacket_read(buf, buflen, transport_getdata) != SUBACK) + return -4; + + //拆订阅回应包 + if(MQTTDeserialize_suback(&packetidbk,1, &conutbk, &qosbk, buf, buflen) != 1) + return -5; + + //检测返回数据的正确性 + if((qosbk == 0x80)||(packetidbk != (PacketID-1))) + return -6; + + //订阅成功 + return 0; +} + +int32_t ReadPacketTimeout(int32_t sock,uint8_t *buf,int32_t buflen,uint32_t timeout) +{ + fd_set readfd; + struct timeval tv; + if(timeout != 0) + { + tv.tv_sec = timeout; + tv.tv_usec = 0; + FD_ZERO(&readfd); + FD_SET(sock,&readfd); + + + if(select(sock+1,&readfd,NULL,NULL,&tv) == 0) + return -1; + + if(FD_ISSET(sock,&readfd) == 0) + return -1; + } + + return MQTTPacket_read(buf, buflen, transport_getdata); +} + +void deliverMessage(MQTTString *TopicName,MQTTMessage *msg,MQTT_USER_MSG *mqtt_user_msg) +{ + //消息质量 + mqtt_user_msg->msgqos = msg->qos; + //保存消息 + memcpy(mqtt_user_msg->msg,msg->payload,msg->payloadlen); + mqtt_user_msg->msg[msg->payloadlen] = 0; + //保存消息长度 + mqtt_user_msg->msglenth = msg->payloadlen; + //消息主题 + memcpy((char *)mqtt_user_msg->topic,TopicName->lenstring.data,TopicName->lenstring.len); + mqtt_user_msg->topic[TopicName->lenstring.len] = 0; + //消息ID + mqtt_user_msg->packetid = msg->id; + //标明消息合法 + mqtt_user_msg->valid = 1; +} + +void UserMsgCtl(MQTT_USER_MSG *msg) +{ + //这里处理数据只是打印,用户可以在这里添加自己的处理方式 + lw_print("****收到订阅的消息******\n"); + //���غ�����Ϣ + switch(msg->msgqos) + { + case 0: + lw_print("MQTT>>消息质量QoS0\n"); + break; + case 1: + lw_print("MQTT>>消息质量QoS1\n"); + break; + case 2: + lw_print("MQTT>>消息质量QoS2\n"); + break; + default: + lw_print("MQTT>>错误的消息质量\n"); + break; + } + lw_print("MQTT>>消息主题:%s\n",msg->topic); + lw_print("MQTT>>消息内容:%s\n",msg->msg); + lw_print("MQTT>>消息长度:%d\n",msg->msglenth); + Proscess(msg->msg); + //处理完后销毁数据 + msg->valid = 0; +} + + +void mqtt_pktype_ctl(uint8_t packtype,uint8_t *buf,uint32_t buflen) +{ + MQTTMessage msg; + int32_t rc; + MQTTString receivedTopic; + uint32_t len; + lw_print("packtype:%d\n",packtype); + switch(packtype) + { + case PUBLISH: + + if(MQTTDeserialize_publish(&msg.dup,(int*)&msg.qos, &msg.retained, &msg.id, &receivedTopic, + (unsigned char **)&msg.payload, &msg.payloadlen, buf, buflen) != 1) + return; + + deliverMessage(&receivedTopic,&msg,&mqtt_user_msg); + + + if(msg.qos == QOS0) + { + //QOS0-不需要ACK + //直接处理数据 + UserMsgCtl(&mqtt_user_msg); + return; + } + //发送PUBACK消息 + if(msg.qos == QOS1) + { + len =MQTTSerialize_puback(buf,buflen,mqtt_user_msg.packetid); + if(len == 0) + return; + //发送返回 + if(transport_sendPacketBuffer(buf,len)<0) + return; + //返回后处理消息 + UserMsgCtl(&mqtt_user_msg); + return; + } + + //对于质量2,只需要发送PUBREC就可以了 + if(msg.qos == QOS2) + { + len = MQTTSerialize_ack(buf, buflen, PUBREC, 0, mqtt_user_msg.packetid); + if(len == 0) + return; + //发送返回 + transport_sendPacketBuffer(buf,len); + } + break; + case PUBREL: + //解析包数据,必须包ID相同才可以 + rc = MQTTDeserialize_ack(&msg.type,&msg.dup, &msg.id, buf,buflen); + if((rc != 1)||(msg.type != PUBREL)||(msg.id != mqtt_user_msg.packetid)) + return ; + //收到PUBREL,需要处理并抛弃数据 + if(mqtt_user_msg.valid == 1) + { + //返回后处理消息 + UserMsgCtl(&mqtt_user_msg); + } + //串行化PUBCMP消息 + len = MQTTSerialize_pubcomp(buf,buflen,msg.id); + if(len == 0) + return; + //发送返回--PUBCOMP + transport_sendPacketBuffer(buf,len); + break; + case PUBACK://等级1客户端推送数据后,服务器返回 + break; + case PUBREC://等级2客户端推送数据后,服务器返回 + break; + case PUBCOMP://等级2客户端推送PUBREL后,服务器返回 + break; + default: + break; + } +} + + +static void *MqttSocketRecvTask(void *arg) +{ +MQTT_START: + lw_print("Recv begin**********\n"); + int fd = -1, clientfd; + int recv_len; + int ret; + char *recv_buf; + struct sockaddr_in mqtt_addr; + socklen_t addr_len; + + fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) { + lw_print("Socket error\n"); + return NULL; + } + + struct sockaddr_in mqtt_sock; + mqtt_sock.sin_family = AF_INET; + mqtt_sock.sin_port = htons(mqtt_socket_port); + mqtt_sock.sin_addr.s_addr = inet_addr(mqtt_ip_str); + + memset(&(mqtt_sock.sin_zero), 0, sizeof(mqtt_sock.sin_zero)); + + ret = connect(fd, (struct sockaddr *)&mqtt_sock, sizeof(struct sockaddr)); + + if (ret < 0) { + lw_print("Unable to connect %s:%d = %d\n", mqtt_ip_str, mqtt_socket_port, ret); + close(fd); + return NULL; + } + + lw_print("MQTT connect %s:%d success, begin to verify username and password.\n", mqtt_ip_str, mqtt_socket_port); + + if(MQTT_Connect() != Connect_OK) + { + lw_print("MQTT verify failed.\n"); + shutdown(fd, SHUT_WR); + recv(fd, NULL, (size_t)0, 0); + close(fd); + PrivTaskDelay(1000); + goto MQTT_START; + } + + lw_print("MQTT subscribe begin.\n"); + if(MQTTSubscribe(fd,(char *)TOPIC,QOS1) < 0) + { + lw_print("MQTT subscribe failed.\n"); + shutdown(fd, SHUT_WR); + recv(fd, NULL, (size_t)0, 0); + close(fd); + return NULL; + } + + lw_print("subscribe success.\n"); + + fd_set readfd; + uint8_t no_mqtt_msg_exchange = 1; + uint8_t buf[MSG_MAX_LEN]; + int32_t buflen = sizeof(buf); + int32_t type; + struct timeval tv; + tv.tv_sec = 0; + tv.tv_usec = 10; + + int32_t curtick=0; + + while(1) + { + // lw_print("waiting********\n"); + curtick +=1; + no_mqtt_msg_exchange = 1; + + FD_ZERO(&readfd); + FD_SET(fd,&readfd); + select(fd+1,&readfd,NULL,NULL,&tv); + + if(FD_ISSET(fd,&readfd) != 0) + { + + type = ReadPacketTimeout(fd,buf,buflen,0); + if(type != -1) + { + lw_print("ctl***********\n"); + mqtt_pktype_ctl(type,buf,buflen); + + no_mqtt_msg_exchange = 0; + + } + } + + if( curtick >(2*10000)) + { + curtick =0; + //判断是否有数据交换 + if(no_mqtt_msg_exchange == 0) + { + //如果有数据交换,这次就不需要发送PING消息 + continue; + } + + if(MQTT_PingReq(fd) < 0) + { + //重连服务器 + lw_print("发送保持活性ping失败....\n"); + goto CLOSE; + } + + + lw_print("发送保持活性ping作为心跳成功....\n"); + + no_mqtt_msg_exchange = 0; + } + } + +CLOSE: + lw_print("MQTT subscribe failed.\n"); + shutdown(fd, SHUT_WR); + recv(fd, NULL, (size_t)0, 0); + close(fd); + return NULL; + + +} + + + +void MqttSocketRecvTest(int argc, char *argv[]) +{ + if(argc >= 2) { + lw_print("lw: [%s] target ip %s\n", __func__, argv[1]); + MqttSocketConfigParam(argv[1]); + } + + + // ip4_addr_t dns_ip; + // netconn_gethostbyname(HOST_NAME, &dns_ip); + // char* host_ip = ip_ntoa(&dns_ip); + // lw_print("host name : %s , host_ip : %s\n",HOST_NAME,host_ip); + // MqttSocketConfigParam(host_ip); + + +#ifdef ADD_XIZI_FEATURES + lwip_config_tcp(0, mqtt_demo_ipaddr, mqtt_demo_netmask, mqtt_demo_gwaddr); + + pthread_attr_t attr; + attr.schedparam.sched_priority = LWIP_MQTT_DEMO_TASK_PRIO; + attr.stacksize = LWIP_MQTT_DEMO_TASK_STACK_SIZE; +#endif + +#ifdef ADD_NUTTX_FEATURES + pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER; + attr.priority = LWIP_mqtt_DEMO_TASK_PRIO; + attr.stacksize = LWIP_mqtt_DEMO_TASK_STACK_SIZE; +#endif + + PrivTaskCreate(&mqtt_server_task, &attr, &MqttSocketRecvTask, NULL); + PrivTaskStartup(&mqtt_server_task); +} + +PRIV_SHELL_CMD_FUNCTION(MqttSocketRecvTest, a tcp send sample, PRIV_SHELL_CMD_MAIN_ATTR); + + +typedef struct +{ + uint8_t humi_high8bit; //ԭʼ���ݣ�ʪ�ȸ�8λ + uint8_t humi_low8bit; //ԭʼ���ݣ�ʪ�ȵ�8λ + uint8_t temp_high8bit; //ԭʼ���ݣ��¶ȸ�8λ + uint8_t temp_low8bit; //ԭʼ���ݣ��¶ȸ�8λ + uint8_t check_sum; //У��� + double humidity; //ʵ��ʪ�� + double temperature; //ʵ���¶� +} DHT11_Data_TypeDef; + + +uint16_t GetNextPackID(void) +{ + static uint16_t pubpacketid = 0; + return pubpacketid++; +} + +int32_t WaitForPacket(int32_t sock,uint8_t packettype,uint8_t times) +{ + int32_t type; + uint8_t buf[MSG_MAX_LEN]; + uint8_t n = 0; + int32_t buflen = sizeof(buf); + do + { + //读取数据包 + type = ReadPacketTimeout(sock,buf,buflen,2); + if(type != -1) + mqtt_pktype_ctl(type,buf,buflen); + n++; + }while((type != packettype)&&(n < times)); + //收到期望的包 + if(type == packettype) + return 0; + else + return -1; +} + +int32_t MQTTMsgPublish(int32_t sock, char *topic, int8_t qos, uint8_t* msg) +{ + int8_t retained = 0; //保留标志位 + uint32_t msg_len; //数据长度 + uint8_t buf[MSG_MAX_LEN]; + int32_t buflen = sizeof(buf),len; + MQTTString topicString = MQTTString_initializer; + uint16_t packid = 0,packetidbk; + + //填充主题 + topicString.cstring = (char *)topic; + + //填充数据包ID + if((qos == QOS1)||(qos == QOS2)) + { + packid = GetNextPackID(); + } + else + { + qos = QOS0; + retained = 0; + packid = 0; + } + + msg_len = strlen((char *)msg); + + //推送消息 + len = MQTTSerialize_publish(buf, buflen, 0, qos, retained, packid, topicString, (unsigned char*)msg, msg_len); + if(len <= 0) + return -1; + if(transport_sendPacketBuffer(buf, len) < 0) + return -2; + + //质量等级0,不需要返回 + if(qos == QOS0) + { + return 0; + } + + //等级1 + if(qos == QOS1) + { + //等待PUBACK + if(WaitForPacket(sock,PUBACK,5) < 0) + return -3; + return 1; + + } + //等级2 + if(qos == QOS2) + { + //等待PUBREC + if(WaitForPacket(sock,PUBREC,5) < 0) + return -3; + //发送PUBREL + len = MQTTSerialize_pubrel(buf, buflen,0, packetidbk); + if(len == 0) + return -4; + if(transport_sendPacketBuffer(buf, len) < 0) + return -6; + //等待PUBCOMP + if(WaitForPacket(sock,PUBREC,5) < 0) + return -7; + return 2; + } + //等级错误 + return -8; +} + + +static void *MqttSocketSendTask(void *arg) +{ + + int fd = -1, clientfd; + int recv_len; + int ret; + char *recv_buf; + struct sockaddr_in mqtt_addr; + socklen_t addr_len; + + fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) { + lw_print("Socket error\n"); + return NULL; + } + + struct sockaddr_in mqtt_sock; + mqtt_sock.sin_family = AF_INET; + mqtt_sock.sin_port = htons(mqtt_socket_port); + mqtt_sock.sin_addr.s_addr = inet_addr(mqtt_ip_str); + + memset(&(mqtt_sock.sin_zero), 0, sizeof(mqtt_sock.sin_zero)); + + ret = connect(fd, (struct sockaddr *)&mqtt_sock, sizeof(struct sockaddr)); + + if (ret < 0) { + lw_print("Unable to connect %s:%d = %d\n", mqtt_ip_str, mqtt_socket_port, ret); + close(fd); + return NULL; + } + + lw_print("MQTT connect %s:%d success, begin to verify hostname and password.\n", mqtt_ip_str, mqtt_socket_port); + + if(MQTT_Connect() != Connect_OK) + { + lw_print("MQTT verify failed.\n"); + shutdown(fd, SHUT_WR); + recv(fd, NULL, (size_t)0, 0); + close(fd); + return NULL; + } + + lw_print("MQTT subscribe begin.\n"); + if(MQTTSubscribe(fd,(char *)TOPIC,QOS1) < 0) + { + lw_print("MQTT subscribe failed.\n"); + shutdown(fd, SHUT_WR); + recv(fd, NULL, (size_t)0, 0); + close(fd); + return NULL; + } + + lw_print("subscribe success.\n"); + + + + uint8_t no_mqtt_msg_exchange = 1; + uint32_t curtick=0; + uint8_t res; + + cJSON* cJSON_Data = NULL; + cJSON_Data = cJSON_Data_Init(); + DHT11_Data_TypeDef* recv_data; + + double a,b; + while(1) + { + curtick+=1; + char* p ="Hello,here is hc"; + ret = MQTTMsgPublish(fd,(char*)TOPIC,QOS0,(uint8_t*)p); + if(ret >= 0) + { + no_mqtt_msg_exchange = 0; + PrivTaskDelay(1000); + } + } +} + + +void MqttSocketSendTest(int argc, char *argv[]) +{ + if(argc >= 2) { + lw_print("lw: [%s] target ip %s\n", __func__, argv[1]); + MqttSocketConfigParam(argv[1]); + } + + + // ip4_addr_t dns_ip; + // netconn_gethostbyname(HOST_NAME, &dns_ip); + // char* host_ip = ip_ntoa(&dns_ip); + // lw_print("host name : %s , host_ip : %s\n",HOST_NAME,host_ip); + // MqttSocketConfigParam(host_ip); + + +#ifdef ADD_XIZI_FEATURES + lwip_config_tcp(0, mqtt_demo_ipaddr, mqtt_demo_netmask, mqtt_demo_gwaddr); + + pthread_attr_t attr; + attr.schedparam.sched_priority = LWIP_MQTT_DEMO_TASK_PRIO; + attr.stacksize = LWIP_MQTT_DEMO_TASK_STACK_SIZE; +#endif + +#ifdef ADD_NUTTX_FEATURES + pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER; + attr.priority = LWIP_mqtt_DEMO_TASK_PRIO; + attr.stacksize = LWIP_mqtt_DEMO_TASK_STACK_SIZE; +#endif + + PrivTaskCreate(&mqtt_client_task, &attr, &MqttSocketSendTask, NULL); + PrivTaskStartup(&mqtt_client_task); +} + +PRIV_SHELL_CMD_FUNCTION(MqttSocketSendTest, a tcp send sample, PRIV_SHELL_CMD_MAIN_ATTR); + diff --git a/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h new file mode 100644 index 000000000..1d9e85566 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h @@ -0,0 +1,75 @@ +#include + +#define MSG_MAX_LEN 1024 +#define MSG_TOPIC_LEN 50 +#define KEEPLIVE_TIME 650 +#define MQTT_VERSION 4 + +#ifdef LWIP_DNS +#define HOST_NAME "iot-06z00im0uwa0ki2.mqtt.iothub.aliyuncs.com" //服务器域名 +#else +#define HOST_NAME "iot-06z00im0uwa0ki2.mqtt.iothub.aliyuncs.com" //服务器IP地址 +#endif + + +//#define HOST_IP "129.204.201.235" +#define HOST_PORT 1883 //由于是TCP连接,端口必须是1883 + +#define CLIENT_ID "iw3rn3pa11K.test|securemode=2,signmethod=hmacsha256,timestamp=1689296035604|" //随机的id +#define USER_NAME "test&iw3rn3pa11K" //用户名 +#define PASSWORD "7b948d22fe46f0f63d1a403376d26e7cb298abc227d29e44311d7040307a71f8" //秘钥 + +// #define CLIENT_ID "hc123456789" //随机的id +// #define USER_NAME "xiuos" //用户名 +// #define PASSWORD "xiuos" //秘钥 + +#define TOPIC "/iw3rn3pa11K/test/user/Test" //订阅的主题 + +#define TEST_MESSAGE "test_message" //发送测试消息 + +enum QoS +{ QOS0 = 0, + QOS1, + QOS2 +}; + +enum MQTT_Connect +{ + Connect_OK = 0, + Connect_NOK, + Connect_NOTACK +}; + +//数据交互结构体 +typedef struct __MQTTMessage +{ + uint32_t qos; + uint8_t retained; + uint8_t dup; + uint16_t id; + uint8_t type; + void *payload; + int32_t payloadlen; +}MQTTMessage; + +//用户接收消息结构体 +typedef struct __MQTT_MSG +{ + uint8_t msgqos; //消息质量 + uint8_t msg[MSG_MAX_LEN]; //消息 + uint32_t msglenth; //消息长度 + uint8_t topic[MSG_TOPIC_LEN]; //主题 + uint16_t packetid; //消息ID + uint8_t valid; //标明消息是否有效 +}MQTT_USER_MSG; + +//发送消息结构体 +typedef struct +{ + int8_t topic[MSG_TOPIC_LEN]; + int8_t qos; + int8_t retained; + + uint8_t msg[MSG_MAX_LEN]; + uint8_t msglen; +} mqtt_recv_msg_t, *p_mqtt_recv_msg_t, mqtt_send_msg_t, *p_mqtt_send_msg_t; \ No newline at end of file diff --git a/APP_Framework/Applications/app_test/test_mqttclient/transport.c b/APP_Framework/Applications/app_test/test_mqttclient/transport.c new file mode 100644 index 000000000..d2c187091 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/transport.c @@ -0,0 +1,102 @@ +#include "transport.h" +#include "lwip/opt.h" +#include "lwip/arch.h" +#include "lwip/api.h" +#include "lwip/inet.h" +#include "lwip/sockets.h" +#include "string.h" + +static int mysock; + +/************************************************************************ +** ��������: transport_sendPacketBuffer +** ��������: ��TCP��ʽ�������� +** ��ڲ���: unsigned char* buf�����ݻ����� +** int buflen�����ݳ��� +** ���ڲ���: <0��������ʧ�� +************************************************************************/ +int32_t transport_sendPacketBuffer( uint8_t* buf, int32_t buflen) +{ + int32_t rc; + rc = write(mysock, buf, buflen); + return rc; +} + +/************************************************************************ +** ��������: transport_getdata +** ��������: �������ķ�ʽ����TCP���� +** ��ڲ���: unsigned char* buf�����ݻ����� +** int count�����ݳ��� +** ���ڲ���: <=0��������ʧ�� +************************************************************************/ +int transport_getdata(unsigned char* buf, int count) +{ + int32_t rc; + + rc = recv(mysock, buf, count, 0); + lw_print("get data : %lx\n",rc); + return rc; +} + + + +/************************************************************************ +** ��������: transport_open +** ��������: ��һ���ӿڣ����Һͷ����� �������� +** ��ڲ���: char* servip:���������� +** int port:�˿ں� +** ���ڲ���: <0������ʧ�� +************************************************************************/ +// int32_t transport_open(int8_t* servip, int32_t port) +// { +// int32_t *sock = &mysock; +// int32_t ret; +// // int32_t opt; +// struct sockaddr_in addr; + +// //��ʼ����������Ϣ +// memset(&addr,0,sizeof(addr)); +// addr.sin_len = sizeof(addr); +// addr.sin_family = AF_INET; +// //��д�������˿ں� +// addr.sin_port = PP_HTONS(port); +// //��д������IP��ַ +// addr.sin_addr.s_addr = inet_addr((const char*)servip); + +// //����SOCK +// *sock = socket(AF_INET,SOCK_STREAM,0); +// //���ӷ����� +// ret = connect(*sock,(struct sockaddr*)&addr,sizeof(addr)); +// if(ret != 0) +// { +// //�ر����� +// close(*sock); +// //����ʧ�� +// return -1; +// } +// //���ӳɹ�,���ó�ʱʱ��1000ms +// // opt = 1000; +// // setsockopt(*sock,SOL_SOCKET,SO_RCVTIMEO,&opt,sizeof(int)); + +// //�����׽��� +// return *sock; +// } + + +/************************************************************************ +** ��������: transport_close +** ��������: �ر��׽��� +** ��ڲ���: unsigned char* buf�����ݻ����� +** int buflen�����ݳ��� +** ���ڲ���: <0��������ʧ�� +************************************************************************/ +int32_t transport_close(void) +{ + + int rc; +// rc = close(mysock); + rc = shutdown(mysock, SHUT_WR); + rc = recv(mysock, NULL, (size_t)0, 0); + rc = close(mysock); + return rc; +} diff --git a/APP_Framework/Applications/app_test/test_mqttclient/transport.h b/APP_Framework/Applications/app_test/test_mqttclient/transport.h new file mode 100644 index 000000000..a11ef1923 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_mqttclient/transport.h @@ -0,0 +1,45 @@ +#ifndef __TRANSPORT_H +#define __TRANSPORT_H + +#include + + +/************************************************************************ +** ��������: transport_sendPacketBuffer +** ��������: ��TCP��ʽ�������� +** ��ڲ���: unsigned char* buf�����ݻ����� +** int buflen�����ݳ��� +** ���ڲ���: <0��������ʧ�� +************************************************************************/ +int32_t transport_sendPacketBuffer( uint8_t* buf, int32_t buflen); + +/************************************************************************ +** ��������: transport_getdata +** ��������: �������ķ�ʽ����TCP���� +** ��ڲ���: unsigned char* buf�����ݻ����� +** int count�����ݳ��� +** ���ڲ���: <=0��������ʧ�� +************************************************************************/ +int transport_getdata(unsigned char* buf, int count); + +/************************************************************************ +** ��������: transport_open +** ��������: ��һ���ӿڣ����Һͷ����� �������� +** ��ڲ���: char* servip:���������� +** int port:�˿ں� +** ���ڲ���: <0������ʧ�� +************************************************************************/ +int32_t transport_open(int8_t* servip, int32_t port); + +/************************************************************************ +** ��������: transport_close +** ��������: �ر��׽��� +** ��ڲ���: unsigned char* buf�����ݻ����� +** int buflen�����ݳ��� +** ���ڲ���: <0��������ʧ�� +************************************************************************/ +int32_t transport_close(void); + + + +#endif diff --git a/APP_Framework/Applications/app_test/test_mqttclient/图片1.png b/APP_Framework/Applications/app_test/test_mqttclient/图片1.png new file mode 100644 index 0000000000000000000000000000000000000000..7eafe69eb81c25864771c6c15b8833346ff6036d GIT binary patch literal 19570 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 QTNcPOp00i_>zopr05^)lY5)KL literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_mqttclient/图片2.png b/APP_Framework/Applications/app_test/test_mqttclient/图片2.png new file mode 100644 index 0000000000000000000000000000000000000000..eb573250b46cee9a6ffc5354ab6e041b24026929 GIT binary patch literal 14573 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_mqttclient/图片3.png b/APP_Framework/Applications/app_test/test_mqttclient/图片3.png new file mode 100644 index 0000000000000000000000000000000000000000..688acb4f1f728734894ae821525eb3565de98561 GIT binary patch literal 29378 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 PUNpFDda2|W$MF9H9$cq) literal 0 HcmV?d00001 diff --git a/APP_Framework/lib/cJSON/Makefile b/APP_Framework/lib/cJSON/Makefile index 79f1fc37d..8d2e20e45 100755 --- a/APP_Framework/lib/cJSON/Makefile +++ b/APP_Framework/lib/cJSON/Makefile @@ -1,3 +1,4 @@ SRC_FILES := cJSON.c +SRC_FILES += cJSON_Process.c include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/lib/cJSON/cJSON_Process.c b/APP_Framework/lib/cJSON/cJSON_Process.c new file mode 100644 index 000000000..12490a10b --- /dev/null +++ b/APP_Framework/lib/cJSON/cJSON_Process.c @@ -0,0 +1,85 @@ +#include "cJSON_Process.h" +#include + + + + + +cJSON* cJSON_Data_Init(void) +{ + cJSON* cJSON_Root = NULL; //json根节点 + + + cJSON_Root = cJSON_CreateObject(); /*创建项目*/ + if(NULL == cJSON_Root) + { + return NULL; + } + cJSON_AddStringToObject(cJSON_Root, NAME, DEFAULT_NAME); /*添加元素 键值对*/ + cJSON_AddNumberToObject(cJSON_Root, TEMP_NUM, DEFAULT_TEMP_NUM); + cJSON_AddNumberToObject(cJSON_Root, HUM_NUM, DEFAULT_HUM_NUM); + + char* p = cJSON_Print(cJSON_Root); /*p 指向的字符串是json格式的*/ + + p = NULL; + + return cJSON_Root; + +} +uint8_t cJSON_Update(const cJSON * const object,const char * const string,void *d) +{ + cJSON* node = NULL; //json根节点 + node = cJSON_GetObjectItem(object,string); + if(node == NULL) + return 0; + if(cJSON_IsBool(node)) + { + int *b = (int*)d; + + cJSON_GetObjectItem(object,string)->type = *b ? cJSON_True : cJSON_False; + + return 1; + } + else if(cJSON_IsString(node)) + { + cJSON_GetObjectItem(object,string)->valuestring = (char*)d; + + return 1; + } + else if(cJSON_IsNumber(node)) + { + double *num = (double*)d; + + cJSON_GetObjectItem(object,string)->valuedouble = (double)*num; + + return 1; + } + else + return 1; +} + +void Proscess(void* data) +{ + + cJSON *root,*json_name,*json_temp_num,*json_hum_num; + root = cJSON_Parse((char*)data); //解析成json形式 + + json_name = cJSON_GetObjectItem( root , NAME); //获取键值内容 + json_temp_num = cJSON_GetObjectItem( root , TEMP_NUM ); + json_hum_num = cJSON_GetObjectItem( root , HUM_NUM ); + + lw_print("name:%s\n temp_num:%f\n hum_num:%f\n", + json_name->valuestring, + json_temp_num->valuedouble, + json_hum_num->valuedouble); + + cJSON_Delete(root); //释放内存 +} + + + + + + + + diff --git a/APP_Framework/lib/cJSON/cJSON_Process.h b/APP_Framework/lib/cJSON/cJSON_Process.h new file mode 100644 index 000000000..5dcdd3bf5 --- /dev/null +++ b/APP_Framework/lib/cJSON/cJSON_Process.h @@ -0,0 +1,23 @@ +#ifndef _CJSON_PROCESS_H_ +#define _CJSON_PROCESS_H_ +#include "cJSON.h" +#include "stdint.h" + + +#define NAME "name" +#define TEMP_NUM "temp" +#define HUM_NUM "hum" + +#define DEFAULT_NAME "fire" +#define DEFAULT_TEMP_NUM 25.0 +#define DEFAULT_HUM_NUM 50.0 + + +#define UPDATE_SUCCESS 1 +#define UPDATE_FAIL 0 + +cJSON* cJSON_Data_Init(void); +uint8_t cJSON_Update(const cJSON * const object,const char * const string,void * d); +void Proscess(void* data); +#endif + From 40cedd339c079d998a8790c2b6609899e126358f Mon Sep 17 00:00:00 2001 From: huang <1085210385@qq.com> Date: Wed, 27 Sep 2023 16:21:43 +0800 Subject: [PATCH 2/5] add license --- .../test_mqttclient/test_mqttclient.c | 20 +++++++++++++++++++ .../test_mqttclient/test_mqttclient.h | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.c b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.c index c316935d5..ae99a4ed5 100644 --- a/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.c +++ b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.c @@ -1,3 +1,23 @@ +/* + * Copyright (c) 2022 AIIT XUOS Lab + * XiUOS is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * @file test_mqttclient.c + * @brief mqtt subscribe fuction test + * @version 3.0 + * @author AIIT XUOS Lab + * @date 2023.8.10 + */ + #include #include "test_mqttclient.h" #include diff --git a/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h index 1d9e85566..bf1d3fc18 100644 --- a/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h +++ b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h @@ -1,3 +1,23 @@ +/* + * Copyright (c) 2022 AIIT XUOS Lab + * XiUOS is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * @file test_mqttclient.h + * @brief mqtt subscribe fuction test + * @version 3.0 + * @author AIIT XUOS Lab + * @date 2023.8.10 + */ + #include #define MSG_MAX_LEN 1024 From cf565f5d694dec61903a11f8dbdc861cd9594f6c Mon Sep 17 00:00:00 2001 From: huang <1085210385@qq.com> Date: Wed, 27 Sep 2023 16:24:11 +0800 Subject: [PATCH 3/5] transport modify --- .../app_test/test_mqttclient/transport.c | 87 +++++-------------- .../app_test/test_mqttclient/transport.h | 51 +++++------ 2 files changed, 45 insertions(+), 93 deletions(-) diff --git a/APP_Framework/Applications/app_test/test_mqttclient/transport.c b/APP_Framework/Applications/app_test/test_mqttclient/transport.c index d2c187091..fb38fab28 100644 --- a/APP_Framework/Applications/app_test/test_mqttclient/transport.c +++ b/APP_Framework/Applications/app_test/test_mqttclient/transport.c @@ -1,3 +1,23 @@ +/* + * Copyright (c) 2022 AIIT XUOS Lab + * XiUOS is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * @file transport.c + * @brief mqtt transport function + * @version 3.0 + * @author AIIT XUOS Lab + * @date 2023.8.10 + */ + #include "transport.h" #include "lwip/opt.h" #include "lwip/arch.h" @@ -8,13 +28,7 @@ static int mysock; -/************************************************************************ -** ��������: transport_sendPacketBuffer -** ��������: ��TCP��ʽ�������� -** ��ڲ���: unsigned char* buf�����ݻ����� -** int buflen�����ݳ��� -** ���ڲ���: <0��������ʧ�� -************************************************************************/ + int32_t transport_sendPacketBuffer( uint8_t* buf, int32_t buflen) { int32_t rc; @@ -22,13 +36,7 @@ int32_t transport_sendPacketBuffer( uint8_t* buf, int32_t buflen) return rc; } -/************************************************************************ -** ��������: transport_getdata -** ��������: �������ķ�ʽ����TCP���� -** ��ڲ���: unsigned char* buf�����ݻ����� -** int count�����ݳ��� -** ���ڲ���: <=0��������ʧ�� -************************************************************************/ + int transport_getdata(unsigned char* buf, int count) { int32_t rc; @@ -39,57 +47,6 @@ int transport_getdata(unsigned char* buf, int count) } - -/************************************************************************ -** ��������: transport_open -** ��������: ��һ���ӿڣ����Һͷ����� �������� -** ��ڲ���: char* servip:���������� -** int port:�˿ں� -** ���ڲ���: <0������ʧ�� -************************************************************************/ -// int32_t transport_open(int8_t* servip, int32_t port) -// { -// int32_t *sock = &mysock; -// int32_t ret; -// // int32_t opt; -// struct sockaddr_in addr; - -// //��ʼ����������Ϣ -// memset(&addr,0,sizeof(addr)); -// addr.sin_len = sizeof(addr); -// addr.sin_family = AF_INET; -// //��д�������˿ں� -// addr.sin_port = PP_HTONS(port); -// //��д������IP��ַ -// addr.sin_addr.s_addr = inet_addr((const char*)servip); - -// //����SOCK -// *sock = socket(AF_INET,SOCK_STREAM,0); -// //���ӷ����� -// ret = connect(*sock,(struct sockaddr*)&addr,sizeof(addr)); -// if(ret != 0) -// { -// //�ر����� -// close(*sock); -// //����ʧ�� -// return -1; -// } -// //���ӳɹ�,���ó�ʱʱ��1000ms -// // opt = 1000; -// // setsockopt(*sock,SOL_SOCKET,SO_RCVTIMEO,&opt,sizeof(int)); - -// //�����׽��� -// return *sock; -// } - - -/************************************************************************ -** ��������: transport_close -** ��������: �ر��׽��� -** ��ڲ���: unsigned char* buf�����ݻ����� -** int buflen�����ݳ��� -** ���ڲ���: <0��������ʧ�� -************************************************************************/ int32_t transport_close(void) { diff --git a/APP_Framework/Applications/app_test/test_mqttclient/transport.h b/APP_Framework/Applications/app_test/test_mqttclient/transport.h index a11ef1923..40ca65148 100644 --- a/APP_Framework/Applications/app_test/test_mqttclient/transport.h +++ b/APP_Framework/Applications/app_test/test_mqttclient/transport.h @@ -1,43 +1,38 @@ +/* + * Copyright (c) 2022 AIIT XUOS Lab + * XiUOS is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * @file transport.h + * @brief mqtt transport function + * @version 3.0 + * @author AIIT XUOS Lab + * @date 2023.8.10 + */ + #ifndef __TRANSPORT_H #define __TRANSPORT_H #include -/************************************************************************ -** ��������: transport_sendPacketBuffer -** ��������: ��TCP��ʽ�������� -** ��ڲ���: unsigned char* buf�����ݻ����� -** int buflen�����ݳ��� -** ���ڲ���: <0��������ʧ�� -************************************************************************/ int32_t transport_sendPacketBuffer( uint8_t* buf, int32_t buflen); -/************************************************************************ -** ��������: transport_getdata -** ��������: �������ķ�ʽ����TCP���� -** ��ڲ���: unsigned char* buf�����ݻ����� -** int count�����ݳ��� -** ���ڲ���: <=0��������ʧ�� -************************************************************************/ + int transport_getdata(unsigned char* buf, int count); -/************************************************************************ -** ��������: transport_open -** ��������: ��һ���ӿڣ����Һͷ����� �������� -** ��ڲ���: char* servip:���������� -** int port:�˿ں� -** ���ڲ���: <0������ʧ�� -************************************************************************/ + int32_t transport_open(int8_t* servip, int32_t port); -/************************************************************************ -** ��������: transport_close -** ��������: �ر��׽��� -** ��ڲ���: unsigned char* buf�����ݻ����� -** int buflen�����ݳ��� -** ���ڲ���: <0��������ʧ�� -************************************************************************/ + int32_t transport_close(void); From e07d4e2711612e99d0c94261a1c63687ad9d0fba Mon Sep 17 00:00:00 2001 From: huang <1085210385@qq.com> Date: Sat, 7 Oct 2023 14:59:41 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app_test/test_mqttclient/Makefile | 15 ++---- .../app_test/test_mqttclient/README.md | 50 ++++++++++++++++-- .../app_test/test_mqttclient/imgs/pic1.png | Bin 0 -> 8494 bytes .../app_test/test_mqttclient/imgs/pic2.png | Bin 0 -> 30389 bytes .../app_test/test_mqttclient/imgs/图片10.png | Bin 0 -> 27953 bytes .../app_test/test_mqttclient/imgs/图片11.png | Bin 0 -> 75839 bytes .../test_mqttclient/{ => imgs}/图片2.png | Bin .../app_test/test_mqttclient/imgs/图片4.png | Bin 0 -> 40149 bytes .../app_test/test_mqttclient/imgs/图片5.png | Bin 0 -> 20048 bytes .../app_test/test_mqttclient/imgs/图片6.png | Bin 0 -> 20410 bytes .../app_test/test_mqttclient/imgs/图片7.png | Bin 0 -> 35728 bytes .../app_test/test_mqttclient/imgs/图片8.png | Bin 0 -> 41531 bytes .../app_test/test_mqttclient/imgs/图片9.png | Bin 0 -> 108621 bytes .../test_mqttclient/{ => mqtt}/MQTTConnect.h | 0 .../{ => mqtt}/MQTTConnectClient.c | 0 .../{ => mqtt}/MQTTConnectServer.c | 0 .../{ => mqtt}/MQTTDeserializePublish.c | 0 .../test_mqttclient/{ => mqtt}/MQTTFormat.c | 0 .../test_mqttclient/{ => mqtt}/MQTTFormat.h | 0 .../test_mqttclient/{ => mqtt}/MQTTPacket.c | 0 .../test_mqttclient/{ => mqtt}/MQTTPacket.h | 0 .../test_mqttclient/{ => mqtt}/MQTTPublish.h | 0 .../{ => mqtt}/MQTTSerializePublish.c | 0 .../{ => mqtt}/MQTTSubscribe.h | 0 .../{ => mqtt}/MQTTSubscribeClient.c | 0 .../{ => mqtt}/MQTTSubscribeServer.c | 0 .../{ => mqtt}/MQTTUnsubscribe.h | 0 .../{ => mqtt}/MQTTUnsubscribeClient.c | 0 .../{ => mqtt}/MQTTUnsubscribeServer.c | 0 .../app_test/test_mqttclient/mqtt/Makefile | 13 +++++ .../test_mqttclient/{ => mqtt}/StackTrace.h | 0 .../test_mqttclient/{ => mqtt}/transport.c | 0 .../test_mqttclient/{ => mqtt}/transport.h | 0 .../test_mqttclient/test_mqttclient.c | 6 +-- .../test_mqttclient/test_mqttclient.h | 10 ++-- .../app_test/test_mqttclient/图片1.png | Bin 19570 -> 0 bytes .../app_test/test_mqttclient/图片3.png | Bin 29378 -> 0 bytes 37 files changed, 71 insertions(+), 23 deletions(-) create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/pic1.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/pic2.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/图片10.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/图片11.png rename APP_Framework/Applications/app_test/test_mqttclient/{ => imgs}/图片2.png (100%) create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/图片4.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/图片5.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/图片6.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/图片7.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/图片8.png create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/imgs/图片9.png rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTConnect.h (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTConnectClient.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTConnectServer.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTDeserializePublish.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTFormat.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTFormat.h (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTPacket.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTPacket.h (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTPublish.h (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTSerializePublish.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTSubscribe.h (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTSubscribeClient.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTSubscribeServer.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTUnsubscribe.h (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTUnsubscribeClient.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/MQTTUnsubscribeServer.c (100%) create mode 100644 APP_Framework/Applications/app_test/test_mqttclient/mqtt/Makefile rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/StackTrace.h (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/transport.c (100%) rename APP_Framework/Applications/app_test/test_mqttclient/{ => mqtt}/transport.h (100%) delete mode 100644 APP_Framework/Applications/app_test/test_mqttclient/图片1.png delete mode 100644 APP_Framework/Applications/app_test/test_mqttclient/图片3.png diff --git a/APP_Framework/Applications/app_test/test_mqttclient/Makefile b/APP_Framework/Applications/app_test/test_mqttclient/Makefile index 437645fde..68e52ce07 100644 --- a/APP_Framework/Applications/app_test/test_mqttclient/Makefile +++ b/APP_Framework/Applications/app_test/test_mqttclient/Makefile @@ -1,14 +1,5 @@ -SRC_FILES += test_mqttclient.c\ - MQTTPacket.c\ - MQTTConnectClient.c \ - MQTTConnectServer.c \ - MQTTDeserializePublish.c \ - MQTTFormat.c \ - MQTTSerializePublish.c \ - MQTTSubscribeClient.c \ - MQTTSubscribeServer.c \ - MQTTUnsubscribeClient.c \ - MQTTUnsubscribeServer.c \ - transport.c +SRC_FILES += test_mqttclient.c + +SRC_DIR += mqtt include $(KERNEL_ROOT)/compiler.mk \ No newline at end of file diff --git a/APP_Framework/Applications/app_test/test_mqttclient/README.md b/APP_Framework/Applications/app_test/test_mqttclient/README.md index 2aeca82e6..caf4ea5ac 100644 --- a/APP_Framework/Applications/app_test/test_mqttclient/README.md +++ b/APP_Framework/Applications/app_test/test_mqttclient/README.md @@ -1,15 +1,55 @@ +## 1. 简介 + 本代码实现了MQTT对服务器订阅主体并发送信息功能 +## 2. 数据结构设计说明 + +### 2.1 MQTT数据结构定义 + +![image-20231007142702891](.\imgs\图片4.png) + +### 2.2 数据解析与加密 + +![image-20231007143235579](.\imgs\图片5.png) + +### 2.3 MQTT连接与订阅 + +![image-20231007143448685](.\imgs\图片6.png) + +![image-20231007143607579](.\imgs\图片7.png) + +## 3. 测试程序说明 + +MQTT基于TCP/IP协议,分为客户端与服务端。在本任务中,ARM终端作为客户端,与服务端连接并进行主题订阅。 + +以下代码设置了进行订阅时需要的Client ID、用户名、密码及订阅主题。 + +![image-20231007144555989](.\imgs\图片8.png) + +客户端首先需要根据以上信息向服务端发起连接请求,验证用户名及密码 + +![image-20231007144710185](.\imgs\图片9.png) + +随后进行主题订阅,接收服务端发布的消息 + +![image-20231007144823940](.\imgs\图片10.png) + +在订阅过程中需要对获取的信息进行读取,同时每隔一段时间向服务端发送保持活性ping请求,以维持与服务端的连接 + +![image-20231007144921430](.\imgs\图片11.png) + +## 4. 测试流程 + 测试流程为: 首先执行setip命令,设置设备ip地址 -![图片2](.\图片2.png) +![图片2](.\imgs\图片2.png) -随后执行“MqttSocketSendTest 服务器ip”命令,订阅主题并发送test信息 +随后执行“MqttSocketRecvTest 服务器ip”命令,订阅主题,然后在服务器端发布消息如图所示 -![图片1](.\图片1.png) +![图片1](.\imgs\pic1.png) -最终服务器接收到信息,如图所示 +最终设备端接收到信息 -![图片3](.\图片3.png) +![图片3](.\imgs\pic2.png) \ No newline at end of file diff --git a/APP_Framework/Applications/app_test/test_mqttclient/imgs/pic1.png b/APP_Framework/Applications/app_test/test_mqttclient/imgs/pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..461156520062cf005626be923d20b79748b52f4e GIT binary patch literal 8494 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 wL*cuY{C6GwuL^uO3p{UNCK%nsAw5d!F+7lIJ6H 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 V2Xr$ykq&s>q$T9V%RU?U{~va)0*e3u literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片11.png b/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片11.png new file mode 100644 index 0000000000000000000000000000000000000000..60719777c483947241adc77acb7f24796d3a2c4e GIT binary patch literal 75839 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%0AG)uy%Tljx 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

XDGQu>D<6&zKhX72s9B&|5UkAfWu=hq# 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片5.png b/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片5.png new file mode 100644 index 0000000000000000000000000000000000000000..d2363e630ccc8a108283e29a277e95dfe441a8b2 GIT binary patch literal 20048 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片6.png b/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片6.png new file mode 100644 index 0000000000000000000000000000000000000000..49e07db4a92eefa188f8b89428c38b09ed868ee1 GIT binary patch literal 20410 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%0AZpEq1kiw!RT(`OL>7~!x#$B)@%+CH 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片8.png b/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片8.png new file mode 100644 index 0000000000000000000000000000000000000000..b30340637a1dc110a357eb1b04328899a671b70b GIT binary patch literal 41531 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¨_f^FDjmeq{H_er(usvly2@3y<2(bzq?UmjZ_ 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 jdnTX=?0?v(-F` VvRd7Z8ZKtcJf#+zz+^N9ZgbVD+* literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片9.png b/APP_Framework/Applications/app_test/test_mqttclient/imgs/图片9.png new file mode 100644 index 0000000000000000000000000000000000000000..56eede3158ada1a0b48ac3df2a721c14120f89ca GIT binary patch literal 108621 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

E6d->}edhdFE~Vu--~V?(gYUj8zusra~e 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 kcra-vm=gzH2)JEiXwkNTX? #endif diff --git a/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h index bf1d3fc18..d52cfd6d3 100644 --- a/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h +++ b/APP_Framework/Applications/app_test/test_mqttclient/test_mqttclient.h @@ -39,14 +39,18 @@ #define USER_NAME "test&iw3rn3pa11K" //用户名 #define PASSWORD "7b948d22fe46f0f63d1a403376d26e7cb298abc227d29e44311d7040307a71f8" //秘钥 -// #define CLIENT_ID "hc123456789" //随机的id -// #define USER_NAME "xiuos" //用户名 -// #define PASSWORD "xiuos" //秘钥 + #define TOPIC "/iw3rn3pa11K/test/user/Test" //订阅的主题 #define TEST_MESSAGE "test_message" //发送测试消息 + +// #define CLIENT_ID "hc123456789" //随机的id +// #define USER_NAME "xiuos" //用户名 +// #define PASSWORD "xiuos" //秘钥 + + enum QoS { QOS0 = 0, QOS1, diff --git a/APP_Framework/Applications/app_test/test_mqttclient/图片1.png b/APP_Framework/Applications/app_test/test_mqttclient/图片1.png deleted file mode 100644 index 7eafe69eb81c25864771c6c15b8833346ff6036d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19570 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 QTNcPOp00i_>zopr05^)lY5)KL diff --git a/APP_Framework/Applications/app_test/test_mqttclient/图片3.png b/APP_Framework/Applications/app_test/test_mqttclient/图片3.png deleted file mode 100644 index 688acb4f1f728734894ae821525eb3565de98561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29378 zcmd?x2T)Vrqc3_C1(l|vA{|9UML=q#!%q>BW(DaWO-cy86I29Lr1!3rptMj!Cjv?d zp_h;ZhzJQKga`owgd`9DzyG=KoOjQ?=iM`R-aGT&nn|+up2@7WcXl#+td!EG#t% z90&Ht54TTx-8c7TVd3un^ElEA`r^pK;$xja@bu=D+pagyUw>Hot(j=h zDmx1cK<4P!pB{L%H-$Y8z?ar5z*y)UwC8V#9q4U~f!SJkbdw3tOZ-1>QMV@-sBtBp38CwwtUqXKs5bJ2! zU1ab{h=pb5_KEwfhfRO;w`2U2QNe0yUVIg7UDM&4;iOgA@JSHv`%$U* z2ur4rlwcx^n77xHI5yCpeDC4J{ga-*=8FMy_d!kbQ&$9)&2Nx-R@@_do=r@DRWAE= z&ulhM^Jx%P z7xfKnPLBVDir3i-pUodq(pW@YFhsn$?<4d`)lH?xkiAS@R3Chj zi#ncOia}&-1wVTduu?;qa6WXUnM=zIDS(nA*NULYMyv1zHC|iQos%zs zz$Ue6W^$ zx3<5oC&{&^=3KnPMM^jrcF604fGj(C}1qWXD@GCT^Iif#8c{YCzs8%%Pp5`rRla? zb;lptzc!o>6&Gp@52rNOx%&UW=m64DL+jSLdr#o@%R7UT`PN~BAX&yP`bR>9Klv9b zVy%(6H4qDk*dB;wj)G)lI@)eiCV4Vw_if>9l|Kc>S^}QmPJRI^4Mark9rq?Cti;{C zyCW*2SGGS+a~g>C_1Ub&PALs{J%Z15wAWI8nVbI}CdR3DEzzE+>DuH1LXEi`?HO;@ za((m^A|C6ZoClIVV|NgYK^MoNxgZBINt0FN{N^;t0!Y}K|JL)c4L7yW9`@LIiy&;R zw}hm|-urgoeW6$Gww#MzL3Ba0x5dsJ_;Z`Leq85!ew8UKf5OZ;oKwqfWlE^<6iz%) zGY;m<9Ba!(3(YKkZ)1E>fz@$zPcB`K)bV6{@maQRRE0P&M}zfcMg1DbjGs-1WSecm z9YEow=d3YppAR&QIx@#cne*4mWTm=taBaoz{Ht-G11`UGZ9NbV=gz7%$f^8d<(qZ{3T>*$MZit4~^VWU7aic(bL)C%3lF6htWcvfV@0r4-@Yp6+fs zV@jjAR{|NIuo1hoD1q_((R>(z9dwtjPz-~(MRh36pgj@w+)fMX$B(4>D ze4Jn9^vpDrs5+MZ6$KRjtbi)q&a}q58AKo&29d-yob4@=P+jo+duzPhm4sgi!Mwpr z^7U1f(3#FSKL2}e2U++c3lP6*jvNK^yHj8cbtbe9nKuS?UGke6yI@nsNV;`(G^0ab z%}L8g;_ynv?q5o>hf8Wn`Ge;Tvusg`I}B&Eh%t7;Ti|*3lp)hoU3uH&Ze12&o7$J( zXp?>%*M6IVIGMyFa>M0rgjWKxjUo~3%*dW?Q)E`Cx2}6NCs4tU*KMfT$c{~GW=w-i z7(l5lZ1UW!hPkMXOttre0FMqav-A|LE^V_*Wmnh>!)Z<0#Qvudu~rwC+1($y#Cp67 zco9GDVfN;zxM@dZRNZAN$-1WNVPunKh`xRKd8+ns<>!p&(}J_*TwkB;JxNQCCE>4pfrvQ_y|K96c&q23e+DrAVX2W2-@A?# z2B5_DqyXFiO#5kSey{|}UV_W2b!rCQF21;NX!M!ZCJ-G$+Dwt5Qhai8$iq546-22_2!xrP>9yxz5n57XQ36^bi$rMHJQ zr|V;39-N>=bRwhjQ=Aj+456I@{?xN$?tyllBh$*z@&Iwef*)Y^N9f!&aSS~8Zg|`d z%+Xit%BKR#w?B7%DDr3k{sLOgX{X+q$OWXfI7x1`U09lhjdu4das5(Njq^U|`kY-r z9_p$}ek5>;O57=NRX$j=hhrg7E4V7tdLb+|!YHLywg4O$n7e`dc#ST(QF4Dz!`p~) z0Mb>acd5cFr~03gFYL{kglq4YLi=Opgf&5KvvF6CFiA?yi;bx4XI%G*FY~t)-#IL* zZUFt*3WD{{1qsQ&w{>~V<+7VTb91G4#;J3obt40 zE!VupJN)gXrmUwjwfa&`YW>^Kd&jN$5P>%hUG(xZH_{C6j3Br}UgDQjFMB$Fv`u&* z^`dp^Y4dO=Yt^sXIJrEPhsZFMu|S$EB1&TH0eVpNcY%tMZI$HQ`*aQh?SYX~dGN}w z^OUluk4-a;ZIYsWbv7=k2?oa)It|D_v(4vn8t5*xPZf&bGw7>xHwk<8(ai|1Y6rnT znb77^tW4 z;bG~M{ojTVnN)?a@PZrS*%x)%&(yHmS1R;cqt8x_RzWSey7GhV?k!e_#&P$oz>IkO zm)bw`SdG*^L@^qNb9TC;3UTe;7RLDfNhQBG(_>BQw=u8mGvQlJp%A#r3oYNuplzpM z)2V)%N5;?WHpY~+4@DN^BJXp=y~08pV*@#BJ!K^;$Wq6(yIbqBiea}Cw5Bn>xFuC!#rFrK0j40F) z}Mg<%dD&=brY^*G6;*|XHRH$%K%GgpFzL%fSofvX?>8ag-kV#vVyA!cYXv0knK zu&2P1A=~oydX{;W!g|d468V*ot82HP?)Erjn$RE17ugC-ct^JapJ%h_R6E8(@JTZG z`nomWv`Sg_ut-&p8H{lW6JFc7^Q*n%b2g9A6nhSKKta}0q($9AsC$Lx_`Rp=WpIE| zi0e?ghPAT|=QuQ=-X|~D-m6T4#6LT3YK&3^)=r~`6W}-q4pO4LwV@|^&6an#5PV0| zg>^bY);0*qUhSJ8&bpTr!Txi#xT)RJ`o;B&hKl}+ex>rq0qR;KmgX%W2b2APZ#L=Y zQa!V;dtf^)*j+^nPfTPg0zz>Y#yiyPi1h@)aB2H!Kj&|4#AM-yl<+XoA6(fqyX|jb zJfz0cso+p0y{6Z(dYwMihU|(@9jd1{bzV=jPlzv%@-bMG6I#ZOZx-0Ee}w zx#OG>z?9_Jg$eu+LbJ(o$DxFl0FC;VnHP)DcN(}zF+D;%Z3^d}@6JGdS-mU(mo~ssC7%%|7vPF0c`8GXn z;^~$-uFSe$S&mG!(YL5ktc*-8J9kADvxs7SAXOrts3PUl_f+1ssM!DNi*Lg|WyS1E#vU#=GyCKW^I%0i&$)viv?sJ}#p9#nnqECqU6m&s(Sg_<;{V! z==zuqcI779?Lk~~u|HQo*A;9C;J#$bL9CIQkepT59Do>%E_QXntADLx8tWDKKrJoawC{gAcHK z%dVjfzp60k+3oOm{Us@zLx_03Y!^;G4BN>yN|vId1KX%rG}E&9deBTIPp*4tqcFuM zs&^5=cqA!QvNw=6eB#fbFMQ#x$0}T?^13x~X{!G!6IT&f1p8ADmoZyEuGq^epHy|sLor%*u+0H=g;o-9Vck}HOKkLPSRC@y*U>= zDvvx73>*9Fb{_p9@XMsHctE!jH>rDYz5aNrX-LN#4!r>nZ7G$4;7MPQpyVhgJKtSb zu8z=2N})KmbK*_gwU&l4aaLg&%Oae#7bb?)JV+MRzM22bLfxvl65s0CTE2MC#^xkI zY@A!G7;we#&H2tWh50+|r(*yXqQ)0*@!&*H*t*l$bnGlyd*;{lEq8KuGB}F&a;jEB z!!1LmdqVAFavM^3#2R%MuGZANDXT{kez#`$Z48nT&l9sdbe z({A*3@-wg~9i1Lx%M}{+uGJ+PR#C&lKpe8z9#<77Xb+cX{v2YknmZ%- zd0vj&YG44bolm5ZRJc}|VB|`|^yb&fDnHM8n2BrJE}pM=scn&ATK&4p>MC;f^iAPy1+I#c zxL-kx+Ww$(qvuV%#TxOO8Gc%5xYn9doqY z7Y_J7^TgOoHd3Ov-6;d*??3%k02sZMvzaEYl@4uRTEfR@J|EMw702e z;{wV6h^g5tMTjMECu&G`gI+jFnQ$_sWewE{?XO_ZT?(i&mPF={=V z3bO&bDtPMkr^9;6pK`;X%Nxq*tvq1WPnH1~XK09v|K$$Nb4_p5!Y`5P;fCss6LNOqQ{ zr#383cGo)mKBE#E;h7b0^=&WvCZ|n`hM<;5qjEbfeV&V(!$k&uMRYYhlYeZ0pw_l6 z4uNbo)87cGJss*W0BJsN9CEW~*oEomSo7*3{4-XaFSnebX4O`^S@G3BZ*3NeLy{Zm zL7`973@`D|uyp1YWwqpJUjzb-kR(~vC4rH3Rmwd$j{ z`3jRs*OUH-_n347xTuSZlM_^&H*J}EP+I-l(_h9-nh#{gf=^wD5m^bp%D>ZOXPL$K-ENv?vqNDaO*_KeGV&Z>W zl91UIU9QG1U1u7Np;XLrBUtEdzX@RhJI|K<<3Q@F(;2`oFbK|Yub7y?LwRJ0A!fo< z704#U`Y-Cr1%YN>*NNA*`~2PN`NzmUL=(}qX4)kIWa7PYuZIXIKR;pbnrNw$e~ne= z!_ZPemN~Gsr1?3L(D)8Ntf(I7h%ts}@OHo}L2yOLEN_E}QLxZl6WnVf6M2mO^GjvA zF<1`2TQ(PahdpxZ#t-(cfWUFbyyCf+9z~L*J^dF$*a}-Wc{;ee9-r|e)-wcsHsvc{ zK2>7twY%R*w_YH%#D`a@yWD;}^oq*Ho`AHiu@7@2TRoT|fvzK^G;}WH34&6{?IF+e z!@8OClP*rCJN>iZtJ@Hsu)CUmq(q^RNgz>mV%VzHXnh?zD=1v`J6ZVZM)t8x8@Fdy z?hDJI{NW#*u58I?`Ymc&$MkB36_U2M)*JCS(pu-d(~0%kPad6x;_Ew*M~rq=4wbgB zPUqAY@D=1tG+n@`*IkM)g3pW=*vjoe3Av9pnEcRHTC3Hb3VL7HKiKLVlabIuSE{7V zhOG}$XvWQgfn2uZwQK=RB6;vDa@o>nqydlB5n}oo^=~;-__`XLT<%J_GIMJ?zx)aV zSZ$n^r+u8tQ%H*in_{Rs9Sdg;yw&j5@c;fs0mF2$bqm{gDS&4^;zsg7#7)Wb5!#t&q2HH z8pYd=jipLTwZG8eA;P#&o*7NL);@+hkZ7?eH?R!y(?FlzI`bjGqC~hDz^kb7?w9`~ zOX(ASm?ggb@_I+TZ#$z_SQ`gP|ADB-pzmw)ckRQzYY{?zu-t9HEx+Iyl*=kZ28%ZH zvOw1SZ^O)}{Le+!AD6Q-LJR-^N zbbomo7c(&BVLX}Z=royLtj^pB_xU>A3$RIN^s3FA^L{g1|8kd!o33XC`*fdr`r`d0 zMwW%;`5D|n$n4;$oE4ANTeoLjwOZQrZWRfzywWe_RU(9>$a(9y zn=KQkyf4}%8x3*(Enlw$Q1rv$F{#R7P!=C+bJta-~|BWH7qzF8oDYKGn zV2(qtD$BXR#f5jJl;7dDbuGTNjSx+tRP6m9EK=;{ib{%amp^YwN7O2YBHKL7LHBeGomj7VL znwLN6uNBsr(qrVqrai5W9ir7C>XuB45&sQ4YVjs|a>(!nXj-s=V`K_aX9KO0+LdV1 zZ@OK@g1@q5EIG}O98tNdo2beSG1H`+)L1w7ozcOv={AUmTxQb<#a9*hn*8bN1PLU7eU~lnoQX8Z^44jh<9k;7z>);VinJbdH zSV_YKc=_|umw{^oTfT(M#Z2UMiSoWYtqYtaNl3=uBRH+U&ll2&DC4}xCnJ(#jfM5Y zqV+OZG!7Ni`)`hZb$$XHh#1z)&&X1X?~lS#+3Jei+Y}u#21l}nm4B<>7Q?QqUhh7i zMrs*rU3^adk~@sNmao-hFtlUB<6=bJ8N`Gm+ZJJF`9slj(vq@N$NgpsehnWt?o%dz zr&YENjo0V2K3aS>C_z*YM1>wIIqz!;wZp62aUaTx-k4^l4r?;Ndzs89lYj2hG8Q=^ zNC36v2*;FM`gY)+G|M&89L#9#0Wu&D|1bDxE+B4W7P3^Nrz?_~!qx4hDb$G6t$|U} z?f4V#E?6KvE8WajB-CVh9KrVYxHA`|rUKV%XYSWu@LTZieSYWgC$GPz_K0h%Gg=OH z;z>xB`B>k3f$N=Ia=Ba4qAPKlGue*aR}Jv=OX0wgFR=n@lRZ{5)8(z5?@m#%0d2-h z(Zy!~zvQ7tL*42d*BB`ZcAtgj5(p z%L1)u_Dg;W6ZRr;8-n-t_kWOuKIWU?L~F^?`K^kLL8z(L3rjN1Mzh0Hm7O(Lu{-Va zl-FMH%3k+HhUtKiUQox4UROq-7jbG+VVwMIfPTTUn<}tTvxl0<9p3RR5X#Zm*>@Np zj_+{4JQtxP{cL&3Ut{=7#-P+Zd3wI_{wAEh@5%UFoyG092e0a*N zC|!&3H9~SqXwX(_YVQ8(al`mqdDHUf3{hr9?E*d6}RDNQ+UD2mYU#C?IENNsU2y_r1&brIf>hQ!9y+B)B*t&;> zbxpuX9KNA0l+T4R0lL@{PI>RbXG_7xYJmeb7Hnr*ceh1pBrW>puR+_xr--eb*jQQF zp|I_4yyh4Rsw34DU0)@9A-*`1w36pz57wD!aS0LUNTSCKB$Y9?!063ixw&m?F#pO1 zuL)=)2)fo5WP0I%5)zsCdyg?;oW!>@nE!;;JQFUaRys3^ESMN=K>Ii@!`f>jDEwJ< zfVqo({VA%xP3i%ybJ@Y*+tqUC$c@`UvIVL9?ZJAeQ56ck@XW1<+#lYY#z^#N>AZ_) zZhCv8?KM#5V+XGn_u{t$dc*-g0<&b|2M=sw4rMFPq=+;FSCn;8W(SzbLABiCNo!qR zldXMri8-&Avna}?Mcv(xlnc^t0Q9c!;=FdPtDjD`B{PLXiF)eeIe=8SQ3j4GVSVQj zC~N^VQ+G@?B-F0j*0?|`yEwcTA6u05$VEKxqdw!J)nF+}Rffq%)PpU4o!b0SOp}VM z%koQ|nZ+{>in0`Ly~xiKl3pt5LRpV%O8ec1Q`l!2-8k8a%$<)r^-3TY@ofJ2Hs!GD=q>;6 zbH%=;TkaT@yoUOyjIxL;AN99NKx0E$QTTPGiMezSV$9uWdj3Jh#9owwlS)l=Jryvp zp$iy=(6IcTM~`osD=d#3hQRH7m4cBU_CsW$&dcQ%viq1l{nZSVrS2e~;w~ zrOf2@Bsq=iqjk_gcIT%u&`gp|lG#?WP$2(E7W-Daj)lRFd9ff?XVif3p|#ZArDTBY zuI4nzb+WwzxSN%w)`!hGImyko^2+eEqai-tdm*IGI)%+rLT6A_D!VjfgDd)HT!76D z){~VhD8FKxnd_nMR9y0o>ZstINo$zOUwO*jR$}`Q8ZH$q@$x`sj}&R?v{3+e&1ZJ3 z?M~$|$d_>kEgh0!hf_*RwjHSl8o?9C8s(Zj+Eb=nZJtU3bKbMwXjUC#7|A|^i}kMe zwXyU5;JyLBh_iYK(tfUWyZK2xTj#W!cB`r#2&?gfqWndeT;!Qp{{VZl<*MIEObz|b zzG619$PWVS_|gs`4X(OuCyYRvZC;8}yGY>$np@OOyv5bL=~}rqITr(qQ`jz;sQsK8 zncdQ(;758Mf!+blmiATX+A?1YJe@Y!uUSaX(VIZM1Q{q(?;PD%;o)>-a`@9lfM%Xa z!cUw{++lMg0Z_|;zlPnt=YWD5xmM$1RYl_$^^&6fKV70^LntC8pS|Fow%N|z!y-Ga zzAsyiVI(2@LGzXAZs_i#TihAr;4qS{!DYI*!X$P_S-!hTEP=Wcmbq zam0Rh*z)W=1p>ppJo_7GlVSi4tu&u}RUc2#H;KG`uZkCU&*gVk;9Z@yODVhV&Ochr z^L52VO*Qnq06&3@C_d@kb&evGGm(48wJYwdJ?#Ubyy5`&=w32W@ zBfKnGa~9qm&duhTvLXL9aGVle0;!#B^V|3^Ecm&&;#S_kWv-<+zwQJmZ*pfL(w)jW z)CCdgF}mH?R2VYpi7u%8-Li|5*3Db?2aj0wkb7Ah6;^}ZRA`Q z9jSz;;I6&tNuUFK*CRcmKcBe_t?b9|3)MAWO=d8Zr8AXNfugQCfpa@t z9%_()uKVh(=%IJq#N(oU&$&X<64-*Bi*~-Hu1)&oalJZzL;*Um<~hKo;a30=R^AU?UHTcUd^^BlUCBxe4l))~kS}W$WE@gk9;U|c6*l7K;AJ!TV+2#xxx32_v&2bH7 zl3HNN`hXB8%aZVN)>w{kGZ{X7Kw<|whnb_^BTskpJkD#CAA_~JQPi*Uh40Ty2%b?p zJte^ElU6Rb2@X2dws%lne(n?~MH^)HuD)Gd)4sqsUx9AnfBXh|-Ko zdeN@d6k)V*A4;A$AC-H(?MH6Lj$QcGzQ?FO?aJk|ki{Fv^SrexuBEBK73_OIcL7AY z!&Wnr`RQYy!cJFqF$fTy(>Iw#uEE6yDx~v*&4{TC)(#zEWltdcAk!9Y7rJ4CdpO9> zO^h5Q;j=QNd8|dGW)jq}@%GJ#`85&k~WonO=IUHnWeRji5i{V!a! zv>4zVa85dAq*pZjQ<#x@>^|3CE|(p%J#1c1^xKd|Jm;bwLs)y1`y{q?QX>6L=iMiI z#(_7Uc!}4A3s!Q}OWPhZM1r*b$l{Qy9Wk9C=ozPZrzLjEya(*nQakgrCx44{h4m|2 zi2^IZI%Dli-r54~n&-$2dpSGdz!e_#X$xEKogAgles!KRqj#kL*;Q#W=bMR@yM;S2 zuc`vR{}3C+1?!$iEATXR7VHN&`@i^}ecA|7K5k!|KL!hHIY^X^9e1*V9rNbP5J9?3 z?3AnSyza)El6)$JX{{%*fMxjw%||!kiWU`DNG`1l&gg`Z|>^l9E51QmON#XchTj}dTT{y}-qxT#4Lqn+N2kS>1^=!OpZiwU+7Zvmt=u`{(HO0ovaH>j&@ZfMPp@ zvL%I)p!IDbkDQDS9BPjeibn`%4QTm%VB7a<-%y?WaJ|EkbG8XLr^HC+SH>Kver?1& z5H@p!4zZQzohhr+XwZ4KHmsqztF-Tdghj`c9?|ku+>?^LmsIW%+km&Oo?<&n56mVC zD-ENBi-rhtOV=CMt-Bv~aTP2U z{4DJ`94Akcfg*igBX9jI_0IxQk9A(Rgl~84pIexkQa+WDQa@m}Lq*InE-7#PhSYXE!Zd2BKVLzealOOn&4*o&<{4OpK|x^jRq`03y|Xdbw7=gDtf zg`O?ns?$7z5*GSB3TKG2w%loHpM%u_K<>L4*lX0sv(WK?HrGy5>E*M^yTwsns*#^D z56hSCtwp;FVPbM-T{*5*ZiOA^i%&4B||1Sqy3oSf{y<^GCJilL0_<+ z^gGmvHX>!Chu6ShU5aePGsDs?ET-SpAoP9q;UsjWagL+4^Zj0gUHv|W@`sprCA3~W zSI=n(YVxrh2%HTt>yK+|JL`EL#;Hsa;~UuoXpQ^LyEJiOEo9dc>jKVdXUlB5mW36Q z8og>?2k&;=-4($?PaH)GEXrU<2=th(d++pLNi<<3!4wcV*!o43l8J2;wlr? zoPIk+j9Qmun6EBy`&xCj3vJE78sAr|)&nQxv5(2+_R!PbROCoNDq}9-R}v{=s-c7e zoOi_R|)%Mj^!XL#v~+N+C`X5R{bjx#Ox{Tt@F7V*K=Ph>^5Uo2nu6$VQopLpl)x zfe2EO%*&-IFZUBST__XsY)1EFc=S}*2Zrl-p)y9W5}dsrQUiaCD*ya1jAcNuwONeO zmr>{Y@awiJn+|)JP_PYnIdT%2*mHmFRZ@Rf&}8^+dA#%k@$?oJMBCQcS6u%F^%Bw6Hhf8Z4(`05a_^_L3ZMlxinJr zBkE?I`>*@W>yKv*?*e{lKDl5TM|^X^9gtC!v`2@DfsLJ_+PKQAC2g zZ>H-mS+QcQUFKePYyUF%9;*~>HPRKw$yYELwr>5K{+HsW#~f3e|EB2NU{jDxn__={ z1_!>mq5_wrh1v-;Ps*xw*R#0ZikksFUH+KPijPyQHI#Hv?YE6yZ&VfzI0$#&`=22r z!B*|%e~64zX0sB}yxQ!vTCT~dt(>n!Kl+Bfrkg>i@VKc9f$o}jA+47{SwAJ?BwQlW zY#gV2XW!bBz7nYssC74zf9&OX?gx8H;@#?^_=WlknRKa(Ze%~!Z&)btN^D`C14gqu zAQcv8i0!X;>7q7nlQMehLkoAlUQg&2r2d(*&H5xN)G#^LFAEW}oecF}7E84$+0~w2 z_sp(HnGlQvZWU{2=_7-4whfFRI8Y|+pf+gKNY?U&{B{?m~_UCSm#au|Lk6c%2q9MtB!0NiXh;~7W+?P|5{S0E9Z&Di1Mxvkd; zeKA$S$#3M6(_W;o7H@LYr~c@bn!lF zzJ{mZWvE6w4Y(Jm7U~tm|EBfkHOuPdcdhNNsS(hjzqn;>tNBZ&$w!j(x|8VtGiMa~ zkDQS^A6{`QzvOU!oaY0oDT}(|@xe22O85I>lot@qKl%WpRqAmI!Ib$iCIYNuMQRrL zmkv6hKH-GEum7e^8Q`EehwnK80+mJkNT15?mCkq1fwKCchNEsOg0e%HeWL0I5J3Nkuyy z%DSOWU_@>XqT+Dk%+Iakz}QvGDK0dCAzr(_vA8ivZjsaqx?i=8>R$sK;EeuK=>VLt zgHuyB4|=KnB`-vALFW6SWUnXRPX_#vs|bg2?%jSasfX_+Ox@v!TA~|9A^HQPJRo&n zyMOwX(w8?yIzPIxuw2bEp2#E`^?W~`2W*k=BtI+UeY@4ODQ>8kbu(n!W>EX+tM~G9 zM^+}wu1J2}{70hB?wkTPU?4ilCC#Rwiu$TvqoZ@Kp*^653qgD=_1*rJzOstKKZu5f z#m$O(Shb526XW`$Mu+8M?D>wbm;SD^umt~YIe#`CbhHKjx%<|I|L^Yh9ybARrs)2y zXn&5^bkHa^nyK~ALuVgnWc*Y{hrjsQcqmcDEv}=# zng7TH-t7MQ-4nh2{WyH`1qG}^pQ+zMMkrkj{i#b`%9W<(r9Yur%&%qR=@yFhi(y84weI7^Tz|l0OU%AYrWX_ccrP!#LN~kS2KIBRkuG~qXT>Vf zB65f_21N%x(Qd1zjLQF1Z&H`#h~e&&yMC1D{jk-i&19M8GDwSjwbjqn{V6O@vHI|v z;OTJ_{SUN9MZL~d_cIJhXn9q`=G`c~*7T|eSm(2^ndBfzC(6q9p%H7#>h#=y&mF^W zS!^rsIPI%Y4ksM>TPN<>I@?amZhp6_UF&T_YK*27Et#ZsE_eNKsCCCGqo;l^pS|`c z#>xH97^iUNznG!ep&23=oky~Q`+`OiAz^Gk8W>#hC;5{-_% zThGvyoi5>7)+r$mF8GmNa*6Q`1atl%J|Kr}ed%NMt+j7L#w?_xu1$5$oxRC=wn;s4 zFN$Bq&c>{QJmZ8;cqzTyLl$!2I$Q#AwHLuwObT)7kSpHuffk=Rr}X$uPSEX@IKY^o zXOmKYv{5>Oc4r^+$@{!gKv`T_)9ACnBA)Z>jijJFV=h%$&+kq)Ik^j7T#fe_v{ERD zq4Af|lBNdF>+JBJrSI?KrCoEU0NS%Iwpr^zA|q82(6_Fi-FrVBw8yF^7iSro&mRt3 zi2ss!G+I&B_}7WY)Y7M$duf{z;Wm@0)*%(6`yZRBA#wO`Z@=d9`8vxxrSKA>((COd z;2^wGzh)O@E)(`*C#ZY-PWx`C;-qWJydG}<^}*Oc1i7(gpM7(h53CEO73>ebU8nfg z#(z_Im6Y4&ZrK3_j!r>P0r7J;tKlQH(S9-8nK_)qgikg%_Bk3znwFsVmF``yg5%fW zK2PpUC3b9_gJbP$6gEm63dE+SF4zt3!COugXt0UyA(N| zj4HNn-`fp|siLM3Ti@;-7sOUFv#M-eDT^|4Hni*nVzUJtSt(8k+@%mHUO-#$m{p48 z(oWx+CHRTw;rd5Wd5y|{3{Jzm^~a^+dbrgJlyR|I7&|FzU;s}&wgCP zebzCl1;nqJJa)d}ed)$_|BWh1=q`|wAxXBF30cYw?opwYRK{Au&$V@{NBmX;cOS;& zcJm@fDJ!%)JMBMwGYA*Rm=M&j8HvWPG<1v7?I}lW2Ov!I^!lMI#myY13>Queo8fN{ zGPylxEx^wE?QYGu7w)?@;+o3L>}-k(qB(Ge(M5f`RaZn7ki#jcy7W_b);4nBr8tg( z#6c;0fpP-TG|ev;QgEQDM-TTeSkYWtnhsyw)TadY3p=C|wnLQ&uTvolyEDr8>vYCE z#T)!A#1OcL!wZLUTMS&H3Zw4X2;kdx|0$2Q&S}}>hYP8kC}m9U755bNrOn43hof1o zg9S4_T5m-CG_!3laA)#IFQZEH?n_iLj9)0sG};i}7LG2THKXt}x(#0e0MX_;=ZHuN7htbQ9}{TRaXXveU)iTOb1|WFayPf$dk^ru zw?@LGAzk(=kF9I&>yo0ybs6fC=wROKy9S5+D4x$piJfk7|9>p?sJr-orXF2grd9uP zsnR9NwZbOT8L93$Stv9dZii8ErgZVPA{_3E{73_MR<8KKAR6mGdtz0^l^Dp)N0p77 zd4rk3z+F4872>;gbAs`TY~$c z>vA#(1!*oQVHxVioC#umV|#cRrFK(HYR}!d6LQ_rP&w>2i*Ba_4P>u- zH2e}-ZdTel%Mt2uhL-x|*blw-w_RU<_SK>1r+XC64<=9hJr0lw zz`o{B8<28tHCsI2ex=u%&5v*-9F#bf9DZS?C*a{$a`UhC6^uFm;Yi9A(_9G>a3@eA zJ4<0WGg)^*urpzuvIEgYz{(+pV16mWGCz+;L3D1y4$-83HuWr;y4nKgcqXPbW2MywY2mg?mIUXwD|ORku^Txl;dg0(gfGz1L&jc@Ikx31ac2=61t!(0~t` zX;zY4+vT_UK{1!(1CJ}Z`tQ8sWOC_KnEFkDd;J>;ZY9nwhPnTW9x=wo1{f(nBg^x% z#CrY1C2Im#z)u!gTebr?1$9SuYnaYM;nnm592&*f>C9!QS62l8O@S1TH&4YO4U2z&&-wJ0{dFUq;)5&IQo2BX#$(ZGCTScl^;~o__B!-_|Ijzgz=pE6fPfnk!=%4}s zDTYHA9=cGUd&uJM%g1U;yo0^!Z$J2F+Ohc~m~bWZ|7O}T=*e}7&IzBl{pT-EW*wcp z_efgM(YLN7=6Jk(lz~#yz^y@ZSX;6G}eF*gvRxJi<@y{_r@n;P;SFe98INk2lv?s{L>z-uOjOVA=c#VWr zX1^MCat)`qUj-J|T>aDK(dt&TMN0`a z7e$qr2_aNViJ`=pgiwMYh9D7{zS!+PyZfAd_Itkfdw;!Oem!}zR@Tb>WM$oXuKT*~ z5pxW4IrOy}#+B4O_n0b-2Az~-kngA6b?SR;aH|D>&iCUJ0}G8OqJDMsOTo6P0Rz^< zJYESOZXp`SUBb}}H2KB}GcQGawL$ym2Xo%8&LUV@+N&6AnU)kT>?6xijSBU1w@sqN z@dE?}Ycn@n=Iz4?Bb}m?nXJ>Ne zpx90W+Q?$9HCZfMMdJLf)(o(>MN3*W|5uQm^V2oMzGr!ELb=!TM0FQR#uT~#Yu31aO;cp|8qTdGpkLD=;Dvf>TUtK0E`YltP6J=~lyqilaF4y= z9j85k{xQdaU5yIBsc?(7kTx4Y-hUr93d9Ru8Qjz~{yVL)dOh-p`5b5IWY4_fMKmYj zDN?1fqOG8l`t?!6zSp(7F2|Qqb)D70;p4B1aY0U@&mOqD3q~Lf(0FNDurny^ISUAg zI$on@i}^S*(w_p>^>x0Z;5J!09CEc?Batz8%!P@t=a&fxO--y`?M0P4#J2y9**IzT zZ_Gx|bFgdw5pfLN)@%R&P8?}}PaH`zV*<{)qF1%#)yo^UR!z&hoj(XzaE#P}DmPfU z*8LM|#ENgB#$lYg+qM@n7*!!lTW7%@wpnV1y|&NK%@(Q3!d-=T+oy+Q%&}?X8D-w2 zWLF6X?W;H`Mzy~;+jw~^4g|Orp~S5r{C#DL$BP@uA=)p2BH(r&QQn@jvce_UL6Tj~ zsHHd3hHW(N{+}`${jG1vGwlUR%hq2t>~CCb1`Cxz*8R%00pZ$ ztNUs9hovuJwUjD_@(?xY5AV`4{eXn0OuV;8T9O6%K6ZSXP>kI_@0Aic04sb4c2(If zt}m&}C7W}@c|hx`}MZ@-^nbXl1{k4ICk_uL_U>j#i&O1rv6@(F|vw;nVh z6-Q-T@>bxA+v)J7nNAw3wOE4N_43ZXy2@~FU%aBz;!{ULL8hCdEbwUCD#WBUC#t0M z*-n@&1d&T?UmUupX&*M?>n#e;}+mcrEu6SDIG&QU+~AslHjR*l8n%W z7a55v=ocTaZPI4bpMO5#p3nbnw(}30F;i=P2T&|#ZJIM*ude(8PQ-q1G1l2O-Ey$j zq6-3su{%~fkRzH^FN}y=uu+q1?Aq$Wry`>SAR%D*kdK*KbHo0mm*gZn`=J4+BU=vJ zR<4V^fPkEl2@%9_0GUvI&sj_(T4aUK@8;~{XHyxwA z|8(Oe_{}?CcFAJDc&%6iXU2NXS3{ft@YJ$VMcM&*lkyq-FM)FUHZ{j`u1GsmQfV=J zRTLE9uk?}#ca0^e$ghmScP$;8oy0(?Z-P=zk&V>gsp~@{UHNWiPg=~!0Bs=(@Z7Jt z1g`E+0liku&hHARH3ufrlJD#lELl8J*=bW)&{ILy*ya2PZ2!dtVeXDcQJT87|K*SmYR8)$pvBPfRV~mlH`H6Kjv|8M;UHj;F;9O|`Ge zw`Tw|KX3~#VIQW3EDf}frUaQhP;KdoaSKo%6DhfX)GT`M|uVJ-?*LbH?+%Z4=Pictvan&gQiKxlpdLYC#}%5y;eq8DVB z^FCgo2Q?}&q@@AtFBABE$~i}ACa%-U3q$wR?QLNj^|fdO#?LWz=wgTc`x{5K6B&fO z5Ti5`&oO`oJfxopbsJq`d#xj>etu~Yd?orb@&+$lj4mN#j`GO)*eU;a?8T?{)pLsl z#5ikI*voe zs(hTGUH<$y7qvi^=x1naBEVj5MlLhUS2_FPelR!tnitGs@3XD@2dt?2PIzZc{Zz;6 z9#jLjbA6ZQ!kO_FQWMVhleP$#%eL{lw+S-poOuhU&#r=oWBa5-yByvsyXG_TUxLa{ z&War+RvKzt0g2xWI{111ZMDt8*~%XIH7mFF*hj=1San0I>0Hvjys@Ye=ctbxQDL3y z&$dV1NA!Lcesf3BGG$fUTSV28qpGbY&5HHKJlG-iZG)nYbGM1};F_tLI=}&(Uzu6n zs-?j?WKDTU+L#U)O%TyMJ+wK0mn_I!63;$?6XYnx(F_8aleDR8WpN<53?nX}R_Yr^ z{T7o!l(})yr=BJvsH69ZeA~8thysBd7F{B`e3ku4)&SNA$^hNLHZ*s z)g^ewHZQ|A3uo{tgmosU>-I+TQ zg4Ww$BT7zNSt;XKU@b_6NVb?q_6!c`Nb*41-ae*0!TGa5ufS{~=QVliJ06$*%xMkn za5X*l11#=SOx$y&W*20ih}Jc>(paJ?8?Yq&3CO7{LR={6Olqz$ zrDeL74I5Dnf8jLth26|xz5cS2&j=T^>TdtV+21#V6ByY%>kxd&J`kTcwE_>B=3T|g zX1@AvHHxUq&BxU`RxZvD;_OB*>kNX1AfBeeEoGt95kJ01eAI^URK2n5ux=braCN0=gwK zF^8bij9#(0s1qTEL4O#I(|86C8}J^w~wHa#cP7FKxD{R-~kGaT_`nbo#0@tph6=#NIPD|2r6 ziRJ(p)0-ztxRc4CTg>jN5fU`>p7!)a-@w3x8Wt=krSriUG5wU-^O|smWoOCu+h(%Q zkgp$ljrU`4+6JVhl4gcxCeV%a+(5hOjPxY^F;Z$D1RA<%ol2Fz`~;DG}{6(2XuLk1zw_O=m^ z*F?pYxmB~`A-~THF8K8~7tXgF>&ai@8KLl|``Tv7e!2dNAN3;114BUry5IAk!-D2l z2I*UI)%vc+$OzLsT`zw7XRQuw#+VpkaeOT%t_vZq@ucPW1XjZ{%KYStv)aSn0Mw!MEfAVJDTja>iCxw$Mm9ZPR3a7(_mu6FgLTwW>)E}_4w20UV`gE` z&cfUa==l6KnhHcd$e6$#f35LV77GYWhAq`93)JVN@r5lu$pQs$nsm%Po30#^0!BPZ z7-^38^h2Mn*pAPHx6o%?Pa#ChR}&_jY*l<$+`CYg;~_Hk_uLg!bE>2J(U8KWQ2S@FR62O+G7_z0G7YiQPs*t z=r4u{r1vzauwFM{{MTKiy9bJ##p*t$)#Us7J{&&2;wDwA_Kap4cX#hS8GQg$QzkC? ze6^QnZBTXY-nb0$}Dp=c)t3dh@61mAhR~(9){Mf$0pI z6lzQ%l`j)s;e7}3?a+bY`QXaNUjLqDfPWJSL;5_fmGeOiIA1vQv92VAu`oUzEub3v zLt^AyQ-pGhd^i~@RHj0p7Z}U_V2DI>QSW-=l*(124|3GKph0$IkSBUSO^Yfz4)eju zA)^7g4G8P%NR+Z)8s}i?n?}tfmq{}FMvt;5>(`KP#X7Hi!U)w4^d7TlItkJ-&i;hI zG;VYUQlI!hF_llqZq4AyJP%vQ&RMjy}Vh`hgOyO5VH;Zur2X@1mT%_gm6) z#ha$g-8=0f3gXXax|7)`ao!}N###<-is1B9Hj+n2tC?2V?b-X{Ce>c6MwC<-Z1q8* zUvzOg*RlFojhbn2uKHVNkj(8&?`K&XkbJs`y5bTFuq+@5h53M}kG?1jYrQSn2}@qA z*Kub1j9SD1lw;6A(U12$)TJ~e1HPlhI=iW3LNR_yL`3LSoM3L%-OS5%WkN^O*RNr< z>@=i{5l~O}{132`*%b$#W~RWNz#CGo5*@D^33Lcea$3m!`Ugz>yt%=7F(xU+6(q_2 z^)YE_|E;FF{wYBFEM;&p>`aIJ7ECnGJTzAsJ-MTINp(5N*fPA8b#sxG?(iy;(P2AH z75PGBO(1B9`jOtv8q&mIg8fFq1rlY-{0O#ns(jtlCO^Vv!u652|*PkSaBvx}#Mn+w3p0?MZgOxXK{M-qV2Q4kr zs!`t?s<6=Pb<)?HMgo2CHFOjFY~t%Qyj| z4ZAK4KskTgkT#%Oo_h~q%#9Zf`cuzk0H?rX-)38N7AC=pc`e*nc?ND57zKsB>Vl;;&{ zb1H2fvU(T0K)?~3in`NKMzD1?7ax<;3E)JlhOQNRu){g5F%fQ z=pDeUrMAFSpz2<44@fY;&UL5bg{IDV#d=Kn1)kCT?*-LcLa(+8sxybb7gWow|4~ql z+0$Pc;h-UB7F{2dwI7~BUwJv)9H^ptr+OZ3C_Xxy2uzILpN;U@hB!~O>Q>sy1a03A(my@a1&RnP`ad}tJl{CaQ{iv%o%I&nVJAY|2 zn&iFaus|LXw{pC$Pb-RfYcuWRH(1@BB+RSYaa3+#{00&%-8Qcn#*SfLs2)3NIC@se z>cVBDM8DM8K-<#922jfQ9a!P_fU1dlf8Jd^#Cb`POGTyJ zMkvwUNvz&V&Az-epxYOff|k}|ViuJpE$AUXHZS;|+T;{k3UklsfJDm0@wP3~^Y6CD zM98u0sRC~NM>4@xIf?UA`=3}4@m4>9#a@%QLpuPnRoQW2EG7xCA~T1G4|Co*%rXMc z;5N4TFRlbbk-L#5clt*DfQwr*1>b)b8d=Nv%BlW?e8AB@ICFYdDYyP!y0gdpzSR*z z8BoFRdHP+^fvn&AsYD)}eqaYVC8Tuoy;|6x@S^GuyoeOxW;>0fBShc?*3#8Ur^%$; zo3R<5y5~N{9b@}Iv$_2>M*Iw4TOl$%G1RMOL0{RWY(GwWmNRS)lQIx}$o-e|Qqb7v zRh4q{*+A-0eDdqxyhdfN|H5m$9)@=@Mfdo(b(M?kv13uO@Q~ZV{~(MBMoffz*L#lK zs@wc{PQyRhjUvj4NriX&^bF>WKRwFCzvHLBa-jLE9ho3xXx`pic<*$f8-lw{kX_+T z87+#yedmm$bAx$v-h1@OieWy+{$D5(9{Ke-S-wk6} zc==7f6J1!)61$(eU+{ZB)gBa;Q_&n^U)cBW^Qrd?F9u0v@NjG{t@Ur}cdq)i6;uRv z26hw&4=K=UEi!%>jd|yJx6JFP-ob@^C_OnyN??Jy63tjH4cu~{0n6qj9iy$EiMKgm6LFTK(Sybwm!7tuQB7v zGAcBlDNP%Y?xcq`DBfJ$RF)>@=x0EBzC3_c`1=Qhirn@lm-N0Q3$+X)TB5h#Y6-ti-e)IGxR(`48^?b>=fu zr%?30q$K3i0sq>1-ugBBbf-J|j?dwaq?Mpm+sdtE>fBZ`^`$2Q^xR|8_d3u`GUGA5 zv$8gicdpOhx&4HMy(`pI+iWYBdU&xFPYKu1N&n*@Qvj3p5`LFs7 z&YS@Rjq=wjW7(%+v?J0Hb-;VOY}l%j2_N_=rnK1az9H|z=||`7rcl?ZS1_Q7yE|8x zL!+0qsvQn-Bm=(Kb;Hjuh0WI9D^T5A%3($Ol}Bhz#`6GFNi`J{y;A1Z)HaW!B3uC#=|XQLE-ZqKmcq8D&C__MF5B`m~&BNj%lFrWT#8h;0k)r>~q0D2A+r1XRkyH_Q zpC5vbxg{L?@Bln-dL-HkB97@>Dixc~@b=}6$h^?NW=Jr+pPi6$wqEK<1`fZ1qZv^H z5X+v_$2>QbE((a1?bH+JQSnbp6r8HGI;l0PB@-@adrtKxW)Yo*Bof@is}T%a+tDTT zrn93mkT%pQS9xKa7q2~u$<sX2GKzjA1@(dPN*r-zKSKhF{JUXT@*j4hfy#28@17YQHZUO^WA8v=f}uaEG_q)4z`y| znklb^`)#~gyJaYNZKb_BQo{(I6bB8&)9REwgJ07q`qgcaUIVBUoOyPl{Fi`WGdA;~u)>zle>&!}5R>Fv1B zlnx1o@m$Oj%M!NUBf`EF)43H;4O^ZGrG6s+XL92Zbf_Me6joEg6$v?6iwrN{^*pu~ zld4Ch%*jkGlXj(=KVyK+r>>}$<4PTJ2oHhyZ%g0qvpk0$1MPXFf(vcTH?EWOA(OHX zlwpBGEiFj>QRbULhNm_qqruv$&HCYlI=iv_@nKTyDk-Jtvpcqv=A|5AKR3JhbRkYZ zF5T!FIt6~PM3$B%C7NTT4g6=rak9I}qU*v!60XL26U-168|(ji&*%XyYM>;vs z=T=e0zcf@y`dbav3>%02y4Ptja^$Zk5(+!gD6eQuQa&Ea1zL@Gcy$={&~FU#ZD3B& z6Kq_E7>2K7=~CJm64#7pf(c7Gkd9!rYf+I7@kSU>l0Ne*YxMMMC~?n@Vb!O>og+#TP3y?c9hAQ-T7&o=RnPaL^cMe%959c-q_?thwVKAa!z6AZjTSSJMW zT)|A%2Q8uPHAXq{euc-rDKwoMzU$I2Y%U}oWR8=ju PUNpFDda2|W$MF9H9$cq) From 30b98101eccce59a230483e10e7313b8b2527ede Mon Sep 17 00:00:00 2001 From: huang <1085210385@qq.com> Date: Sat, 7 Oct 2023 15:01:05 +0800 Subject: [PATCH 5/5] readme modify --- .../app_test/test_mqttclient/README.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/APP_Framework/Applications/app_test/test_mqttclient/README.md b/APP_Framework/Applications/app_test/test_mqttclient/README.md index caf4ea5ac..560f9dc0a 100644 --- a/APP_Framework/Applications/app_test/test_mqttclient/README.md +++ b/APP_Framework/Applications/app_test/test_mqttclient/README.md @@ -6,17 +6,17 @@ ### 2.1 MQTT数据结构定义 -![image-20231007142702891](.\imgs\图片4.png) +![image-20231007142702891](./imgs/图片4.png) ### 2.2 数据解析与加密 -![image-20231007143235579](.\imgs\图片5.png) +![image-20231007143235579](./imgs/图片5.png) ### 2.3 MQTT连接与订阅 -![image-20231007143448685](.\imgs\图片6.png) +![image-20231007143448685](./imgs/图片6.png) -![image-20231007143607579](.\imgs\图片7.png) +![image-20231007143607579](./imgs/图片7.png) ## 3. 测试程序说明 @@ -24,19 +24,19 @@ MQTT基于TCP/IP协议,分为客户端与服务端。在本任务中,ARM终 以下代码设置了进行订阅时需要的Client ID、用户名、密码及订阅主题。 -![image-20231007144555989](.\imgs\图片8.png) +![image-20231007144555989](./imgs/图片8.png) 客户端首先需要根据以上信息向服务端发起连接请求,验证用户名及密码 -![image-20231007144710185](.\imgs\图片9.png) +![image-20231007144710185](./imgs/图片9.png) 随后进行主题订阅,接收服务端发布的消息 -![image-20231007144823940](.\imgs\图片10.png) +![image-20231007144823940](./imgs/图片10.png) 在订阅过程中需要对获取的信息进行读取,同时每隔一段时间向服务端发送保持活性ping请求,以维持与服务端的连接 -![image-20231007144921430](.\imgs\图片11.png) +![image-20231007144921430](./imgs/图片11.png) ## 4. 测试流程 @@ -44,12 +44,12 @@ MQTT基于TCP/IP协议,分为客户端与服务端。在本任务中,ARM终 首先执行setip命令,设置设备ip地址 -![图片2](.\imgs\图片2.png) +![图片2](./imgs/图片2.png) 随后执行“MqttSocketRecvTest 服务器ip”命令,订阅主题,然后在服务器端发布消息如图所示 -![图片1](.\imgs\pic1.png) +![图片1](./imgs/pic1.png) 最终设备端接收到信息 -![图片3](.\imgs\pic2.png) \ No newline at end of file +![图片3](./imgs/pic2.png) \ No newline at end of file