Crate async_hid

Source
Expand description

§async-hid

A Rust library for asynchronously interacting with HID devices.

This crate aims the 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;

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

§Platform Support

Operating SystemUnderlying API
WindowsWin32 (Windows.Win32.Devices)
WindowsWinRT (Windows.Devices.HumanInterfaceDevice)
Linuxhidraw
MacOsIOHIDManager

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 tables gives a rough overview which calls utilize async under the hood.

enumerateopenread_input_reportwrite_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
  • Listening for changes to the device list
  • More unified error handling

§License

MIT License

Structs§

Device
A struct representing an opened device
DeviceId
An opaque struct that wraps the OS specific identifier of a device
DeviceInfo
A struct containing basic information about a device
HidError

Enums§

AccessMode
An enum that controls how a device will be opened
ErrorSource

Traits§

SerialNumberExt

Type Aliases§

HidResult