summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/usbstack/usb_core.c16
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
690static 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
690static void request_handler_device(struct usb_ctrlrequest* req) 700static 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: