diff --git a/advanced/common/usb/src/lib.rs b/advanced/common/usb/src/lib.rs index 7e7b3b5..e3762d9 100644 --- a/advanced/common/usb/src/lib.rs +++ b/advanced/common/usb/src/lib.rs @@ -54,13 +54,15 @@ impl Request { const SET_ADDRESS: u8 = 5; // TODO implement another branch handling GET_DESCRIPTOR requests: - - // 1. get descriptor type and descriptor index from wValue - - // 2. confirm that the descriptor - // - is of type DEVICE and - // - has descriptor index 0 (i.e. it is the first implemented descriptor for this type) and - // - has wIndex 0 (i.e. no language ID since it's not a string descriptor) + // + // 1. get descriptor type and descriptor index from `wValue` + // + // 2. confirm that + // - the descriptor type is DEVICE, i.e. of value 1 and + // - the descriptor index is 0 (i.e. it is the first implemented descriptor for this type) and + // - `wIndex` is 0 (i.e. no language ID since it's not a string descriptor) + // + // For more details, see https://embedded-trainings.ferrous-systems.com/setup-stage.html if bmrequesttype == 0b00000000 && brequest == SET_ADDRESS { // Set the device address for all future accesses. diff --git a/embedded-workshop-book/src/get-descriptor-config.md b/embedded-workshop-book/src/get-descriptor-config.md index 49a6283..d20c453 100644 --- a/embedded-workshop-book/src/get-descriptor-config.md +++ b/embedded-workshop-book/src/get-descriptor-config.md @@ -2,6 +2,16 @@ When the host issues a GET_DESCRIPTOR *Configuration* request the device needs to respond with the requested configuration descriptor *plus* all the interface and endpoint descriptors associated to that configuration descriptor during the DATA stage. - A GET_DESCRIPTOR Configuration request is a GET_DESCRIPTOR request where the descriptor type encoded in the high bit of `wValue` is CONFIGURATION. +As a reminder, all GET_DESCRIPTOR request types are share the following properties: -Let's look into all the concepts required to respond to this request. +- `bmRequestType` is **0b10000000** +- `bRequest` is **6** (i.e. the GET_DESCRIPTOR Request Code, defined in table 9-4 of the [USB specification][usb_spec]) + + +A GET_DESCRIPTOR *Configuration* request is determined the high bit of its `wValue` field: + +- The high bit of `wValue` is **2** (i.e. the `CONFIGURATION` descriptor type, defined in table 9-5 of the [USB specification][usb_spec]) + +[usb_spec]: https://www.usb.org/document-library/usb-20-specification + +In the next sections, let's look into all the concepts required to respond to this request. diff --git a/embedded-workshop-book/src/setup-stage.md b/embedded-workshop-book/src/setup-stage.md index 8e3aa5a..a301a30 100644 --- a/embedded-workshop-book/src/setup-stage.md +++ b/embedded-workshop-book/src/setup-stage.md @@ -17,7 +17,7 @@ The definition of `Descriptor::Configuration` as well as the associated test has ❗️ Keep the cable connected to the J3 port for the rest of the workshop -Start with the GET_DESCRIPTOR request, which is described in detail in section 9.4.3 of the [USB specification][usb_spec]. All the constants we'll be using are also described in Tables 9-3, 9-4 and 9-5 of the USB spec. +Start with the GET_DESCRIPTOR request, which is described in detail in section 9.4.3 of the [USB specification][usb_spec]. All the constants we'll be using are also described in Tables 9-3, 9-4 and 9-5 of the same document. [usb_spec]: https://www.usb.org/document-library/usb-20-specification