CreatorCreator
首页
快速上手
  • 中文简体
  • English
首页
快速上手
  • 中文简体
  • English
  • Creator

    • 快速上手
  • Stream Dock

    • 插件SDK
    • 图标包

      • 概述
      • 术语
      • 创建图标包
      • 图标规格
    • 场景配置

      • 什么是场景配置?
      • 导出
      • 使用案例
  • mPanel

    • 插件SDK
  • Cpp SDK

    • 概述
    • 依赖安装
    • 设备管理器
    • StreamDock 基类
    • 通信传输
    • 示例
    • API参考
    • 源代码
  • Python SDK

    • 概述
    • 依赖安装
    • 设备管理器
    • StreamDock 基类
    • API 参考
    • 示例
    • 源代码
  • Windows-WebSocket SDK

    • 概述
    • 快速上手
    • 发送的事件
    • 接收的事件
    • 源代码
  • 支持

    • 帮助和错误报告

通信传输

基础传输层,表示一个抽象的通信后端。TransportCWrapper类封装了HID设备操作,提供了C++风格的接口。

TransportCWrapper类

TransportCWrapper是C++封装类,用于简化transport_c.h库的使用,提供RAII风格的资源管理。

构造函数

explicit TransportCWrapper(const hid_device_info& device_info);

使用设备信息初始化连接。

析构函数

自动释放底层TransportHandle资源。

基础通信接口

检查设备是否可写

bool canWrite() const;

读取设备数据

void read(uint8_t* response, size_t* length, int32_t timeoutMs = -1) const;

获取固件版本

std::string getFirmwareVesion() const;

屏幕控制接口

唤醒屏幕

void wakeupScreen() const;

设置按键亮度

void setKeyBrightness(uint8_t brightness) const;

刷新显示

void refresh() const;

睡眠模式

void sleep() const;

按键控制接口

清空所有按键

void clearAllKeys() const;

清空指定按键

void clearKey(uint8_t key_value) const;

图像传输接口

设置按键图像(JPEG流)

void setKeyImgFileStream(const std::string& jpegData, uint8_t keyValue) const;

设置背景图像(JPEG流)

void setBackgroundImgStream(const std::string& jpegData, int32_t timeoutMs = 3000) const;

设置背景图像(位图流)

void setBackgroundBitmap(const std::string& bitmapStream, int32_t timeoutMs = 5000) const;

设置背景帧(用于动画)

void setBackgroundFrameStream(const std::string& jpegData, uint16_t width, uint16_t height,
                              uint16_t x = 0, uint16_t y = 0, uint8_t FBlayer = 0x00) const;

清空背景帧

void clearBackgroundFrameStream(uint8_t postion = 0x03) const;

LED控制接口

设置LED亮度

void setLedBrightness(uint8_t brightness) const;

设置LED颜色

void setLedColor(uint16_t count, uint8_t r, uint8_t g, uint8_t b) const;

重置LED颜色

void resetLedColor() const;

设备配置接口

设置设备配置

void setDeviceConfig(std::vector<uint8_t> configs) const;

更改设备模式

void changeMode(uint8_t mode) const;

连接管理接口

断开连接

void disconnected() const;

发送心跳包

void heartbeat() const;

报告设置接口

设置报告ID

void setReportID(uint8_t reportID) const;

获取报告ID

uint8_t reportID() const;

设置报告大小

void setReportSize(uint16_t input_report_size, uint16_t output_report_size, uint16_t feature_report_size);

错误处理接口

获取最后的HID错误

void rawHidLastError(wchar_t* errMsg, size_t* length) const;

静态方法

禁用输出

static void disableOutput(bool isDisable = true);

异步操作支持

SDK 支持异步操作,可以在读取返回信息的同时执行其他操作:

// 检查是否可以写入
if (transport.canWrite()) {
    // 异步设置背景图像
    transport.setBackgroundImgStream(jpegData, 3000);
  
    // 不需要等待,可以继续执行其他操作
    transport.setKeyBrightness(100);
}

多线程安全

TransportCWrapper 可以在多个线程中同时使用:

// 线程1:读取设备数据
std::thread readThread([&transport]() {
    uint8_t response[64];
    size_t length;
    while (running) {
        transport.read(response, &length, 1000);
        // 处理响应数据
    }
});

// 线程2:发送命令
std::thread writeThread([&transport]() {
    transport.setKeyImgFileStream(jpegData, 1);
    transport.refresh();
});

设备热插拔支持

TransportCWrapper 与 DeviceManager 配合,支持 Linux, Windows 平台设备热插拔:

错误处理

提供详细的错误信息:

// 获取最后的错误信息
wchar_t errMsg[128];
size_t length;
transport.rawHidLastError(errMsg, &length);

// 转换为字符串
std::wstring errorStr(errMsg, length);
std::wcout << L"Error: " << errorStr << std::endl;
Last Updated:
Contributors: JKWTCN
Prev
StreamDock 基类
Next
示例