Skip to main content

Crate hidra

Crate hidra 

Source
Expand description

§hidra

A pure-Rust HID library.

hidra talks to HID devices through native OS interfaces:

TargetNativenusb (feature nusb)
Linuxhidraw device nodes + sysfs enumerationUSB interrupt/control transfers via nusb
Windowshid.dll / SetupAPI via windows-sys declarationsas above
macOSIOHIDManager via direct framework FFIas above

On WebAssembly the backend is always WebHID via web-sys.

use hidra::{Hidra, Nusb};
let native = Hidra::new()?;                    // the OS HID stack
let usb = Hidra::<Nusb>::builder().build()?;  // raw USB transfers

They are different types, so a handle that holds either is the caller’s to declare; examples/backends.rs shows the whole of it.

Following nusb’s model, every Hidra / HidDevice I/O method returns an impl Future. On native targets bring MaybeFuture into scope to drive it blocking with .wait(), or .await it under any async runtime (no executor dependency, wake-ups are plain Wakers like nusb).

On wasm32 the same Hidra / HidDevice types are backed by WebHID; there is no blocking mode, so always .await their futures (no .wait()). Discovery is WebHID-shaped: Hidra::request_device shows the browser’s device chooser (filtered with DeviceFilter) and Hidra::get_devices lists previously granted devices. descriptor offers report-descriptor primitives that work everywhere.

use hidra::MaybeFuture;
let api = hidra::Hidra::new()?;
for dev in api.device_list() {
    println!("{:04x}:{:04x} {}", dev.vendor_id(), dev.product_id(),
             dev.product_string().unwrap_or("<unnamed>"));
}
let device = api.open(0x046d, 0xc216).wait()?;
device.write(&[0x00, 0x01, 0x02]).wait()?; // report ID 0 + payload
let mut buf = [0u8; 64];
let len = device.read(&mut buf).wait()?;

Modules§

descriptor
HID report descriptor primitives.
report_info
WebHID-style collection primitives, also usable standalone.

Structs§

ApiVersion
hidra’s version, mirroring hid_version().
DeviceFilter
WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. A device filter for crate::Hidra::request_device, mirroring WebHID’s HIDDeviceFilter dictionary. Unset fields match anything.
DeviceInfo
Information about a connected HID device, as returned by enumeration.
EventListenerHandle
WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. Keeps an event listener (and the Rust closure backing it) alive; removes the listener when dropped.
HidDevice
An HID device exposed by the browser, backed by WebHID.
Hidra
Entry point to the library, backed by WebHID (navigator.hid).
InputReportStream
WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. WebHID-only public surface: the device filter for Hidra::request_device, the listener handle returned by the event hooks, and the buffered input report stream from HidDevice::start_reading. A buffered reader over inputreport events, created by crate::HidDevice::start_reading.

Enums§

BusType
The underlying transport a HID device is attached through.
HidError
Errors returned by hidra.

Constants§

MAX_REPORT_DESCRIPTOR_SIZE
Largest report descriptor a HID device can have (HID_API_MAX_REPORT_DESCRIPTOR_SIZE).

Functions§

version
Library version (hid_version equivalent).
version_str
Library version string (hid_version_str equivalent).

Type Aliases§

HidResult
Convenience alias used by every fallible API in this crate.