#hid #wrapper #async #usb #api-bindings

async-hid

用于与HID设备交互的异步库

1 个不稳定版本

0.1.0 2023年8月13日

#49 in #hid

MIT 许可证

58KB
1K SLoC

async-hid

用于异步与HID设备交互的Rust库。

这个crate旨在取代hidapi-rs,而不带有作为C库包装器的负担。

此crate通常提供一个更简单、更流畅的API,同时尽可能地支持异步。

示例

use async_hid::{AccessMode, DeviceInfo, HidResult};
use simple_logger::SimpleLogger;
use futures_lite::StreamExt;

#[tokio::main]
async fn main() -> HidResult<()> {
    SimpleLogger::new().init().unwrap();

    let device = DeviceInfo::enumerate()
        .await?
        //Steelseries Arctis Nova 7X headset
        .find(|info: &DeviceInfo | info.matches(0xFFC0, 0x1, 0x1038, 0x2206))
        .await
        .expect("Could not find device")
        .open(AccessMode::ReadWrite)
        .await?;

    device.write_output_report(&[0x0, 0xb0]).await?;
    let mut buffer = [0u8; 8];
    let size = device.read_input_report(&mut buffer).await?;
    println!("{:?}", &buffer[..size]);
    Ok(())
}

平台支持

操作系统 底层API
Windows WinRT (Windows.Devices.HumanInterfaceDevice)
Linux hidraw
MacOs IOHIDManager

异步

每个操作系统提供的异步程度不同。以下表格概述了哪些调用在底层使用异步。

枚举 打开 读取输入报告 写入输出报告
Windows ✔️ ✔️ ✔️ ✔️
Linux ✔️ ✔️
MacOS ✔️ ✔️

在Linux下,此crate需要一个tokio运行时,而Windows和MacOS后端则与运行时无关。

计划中的功能

  • 读取/写入功能报告
  • 监听设备列表的变化
  • 更统一的错误处理

许可证

MIT许可证

依赖

~0–39MB
~597K SLoC