diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-07-24 22:29:44 +0200 |
---|---|---|
committer | Marcin Bukat <marcin.bukat@gmail.com> | 2013-07-24 23:16:38 +0200 |
commit | 21c5ffe09a6ea1e9b1a4bd13a047b0ad2845ee1b (patch) | |
tree | a9d9fdc73573ef789f393103c394761113305dcb /firmware/usbstack/usb_core.c | |
parent | c4f2a46e0dfee336ce7016cd62608097f15367b8 (diff) | |
download | rockbox-21c5ffe09a6ea1e9b1a4bd13a047b0ad2845ee1b.tar.gz rockbox-21c5ffe09a6ea1e9b1a4bd13a047b0ad2845ee1b.zip |
usb_core: rework handling of clear feature
Change-Id: Icb1e973aa5fd8520eff0796aa8164e0a988d9107
Diffstat (limited to 'firmware/usbstack/usb_core.c')
-rw-r--r-- | firmware/usbstack/usb_core.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c index 406f2a71e4..cc41e8b892 100644 --- a/firmware/usbstack/usb_core.c +++ b/firmware/usbstack/usb_core.c | |||
@@ -687,6 +687,16 @@ static void usb_core_do_set_config(uint8_t config) | |||
687 | #endif | 687 | #endif |
688 | } | 688 | } |
689 | 689 | ||
690 | static void usb_core_do_clear_feature(int recip, int recip_nr, int feature) | ||
691 | { | ||
692 | logf("usb_core: CLEAR FEATURE (%d,%d,%d)", recip, recip_nr, feature); | ||
693 | if(recip == USB_RECIP_ENDPOINT) | ||
694 | { | ||
695 | if(feature == USB_ENDPOINT_HALT) | ||
696 | usb_drv_stall(EP_NUM(recip_nr), false, EP_DIR(recip_nr)); | ||
697 | } | ||
698 | } | ||
699 | |||
690 | static void request_handler_device(struct usb_ctrlrequest* req) | 700 | static void request_handler_device(struct usb_ctrlrequest* req) |
691 | { | 701 | { |
692 | switch(req->bRequest) { | 702 | switch(req->bRequest) { |
@@ -809,9 +819,9 @@ static void request_handler_endpoint_standard(struct usb_ctrlrequest* req) | |||
809 | { | 819 | { |
810 | switch (req->bRequest) { | 820 | switch (req->bRequest) { |
811 | case USB_REQ_CLEAR_FEATURE: | 821 | case USB_REQ_CLEAR_FEATURE: |
812 | if(req->wValue == USB_ENDPOINT_HALT) | 822 | usb_core_do_clear_feature(USB_RECIP_ENDPOINT, |
813 | usb_drv_stall(EP_NUM(req->wIndex), false, EP_DIR(req->wIndex)); | 823 | req->wIndex, |
814 | 824 | req->wValue); | |
815 | usb_drv_send(EP_CONTROL, NULL, 0); | 825 | usb_drv_send(EP_CONTROL, NULL, 0); |
816 | break; | 826 | break; |
817 | case USB_REQ_SET_FEATURE: | 827 | case USB_REQ_SET_FEATURE: |