summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2018-12-27 17:39:40 +0800
committerGitHub <[email protected]>2018-12-27 17:39:40 +0800
commite70cece9b5cda77af2259821e4aa4e30428c64bd (patch)
tree18244f687714874ab26f27fced9b926ac0c448e1
parent137ed381c72cd245ebba0db7dcfded45290440b5 (diff)
parentb18534e1af89f9a638a06e698ee6db7f5cf68c95 (diff)
Merge pull request #2128 from lymzzyh/master
[components][USB][Device][Core]fix the device_qualifier error respond on fullspeed
-rw-r--r--components/drivers/usb/usbdevice/core/core.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/components/drivers/usb/usbdevice/core/core.c b/components/drivers/usb/usbdevice/core/core.c
index fb850d6d2b..4e3a3e9280 100644
--- a/components/drivers/usb/usbdevice/core/core.c
+++ b/components/drivers/usb/usbdevice/core/core.c
@@ -194,7 +194,18 @@ static rt_err_t _get_descriptor(struct udevice* device, ureq_t setup)
_get_string_descriptor(device, setup);
break;
case USB_DESC_TYPE_DEVICEQUALIFIER:
- _get_qualifier_descriptor(device, setup);
+ /* If a full-speed only device (with a device descriptor version number equal to 0200H) receives a
+ GetDescriptor() request for a device_qualifier, it must respond with a request error. The host must not make
+ a request for an other_speed_configuration descriptor unless it first successfully retrieves the
+ device_qualifier descriptor. */
+ if(device->dcd->device_is_hs)
+ {
+ _get_qualifier_descriptor(device, setup);
+ }
+ else
+ {
+ rt_usbd_ep0_set_stall(device);
+ }
break;
case USB_DESC_TYPE_OTHERSPEED:
_get_config_descriptor(device, setup);