blob: 931c5a58383f2bba29f1c80ec18991eef561497d [file] [log] [blame] [view]
# USB
`device/usb` abstracts [Universal Serial Bus](https://en.wikipedia.org/wiki/USB)
concepts across multiple platforms.
Clients should use the [public Mojo interface](/device/usb/public/mojom).
## USB ID Repository
`/third_party/usb_ids/usb.ids` is imported regularly to provide human-readable
descriptions of USB devices.
## Ongoing Work transitioning away from `libusb`
`UsbService` is implemented by `UsbServiceImpl` based on `third_party/libusb`.
Work is ongoing to implement each platform directly, without using `libusb`.
* `UsbServiceAndroid` done.
* `UsbServiceLinux` done.
* macOS not started.
* `UsbServiceWin` in progress. Enable via `chrome://flags/#new-usb-backend`
## Testing
### Unit Tests
Standard use of `*_unittest.cc` files for must code coverage.
### Fuzzers
[libFuzzer] tests are in `*_fuzzer.cc` files. They test for bad input from
devices, e.g. when parsing device descriptors during device enumeration.
[libFuzzer]: /testing/libfuzzer/README.md
### Gadget Tests
[USB/HID API Testing with Gadgets] describes a framework for testing the Chrome
USB, HID and serial device APIs with real devices on generally accessible
hardware.
[USB/HID API Testing with Gadgets]: https://docs.google.com/document/d/1O9jTlOAyeCwZX_XRbmQmNFidcJo8QZQSaodP-wmyess
Unit tests using the gadget can be run manually with a hardware "gadget". These
unit tests all call [UsbTestGadget::Claim].
[UsbTestGadget::Claim]: https://cs.chromium.org/search/?q=UsbTestGadget::Claim&type=cs