From 903a9c8871285da15a6335d955b3ada7c63d59fb Mon Sep 17 00:00:00 2001 From: Vitalii Bursov Date: Wed, 1 May 2024 19:14:38 +0300 Subject: [PATCH] Update README.md, add usb-class-tester.png --- README.md | 11 +++++++++++ usb-class-tester.png | Bin 0 -> 32624 bytes 2 files changed, 11 insertions(+) create mode 100644 usb-class-tester.png diff --git a/README.md b/README.md index 2159938..1743f37 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,17 @@ protocols in USB devices which are based on `usb-device` crate by providing a means of simulating Host's accesses to the device. +The diagram below gives an idea how different components +relate to each other. `UsbClass` works with `usb-device` +as usual. The test case can call `UsbClass`' functions +if necessary. `usbd-class-tester` tries to emulate USB +Host behavior and work with `UsbClass`, as the Host would +do, via `usb-device`'s `UsbBus`. The test case calls +`Device` functions to interact with `UsbClass` - +perform control transfers or send and receive data. + +![Class and usage diagram](usb-class-tester.png) + Initial implementation was done for tests in `usbd-dfu` crate. This library is based on that idea, but extends it a lot. For example it adds a set of convenience diff --git a/usb-class-tester.png b/usb-class-tester.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b1e6504ce0e01a902aab096c9a641b33238a8e GIT binary patch literal 32624 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 A-2eap literal 0 HcmV?d00001