Expand description
§hidra
A pure-Rust HID library.
hidra talks to HID devices through native OS interfaces:
| Target | Native | Nusb (feature nusb) |
|---|---|---|
| Linux | hidraw device nodes + sysfs enumeration | USB interrupt/control transfers via nusb |
| Windows | hid.dll / SetupAPI via windows-sys declarations | as above |
| macOS | IOHIDManager via direct framework FFI | as above |
On WebAssembly the backend is always
WebHID via web-sys.
The backend is a type parameter: Hidra<Native> for the OS HID
stack, Hidra<Nusb> for raw USB. Both coexist in one build, so a
program can drive two devices through different backends at once. A backend
this build does not have cannot be named, so the wrong choice is a compile
error rather than a run-time one.
use hidra::{Hidra, Nusb};
let native = Hidra::new()?; // the OS HID stack
let usb = Hidra::<Nusb>::builder().build()?; // raw USB transfersThey 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(). - Device
Info - Information about a connected HID device, as returned by enumeration.
- HidDevice
- An open HID device. Closed on drop.
- Hidra
- Entry point to the library; owns backend state and the cached device list.
- Hidra
Builder - Configures a
Hidra: whether to enumerate up front, and on which backend. - Native
- The Linux
hidrawbackend: device nodes plus sysfs enumeration. - Native
Device - An open hidraw device node.
- Nusb
- Entry point for the USB backend; behind a
crate::Hidrabuilt withNusb. See the module docs for when to prefer it. The raw-USB backend: HID reports over nusb transfers. - Nusb
Device - An open USB HID interface; behind a
crate::HidDeviceopened throughNusb.
Enums§
Constants§
- MAX_
REPORT_ DESCRIPTOR_ SIZE - Largest report descriptor a HID device can have
(
HID_API_MAX_REPORT_DESCRIPTOR_SIZE).
Traits§
- HidBackend
- The backend traits, and the backend types implementing them. The backend traits, and the backend types implementing them. The backend traits, and the backend types implementing them. Enumerating and opening HID devices through one implementation.
- HidDevice
Backend - The backend traits, and the backend types implementing them. The backend traits, and the backend types implementing them. The backend traits, and the backend types implementing them. One open HID device.
- Maybe
Future - Extension trait adding a blocking
.wait()to every action.
Functions§
- version
- Library version (
hid_versionequivalent). - version_
str - Library version string (
hid_version_strequivalent).
Type Aliases§
- HidResult
- Convenience alias used by every fallible API in this crate.