diff options
Diffstat (limited to 'firmware/usbstack')
-rw-r--r-- | firmware/usbstack/usb_core.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c index 883d3d6dfb..96a5994417 100644 --- a/firmware/usbstack/usb_core.c +++ b/firmware/usbstack/usb_core.c | |||
@@ -647,16 +647,28 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req) | |||
647 | break; | 647 | break; |
648 | } /* USB_REQ_GET_DESCRIPTOR */ | 648 | } /* USB_REQ_GET_DESCRIPTOR */ |
649 | 649 | ||
650 | default: | 650 | default: { |
651 | bool handled=false; | ||
652 | if((req->bRequestType & 0x1f) == 1) /* Interface */ | ||
653 | { | ||
651 | #ifdef USB_STORAGE | 654 | #ifdef USB_STORAGE |
652 | /* does usb_storage know this request? */ | 655 | /* does usb_storage know this request? */ |
653 | if (!usb_storage_control_request(req)) | 656 | if(req->wIndex == mass_storage_interface_descriptor.bInterfaceNumber) |
657 | { | ||
658 | handled = usb_storage_control_request(req); | ||
659 | } | ||
654 | #endif | 660 | #endif |
655 | 661 | ||
656 | #ifdef USB_SERIAL | 662 | #ifdef USB_SERIAL |
657 | /* does usb_serial know this request? */ | 663 | /* does usb_serial know this request? */ |
658 | if (!usb_serial_control_request(req)) | 664 | if(req->wIndex == serial_interface_descriptor.bInterfaceNumber) |
665 | { | ||
666 | handled = usb_serial_control_request(req); | ||
667 | } | ||
668 | |||
659 | #endif | 669 | #endif |
670 | } | ||
671 | if(!handled) | ||
660 | { | 672 | { |
661 | /* nope. flag error */ | 673 | /* nope. flag error */ |
662 | logf("usb bad req %d", req->bRequest); | 674 | logf("usb bad req %d", req->bRequest); |
@@ -664,6 +676,7 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req) | |||
664 | ack_control(req); | 676 | ack_control(req); |
665 | } | 677 | } |
666 | break; | 678 | break; |
679 | } | ||
667 | } | 680 | } |
668 | logf("control handled"); | 681 | logf("control handled"); |
669 | } | 682 | } |