Crates.io | webusb |
lib.rs | webusb |
version | 0.5.0 |
source | src |
created_at | 2021-09-06 16:58:31.132243 |
updated_at | 2022-07-24 13:40:56.507788 |
description | WebUSB API implementation in Rust |
homepage | |
repository | https://github.com/littledivy/webusb |
max_upload_size | |
id | 447619 |
size | 83,403 |
Implementation of the WebUSB specification in Rust.
[dependencies]
webusb = "0.5.0"
import "https://deno.land/x/webusb/mod.ts";
const devices = await navigator.usb.getDevices();
// Arduino Leonardo
let device = devices.find((p) => p.productId == 0x8036);
await device.open();
console.log("Device opened.");
if (device.configuration === null) {
device.selectConfiguration(1);
}
console.log(`${device.productName} - ${device.serialNumber}`);
await device.claimInterface(2);
await device.selectAlternateInterface(2, 0);
await device.controlTransferOut({
"requestType": "class",
"recipient": "interface",
"request": 0x22,
"value": 0x01,
"index": 2,
});
while (true) {
const action = prompt(">>");
if (action.toLowerCase() == "exit") break;
const data = new TextEncoder().encode(action);
await device.transferOut(4, data);
console.info("Transfer.");
}
await device.controlTransferOut({
"requestType": "class",
"recipient": "interface",
"request": 0x22,
"value": 0x00,
"index": 2,
});
await device.close();
console.log("Bye.");
Hardware tests are run before merging a PR and then on main
. The test runner
is a self-hosted Linux x86_64 machine, it is connected to an Arduino Leonardo
(ATmega32u4) via micro USB connection.
Tests are reviewed and triggered by maintainers on PRs to prevent malicious execution. Load this sketch into yours to run the tests locally.
When writing tests you might encounter frequent Io / NoDevice errors, this can
be due to loose wired connection. Mark these tests as
#[flaky_test::flaky_test]
.
MIT License