summaryrefslogtreecommitdiff
path: root/firmware/usbstack
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/usbstack')
-rw-r--r--firmware/usbstack/usb_core.c23
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}