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

    • 快速上手
  • Stream Dock

    • 插件SDK
    • 图标包

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

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

    • 插件SDK
  • Cpp SDK

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

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

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

    • 帮助和错误报告

DeviceManager

中央设备管理器,用于穷举所有连接的 StreamDock 设备。必须创建此类的实例才能检测和使用 StreamDock 设备。

获取设备管理器实例

DeviceManager 使用单例模式,通过以下方式获取实例:

DeviceManager &manager = DeviceManager::instance();

enumerate()

检测连接的 StreamDock 设备。

返回一个包含所有连接的 StreamDock 设备的map,其中key为设备路径,value为设备对象。

manager.enumerator();
auto streamDocks = manager.getStreamDocks();

listen()

监听有无新的设备连接或者有设备断开。

在Linux平台上,此方法使用libudev监听设备插拔事件。

在Windows平台上,此方法使用Windows消息机制(WM_DEVICECHANGE)监听设备插拔事件。

stopListen()

停止设备监听线程。

manager.stopListen();

getStreamDocks()

获取当前所有连接的StreamDock设备。

auto& streamDocks = manager.getStreamDocks();
for (const auto& device : streamDocks) {
    // device.first 是设备路径
    // device.second 是设备对象
    auto devicePath = device.first;
    auto streamDock = device.second;
}

异步事件处理

// 启动设备读取循环
device->reader()->startReadLoop();

// 注册按键事件回调
device->reader()->registerReadCallback(1, []() {
    std::cout << "Key 1 pressed" << std::endl;
}, RegisterEvent::KeyPress);

// 注册旋钮事件回调
device->reader()->registerReadCallback(16, []() {
    std::cout << "Knob left rotation" << std::endl;
}, RegisterEvent::KnobLeft);

设备热插拔监听和回调

平台文件函数位置用途
windowsdevicemanager_win.cppWindowProcDBT_DEVICEARRIVAL分支设备插入处理
windowsdevicemanager_win.cppWindowProcDBT_DEVICEREMOVECOMPLETE分支设备移除处理
Linuxdevicemanager_linux.cpplistenaction == "add" 分支设备插入处理
Linuxdevicemanager_linux.cpplistenaction == "remove" 分支设备移除处理

注意 :添加处理逻辑时要注意:

  1. 保持线程安全(使用现有的 streamdocksMutex_)
  2. 避免阻塞事件循环
  3. 异常处理要包裹现有逻辑
Last Updated:
Contributors: JKWTCN
Prev
依赖安装
Next
StreamDock 基类