1 个不稳定版本
0.1.0 | 2023年8月13日 |
---|
#49 in #hid
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