HD Xml SDK协议模块
2024-08-09 11:41:11 +08:00
demo 1. 增加文档 2023-08-08 00:06:27 +08:00
Protocol 1. 修复每次都删除缓冲区 2024-08-09 11:41:11 +08:00
SDK 1. 去除一些编译警告 2023-08-18 17:41:17 +08:00
CMakeLists.txt 1. 去除一些编译警告 2023-08-18 17:41:17 +08:00
README.md 1. 更新文档 2023-08-10 12:01:10 +08:00

README

SDK协议接口详解 HDSDK.h

详情请看 HDSDK.h 头文件

  1. SDK协议封装了协议部分, 网络部分由用户自己实现, 只需给协议提供发送数据的回调和读取xml数据的回调接口即可. 接下来只需要将网络读取的数据传入协议即可.
static int sendDataToNet(const char *data, int len, void *userData)
{
    int len = write(fd, data, len);
    return len > 0 ? 1 : 0;
}

// 创建协议通信
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, kSetSendFunc, sendDataToNet);

// 开始执行协议协商
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 头文件

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();

// 设置协议
// 设置读取xml的数据的回调
// kSetReadXml = 0x0001
// kSetReadXmlData = 0x0002
// void readXml(const char *xml, int len, int errorCode, void *userData)
SetProtocolFunc(sdk, kSetReadXml, readXml);
SetProtocolFunc(sdk, kSetReadXmlData, sdkInfo);

// 设置这个回调, 这个回调就是需要write的发送数据的地方
// kSetSendFunc = 0x0003
// kSetSendFuncData = 0x0004
// int sendDataToNet(const char *data, int len, void *userData), 返回0或1, 1成功 0失败
SetProtocolFunc(sdk, kSetSendFunc, sendDataToNet);

// 开始执行协议协商
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);

Linux 编译方法

cd HDSDK
mkdir build
cd build
cmake ..
make -j16

# 已经编译完成了, 在Protocol有libHDSDK.so
cd Protocol

Windows编译方法

直接IDE打开CMakeLists.txt文件, 选好编译器编译就行了