Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/littledivy/webusb
WebUSB API implementation in Rust (and Deno)
https://github.com/littledivy/webusb
deno ffi rust usb webusb
Last synced: 1 day ago
JSON representation
WebUSB API implementation in Rust (and Deno)
- Host: GitHub
- URL: https://github.com/littledivy/webusb
- Owner: littledivy
- Created: 2021-09-03T16:07:19.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-19T06:17:07.000Z (3 months ago)
- Last Synced: 2024-12-30T00:09:53.260Z (8 days ago)
- Topics: deno, ffi, rust, usb, webusb
- Language: Rust
- Homepage: https://crates.io/crates/webusb
- Size: 81.1 KB
- Stars: 56
- Watchers: 4
- Forks: 3
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# webusb
Implementation of the [WebUSB specification](https://wicg.github.io/webusb/) in
Rust.[![Documentation](https://docs.rs/webusb/badge.svg)](https://docs.rs/webusb)
[![Package](https://img.shields.io/crates/v/webusb.svg)](https://crates.io/crates/webusb)
[![Coverage Status](https://coveralls.io/repos/github/littledivy/webusb/badge.svg)](https://coveralls.io/github/littledivy/webusb)```toml
[dependencies]
webusb = "0.5.0"
```### Usage with Deno
```typescript
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.");
```### Testing
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](https://github.com/webusb/arduino/blob/gh-pages/demos/console/sketch/sketch.ino)
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]`.### License
MIT License