From 93620d6def4d450610093e6e455c7815e133fd4a Mon Sep 17 00:00:00 2001 From: coffee Date: Tue, 8 Aug 2023 00:06:27 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=A2=9E=E5=8A=A0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 103 ++++++++++++++++++++++++++++++++++++++++++ SDK/SDKInfo.cpp | 2 +- SDK/SDKInfo.h | 2 +- demo/eth.cpp | 2 +- demo/lightInfo.cpp | 2 +- demo/systemVolume.cpp | 2 +- demo/tcpServer.cpp | 2 +- demo/time.cpp | 2 +- 8 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e91b8df --- /dev/null +++ b/README.md @@ -0,0 +1,103 @@ +# README + +## SDK协议接口详解 HDSDK.h + +> 详情请看 HDSDK.h 头文件 + +1. SDK协议封装了协议部分, 网络部分由用户自己实现, 只需给协议提供发送数据的回调和读取xml数据的回调接口即可. 接下来只需要将网络读取的数据传入协议即可. + +```cpp +// 创建协议通信 +IHDProtocol sdk = CreateProtocol(); + +// 设置协议 +// kSetReadXml = 0x0001 +// kSetReadXmlData = 0x0002 +// void readXml(const char *xml, int len, int errorCode, void *userData) +SetProtocolFunc(sdk, kSetReadXml, func); + +// 设置这个回调, 这个回调就是需要write的发送数据的地方 +// kSetSendFunc = 0x0003 +// kSetSendFuncData = 0x0004 +// int sendDataToNet(const char *data, int len, void *userData), 返回0或1, 1成功 0失败 +SetProtocolFunc(sdk, kSetReadXml, func); + +// 开始执行协议协商 +RunProtocol(sdk); + +// 发送xml数据通信sdk +SendXml(sdk, xml, xmlLen); + +for (;;) { + // 将所有读取到的数据都推入UpdateReadData + data = read(); + UpdateReadData(sdk, data, data.size()); +} + +// 释放协议体 +FreeProtocol(sdk); +``` + +## 使用SDK信息体构建xml SDKInfo.h + +> 详情请看 SDKInfo.h 头文件 + +```cpp +static void readXml(const char *xml, int len, int errorCode, void *userData) +{ + if (errorCode != 0) { + printf("error code[%d]\n", errorCode); + return ; + } + + // 解析xml + ISDKInfo info = (ISDKInfo)userData; + ParseXml(info, xml, len); + + printf("模式[%d]\n", GetLightInfoMode(info)); + printf("亮度值[%d]\n", GetLightInfoDefaultLight(info)); +} + +// 构建xml信息体 +ISDKInfo sdkInfo = CreateSDKInfo(); + +// 创建协议通信 +IHDProtocol sdk = CreateProtocol(); + +// 设置协议 +// kSetReadXml = 0x0001 +// kSetReadXmlData = 0x0002 +// void readXml(const char *xml, int len, int errorCode, void *userData) +SetProtocolFunc(sdk, kSetReadXml, func); + +// 设置这个回调, 这个回调就是需要write的发送数据的地方 +// kSetSendFunc = 0x0003 +// kSetSendFuncData = 0x0004 +// int sendDataToNet(const char *data, int len, void *userData), 返回0或1, 1成功 0失败 +SetProtocolFunc(sdk, kSetReadXml, readXml); +SetProtocolFunc(sdk, kSetSendFuncData, sdkInfo); + +// 开始执行协议协商 +RunProtocol(sdk); + +// 发送获取亮度请求 +// kGetLightInfo = 0x1000 +UpdateItem(sdk, sdkInfo, kGetLightInfo); + +// 设置亮度信息体, 模式, 亮度值 +SetLightInfo(sdkInfo, 0, 100); + +// 发送设置亮度请求 +// kSetLightInfo = 0x1001 +UpdateItem(sdk, sdkInfo, kSetLightInfo); + +for (;;) { + // 将所有读取到的数据都推入UpdateReadData + data = read(); + UpdateReadData(sdk, data, data.size()); +} + +FreeSDKInfo(sdkInfo); +FreeProtocol(sdk); +``` + diff --git a/SDK/SDKInfo.cpp b/SDK/SDKInfo.cpp index b659f1f..98043ca 100644 --- a/SDK/SDKInfo.cpp +++ b/SDK/SDKInfo.cpp @@ -35,7 +35,7 @@ void DLL_CALL FreeSDKInfo(sdk::ISDKInfo info) } -HBool DLL_CALL ParseXml(const char *xml, int len, ISDKInfo info) +HBool DLL_CALL ParseXml(ISDKInfo info, const char *xml, int len) { if (xml == nullptr || info == nullptr || len <= 0) { return HFalse; diff --git a/SDK/SDKInfo.h b/SDK/SDKInfo.h index e3a88be..b583168 100644 --- a/SDK/SDKInfo.h +++ b/SDK/SDKInfo.h @@ -24,7 +24,7 @@ HD_API ISDKInfo DLL_CALL CreateSDKInfo(); ///< 释放信息体 HD_API void DLL_CALL FreeSDKInfo(ISDKInfo info); ///< 解析xml生成对应数据信息 -HD_API HBool DLL_CALL ParseXml(const char *xml, int len, ISDKInfo info); +HD_API HBool DLL_CALL ParseXml(ISDKInfo info, const char *xml, int len); enum eUpdateItem { kGetLightInfo = 0x1000, ///< 获取亮度信息 diff --git a/demo/eth.cpp b/demo/eth.cpp index e442976..02257eb 100644 --- a/demo/eth.cpp +++ b/demo/eth.cpp @@ -35,7 +35,7 @@ static void ReadXml(const char *xml, int len, int errorCode, void *userData) { printf("error code[%d]\n", errorCode); return ; } - ParseXml(xml, len, info->info); + ParseXml(info->info, xml, len); std::cout << "dhcp:" << GetEhtInfoDhcp(info->info) << "\n" << "ip:" << GetEhtInfoIp(info->info) << "\n" diff --git a/demo/lightInfo.cpp b/demo/lightInfo.cpp index 0a2f9b9..e8b59c7 100644 --- a/demo/lightInfo.cpp +++ b/demo/lightInfo.cpp @@ -35,7 +35,7 @@ static void ReadXml(const char *xml, int len, int errorCode, void *userData) { printf("error code[%d]\n", errorCode); return ; } - ParseXml(xml, len, info->info); + ParseXml(info->info, xml, len); std::cout << "mode:" << GetLightInfoMode(info->info) << "\n" << "defaultLight:" << GetLightInfoDefaultLight(info->info) << "\n" diff --git a/demo/systemVolume.cpp b/demo/systemVolume.cpp index 1407eb0..343cdc0 100644 --- a/demo/systemVolume.cpp +++ b/demo/systemVolume.cpp @@ -35,7 +35,7 @@ static void ReadXml(const char *xml, int len, int errorCode, void *userData) { printf("error code[%d]\n", errorCode); return ; } - ParseXml(xml, len, info->info); + ParseXml(info->info, xml, len); std::cout << "mode:" << GetSystemVolumeInfoMode(info->info) << "\n" << "volume:" << GetSystemVolumeInfoVolume(info->info) << "\n" diff --git a/demo/tcpServer.cpp b/demo/tcpServer.cpp index ccf98cf..12adb73 100644 --- a/demo/tcpServer.cpp +++ b/demo/tcpServer.cpp @@ -35,7 +35,7 @@ static void ReadXml(const char *xml, int len, int errorCode, void *userData) { printf("error code[%d]\n", errorCode); return ; } - ParseXml(xml, len, info->info); + ParseXml(info->info, xml, len); std::cout << "ip:" << GetTcpServerInfoIp(info->info) << "\n" << "port:" << GetTcpServerInfoPort(info->info) << "\n" diff --git a/demo/time.cpp b/demo/time.cpp index da42732..90abfba 100644 --- a/demo/time.cpp +++ b/demo/time.cpp @@ -35,7 +35,7 @@ static void ReadXml(const char *xml, int len, int errorCode, void *userData) { printf("error code[%d]\n", errorCode); return ; } - ParseXml(xml, len, info->info); + ParseXml(info->info, xml, len); std::cout << "timeZone:" << GetTimeInfoTimeZone(info->info) << "\n" << "summer:" << GetTimeInfoSummer(info->info) << "\n"