aboutsummaryrefslogtreecommitdiff
path: root/lib/usb
diff options
context:
space:
mode:
authorGareth McMullin2011-01-30 15:41:23 +1300
committerGareth McMullin2011-01-30 15:41:23 +1300
commitf87170e06ea157ade400dcb7412e022b04c1839c (patch)
tree66bcd3e172c4cb8701519df07d6c1a9464ddff02 /lib/usb
parent59293a9640cc1daf8ba7a04aece0de8c394521e8 (diff)
Clear user control request handlers on set_configuration request.
Diffstat (limited to 'lib/usb')
-rw-r--r--lib/usb/usb_standard.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/usb/usb_standard.c b/lib/usb/usb_standard.c
index efaea27..adfaa23 100644
--- a/lib/usb/usb_standard.c
+++ b/lib/usb/usb_standard.c
@@ -150,8 +150,15 @@ static int usb_standard_set_configuration(struct usb_setup_data *req,
/* Reset all endpoints. */
_usbd_hw_endpoints_reset();
- if (_usbd_device.user_callback_set_config)
+ if (_usbd_device.user_callback_set_config) {
+ /* Flush control callbacks. These will be reregistered
+ * by the user handler. */
+ int i;
+ for(i = 0; i < MAX_USER_CONTROL_CALLBACK; i++)
+ _usbd_device.user_control_callback[i].cb = NULL;
+
_usbd_device.user_callback_set_config(req->wValue);
+ }
return 1;
}