7个版本 (4个重大更新)

0.5.0 2022年7月24日
0.4.0 2022年2月18日
0.3.0 2021年9月26日
0.2.0 2021年9月24日
0.1.2 2021年9月8日

#1394 in 硬件支持

MIT许可证

73KB
2K SLoC

Rust 1.5K SLoC // 0.1% comments TypeScript 486 SLoC // 0.1% comments Shell 3 SLoC // 0.4% comments

webusb

Rust中对WebUSB规范的实现。

Documentation Package Coverage Status

[dependencies]
webusb = "0.5.0"

ko-fi

与Deno的用法

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.");

测试

在合并PR之前和之后在main上运行硬件测试。测试运行器是一个自托管的Linux x86_64机器,通过微型USB连接连接到Arduino Leonardo (ATmega32u4)。

测试由维护者在PR上审查和触发,以防止恶意执行。将此草图加载到您的项目中以在本地运行测试。

在编写测试时,可能会遇到频繁的Io / NoDevice错误,这可能是由于连接松动。将这些测试标记为#[flaky_test::flaky_test]

许可证

MIT许可证

依赖项

~0–600KB
~13K SLoC