Crates.io | hidg |
lib.rs | hidg |
version | 0.2.0 |
source | src |
created_at | 2022-10-02 08:31:55.994425 |
updated_at | 2024-05-11 05:01:07.467369 |
description | Linux USB HID Gadget emulation |
homepage | https://github.com/katyo/hidg-rs |
repository | https://github.com/katyo/hidg-rs |
max_upload_size | |
id | 678194 |
size | 17,489 |
Rust crate for interfacing with Linux HID Gadget devices (/dev/hidgX).
Since all functionality is dependent on Linux function calls, this crate only compiles for Linux systems.
Keyboard input simulation:
use hidg::{Class, Device, Keyboard, Key, Led, StateChange};
fn main() -> std::io::Result<()> {
let mut device = Device::<Keyboard>::open(0)?; // open device
// Create input report
let mut input = Keyboard.input();
// Press left ctrl modifier
input.press_key(Key::LeftCtrl);
// Press key 'A'
input.press_key(Key::A);
// Send input report
device.input(&input)?;
// Get pressed keys
println!("Keys: {:?}", input.pressed().collect::<Vec<Key>>());
// Release left ctrl modifier
input.release_key(Key::LeftCtrl);
// Release key 'A'
input.release_key(Key::A);
// Send input report
device.input(&input)?;
// Create output report
let mut output = Keyboard.output();
// Receive output report
device.output(&mut output)?;
// Print lit LEDs
println!("LEDs: {:?}", output.lit().collect::<Vec<Led>>());
Ok(())
}
Mouse input simulation:
use hidg::{Button, Class, Device, Mouse, StateChange, ValueChange};
fn main() -> std::io::Result<()> {
let mut device = Device::<Mouse>::open("hidg0")?; // open device
// Create input report
let mut input = Mouse.input();
// Press primary button
input.press_button(Button::Primary);
// Update pointer coordinates
input.change_pointer((150, 50), false);
// Send input report
device.input(&input)?;
// Move pointer relatively
input.change_pointer((70, -30), true);
// Get pressed buttons
println!("Buttons: {:?}", input.pressed().collect::<Vec<Button>>());
// Release primary button
input.release_button(Button::Primary);
// Send input report
device.input(&input)?;
Ok(())
}