Crate async_hid

Source
Expand description

§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 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 table 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

§License

MIT License

Structs§

Device
A HID device that was detected by calling HidBackend::enumerate
DeviceInfo
A struct containing basic information about a device
DeviceReader
A reader than can be used to read input reports from a HID device using AsyncHidRead::read_input_report
DeviceWriter
A writer than can be used to write output reports from a HID device using AsyncHidWrite::write_output_report
HidBackend
The main entry point of this library

Enums§

BackendType
All available backends for the current platform
DeviceEvent
DeviceId
A platform-specific identifier for a device.
HidError
The main error type of this library Currently mostly a wrapper around a platform specific error

Traits§

AsyncHidRead
Provides functionality for reading from HID devices
AsyncHidWrite
Provides functionality for writing to HID devices

Type Aliases§

DeviceReaderWriter
Combination of DeviceReader and DeviceWriter
HidResult
Specialized result type used for many functions in this library