async-hid

Crates.ioasync-hid
lib.rsasync-hid
version0.4.4
created_at2023-08-13 20:48:45.896986+00
updated_at2025-06-28 12:42:57.577369+00
descriptionA async library for interacting with HID devices
homepage
repositoryhttps://github.com/sidit77/async-hid
max_upload_size
id943580
size148,362
(sidit77)

documentation

README

async-hid

A Rust library for asynchronously interacting with HID devices.

This crate aims to be a replacement for hidapi-rs without the baggage that comes from being a wrapper around a C library.

This crate generally offers a simpler and more streamlined api while also supporting async as best as possible.

Example

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

#[pollster::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(())
}

Platform Support

Operating System Underlying API
Windows Win32 (Windows.Win32.Devices)
Windows WinRT (Windows.Devices.HumanInterfaceDevice)
Linux hidraw
MacOs IOHIDManager

Under Windows this crate uses either win32 (default) or winrt feature for backend.

Async

The amount of asynchronicity that each OS provides varies. The following table gives a rough overview which calls utilize async under the hood.

enumerate open read_input_report write_output_report
Windows (Win32) ❌️ ️️ ❌️ ✔️ ✔️
Windows (WinRT) ✔️ ✔️ ✔️ ✔️
Linux ✔️ ✔️
MacOS ✔️ ✔️

Under Linux this crate uses either async-io (default) or tokio feature for the async functionality.

Planned Features

  • Reading / Writing feature reports

License

MIT License

Commit count: 168

cargo fmt