extern crate hidapi;
use hidapi::HidApi;
fn main() {
let mut found = false;
match HidApi::new() {
Ok(api) => {
for device in api.device_list() {
if device.vendor_id() == 0x1a86 && device.product_id() == 0xe041 {
found = true;
println!(
"{:04x}:{:04x}, {:?}",
device.vendor_id(), device.product_id(), device.serial_number()
);
match device.open_device(&api){
Ok(hid_device) => {
let data = [0x00, 0x55, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
match hid_device.write(&data) {
Ok(result) => {
eprintln!("write: {}", result);
},
Err(e) => {
eprintln!("write Error: {}", e);
}
}
},
Err(e) => {
eprintln!("Open Error: {}", e);
}
}
}
}
},
Err(e) => {
eprintln!("HIDApi Error: {}", e);
},
}
if !found {
println!("No device found");
}
}
PS C:\Users\Stephen\Documents\GitHub\USBSwitch\Rust> cargo build Finished dev [unoptimized + debuginfo] target(s) in 0.02s PS C:\Users\Stephen\Documents\GitHub\USBSwitch\Rust> .\target\debug\usbshare.exe No device found PS C:\Users\Stephen\Documents\GitHub\USBSwitch\Rust> .\target\debug\usbshare.exe 1a86:e041, None write: 9
That was surprisingly not hard. Sometimes the write fails, but it still switches, I think it switches before/while sending the ACK.
Trying linux.
stephen@AO751h:~/Documents/usbshare/usbshare$ cargo build
Compiling usbshare v0.1.0 (/home/stephen/Documents/usbshare/usbshare)
Finished dev [unoptimized + debuginfo] target(s) in 3.07s
stephen@AO751h:~/Documents/usbshare/usbshare$ ./target/debug/usbshare
1a86:e041, None
Open Error: Failed opening hid device
stephen@AO751h:~/Documents/usbshare/usbshare$ ls -alh /dev/hidraw0
crw-rw-r-- 1 root plugdev 243, 0 Sep 19 21:17 /dev/hidraw0
stephen@AO751h:~/Documents/usbshare/usbshare$ sudo ./target/debug/usbshare
[sudo] password for stephen:
1a86:e041, None
write Error: hidapi error: hid_error is not implemented yet
Sudo works.
Oh, udev again, Rust HID is using "0002:0003:00" instead of "/dev/hidraw#". New udev rules:
#works for pyusb control access, and rust hid SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="e041", MODE="0664", GROUP="plugdev" #works or chrome WebHID KERNEL=="hidraw*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="e041", MODE="0664", GROUP="plugdev"
stephen@AO751h:~/Documents/usbshare/usbshare$ sudo nano /etc/udev/rules.d/99-hid.rules
stephen@AO751h:~/Documents/usbshare/usbshare$ ./target/debug/usbshare
1a86:e041, None, "0002:0007:00"
Open Error: Failed opening hid device
stephen@AO751h:~/Documents/usbshare/usbshare$ sudo udevadm control --reload-rules
stephen@AO751h:~/Documents/usbshare/usbshare$ sudo udevadm trigger
stephen@AO751h:~/Documents/usbshare/usbshare$ ./target/debug/usbshare
1a86:e041, None, "0002:0007:00"
write Error: hidapi error: hid_error is not implemented yet
Success.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.