通信传输
基础传输层,表示一个抽象的通信后端。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;
