From 922d8f7079efd232c736e84df49214cec13fb9ea Mon Sep 17 00:00:00 2001 From: Felix Ruess Date: Mon, 29 Dec 2014 16:48:35 +0100 Subject: [PATCH] [usb] fix user_callback_set_config USB using control callbacks was broken since d6bad27735a77b8daa90ce72b843cf08ba78697d Properly check if user usb control callback are registered, while here make sure user_callback_set_config callback pointers are initialized to NULL. --- lib/usb/usb.c | 5 +++++ lib/usb/usb_standard.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/usb/usb.c b/lib/usb/usb.c index 78637363..8922b4c3 100644 --- a/lib/usb/usb.c +++ b/lib/usb/usb.c @@ -86,6 +86,11 @@ usbd_device *usbd_init(const usbd_driver *driver, usbd_dev->user_callback_ctr[0][USB_TRANSACTION_IN] = _usbd_control_in; + int i; + for (i = 0; i < MAX_USER_SET_CONFIG_CALLBACK; i++) { + usbd_dev->user_callback_set_config[i] = NULL; + } + return usbd_dev; } diff --git a/lib/usb/usb_standard.c b/lib/usb/usb_standard.c index bc4710ff..885f077b 100644 --- a/lib/usb/usb_standard.c +++ b/lib/usb/usb_standard.c @@ -256,7 +256,7 @@ static int usb_standard_set_configuration(usbd_device *usbd_dev, /* Reset all endpoints. */ usbd_dev->driver->ep_reset(usbd_dev); - if (usbd_dev->user_callback_set_config) { + if (usbd_dev->user_callback_set_config[0]) { /* * Flush control callbacks. These will be reregistered * by the user handler.