mirror of
https://github.com/ferrous-systems/embedded-trainings-2020.git
synced 2024-10-31 22:28:49 +00:00
getting-device-configured.md: SET_CONFIGURATION fields -> prose; fix typo
This commit is contained in:
parent
38d6500879
commit
811402a423
2 changed files with 12 additions and 7 deletions
|
@ -16,14 +16,21 @@ Now modify the `print-descs` program to "open" the device -- this operation is c
|
|||
|
||||
## SET_CONFIGURATION
|
||||
|
||||
The SET_CONFIGURATION request is sent by the host to configure the device.
|
||||
The SET_CONFIGURATION request is sent by the host to configure the device. Its configuration according to section 9.4.7. of the USB spec is:
|
||||
|
||||
- `bmrequesttype` is 0b00000000
|
||||
- `brequest` is SET_CONFIGURATION
|
||||
- `wValue` contains the requested configuration value
|
||||
- `wIndex` and `wLength` are 0, there is no `wData`
|
||||
|
||||
To handle a SET_CONFIGURATION, do the following:
|
||||
|
||||
- If the device is in the `Default` state, you should stall the endpoint because the operation is not permitted in that state.
|
||||
|
||||
- If the device is in the `Address` state, then
|
||||
- if the requested configuration value is 0 (`None` in the `usb` API) then stay in the `Address` state
|
||||
- if the requested configuration value is non-zero and valid (was previously reported in a configuration descriptor) then move to the `Configured` state
|
||||
- if the requested configuration value is not valid then stall the endpoint
|
||||
- if `wValue` is 0 (`None` in the `usb` API) then stay in the `Address` state
|
||||
- if `wValue` is non-zero and valid (was previously reported in a configuration descriptor) then move to the `Configured` state
|
||||
- if `wValue` is not valid then stall the endpoint
|
||||
|
||||
- If the device is in the `Configured` state, then read the requested configuration value from `wValue`
|
||||
- if `wValue` is 0 (`None` in the `usb` API) then return to the `Address` state
|
||||
|
@ -35,8 +42,6 @@ This is done by writing 1 to the TASKS_EP0STATUS register.
|
|||
|
||||
NOTE: On Windows, you may get a `GET_STATUS` request *before* the `SET_CONFIGURATION` request and although you *should* respond to it, stalling the `GET_STATUS` request seems sufficient to get the device to the `Configured` state.
|
||||
|
||||
> Section 9.4.7 Set Configuration, of the USB spec contains the full description of how to handle this request.
|
||||
|
||||
## Expected output
|
||||
|
||||
Once you are correctly handling the `SET_CONFIGURATION` request you should get logs like these:
|
||||
|
|
|
@ -15,7 +15,7 @@ The definition of `Descriptor::Configuration` as well as the associated test has
|
|||
Your task now is to parse the data of this SETUP stage. We will start with the GET_DESCRIPTOR request, which is described in detail in section 9.4.3 of the USB specification. All the constants you will need are described in Tables 9-3, 9-4 and 9-5.
|
||||
|
||||
The fields of a GET_DESCRIPTOR request are as follows:
|
||||
- `bmrequesttype` is 0b00000000
|
||||
- `bmrequesttype` is 0b10000000
|
||||
- `bRequest` is GET_DESCRIPTOR
|
||||
- the high byte of `wValue` contains the descriptor type, whereas the low byte contains the descriptor index
|
||||
- `wIndex` is set to 0 for our purposes
|
||||
|
|
Loading…
Reference in a new issue