From dd0e48369d504bc0143b317f6b078333acaf4e1c Mon Sep 17 00:00:00 2001 From: Jan Date: Wed, 4 Feb 2015 17:23:34 +0100 Subject: [PATCH] stm32f1: fix h103 usbdfu example This has been broken since f87170e when set config started clearing control handlers to be re-registered by different configurations. Fix this example to use a set config callback to setup control transfer callbacks, just like CDC-ACM demos. With this fix, this demo works with dfu-tool 0.8 Signed-off-by: Karl Palsson --- examples/stm32/f1/stm32-h103/usb_dfu/usbdfu.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/examples/stm32/f1/stm32-h103/usb_dfu/usbdfu.c b/examples/stm32/f1/stm32-h103/usb_dfu/usbdfu.c index e3e0f32..39e5b07 100644 --- a/examples/stm32/f1/stm32-h103/usb_dfu/usbdfu.c +++ b/examples/stm32/f1/stm32-h103/usb_dfu/usbdfu.c @@ -229,6 +229,17 @@ static int usbdfu_control_request(usbd_device *usbd_dev, struct usb_setup_data * return 0; } +static void usbdfu_set_config(usbd_device *usbd_dev, uint16_t wValue) +{ + (void)wValue; + + usbd_register_control_callback( + usbd_dev, + USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE, + USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, + usbdfu_control_request); +} + int main(void) { usbd_device *usbd_dev; @@ -257,11 +268,7 @@ int main(void) gpio_set(GPIOC, GPIO11); usbd_dev = usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings, 4, usbd_control_buffer, sizeof(usbd_control_buffer)); - usbd_register_control_callback( - usbd_dev, - USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE, - USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, - usbdfu_control_request); + usbd_register_set_config_callback(usbd_dev, usbdfu_set_config); gpio_clear(GPIOC, GPIO11);