From 9da4b55529e3c9cb34be47ee23391c1dfd4dec5a Mon Sep 17 00:00:00 2001 From: root Date: Wed, 10 Mar 2021 10:17:23 +0000 Subject: update libopencm3 to fix bugs in usb implementation --- boot/usbdfu.c | 30 ++++++++++++++---------------- boot/usbdfu.ld | 2 +- 2 files changed, 15 insertions(+), 17 deletions(-) (limited to 'boot') diff --git a/boot/usbdfu.c b/boot/usbdfu.c index 9287f57..e547e4b 100644 --- a/boot/usbdfu.c +++ b/boot/usbdfu.c @@ -151,7 +151,7 @@ static uint8_t usbdfu_getstatus (usbd_device *usbd_dev, uint32_t *bwPollTimeout) } } -static int usbdfu_getstatus_complete (usbd_device *usbd_dev, struct usb_setup_data *req) +static void usbdfu_getstatus_complete (usbd_device *usbd_dev, struct usb_setup_data *req) { int i; (void)req; @@ -189,40 +189,38 @@ static int usbdfu_getstatus_complete (usbd_device *usbd_dev, struct usb_setup_da /* Jump straight to dfuDNLOAD-IDLE, skipping dfuDNLOAD-SYNC. */ usbdfu_state = STATE_DFU_DNLOAD_IDLE; - return 0; + return; case STATE_DFU_MANIFEST: /* USB device must detach, we just reset... */ scb_reset_system(); - return 0; /* Will never return. */ + return; /* Will never return. */ default: ; } - return 0; } -static int usbdfu_control_request (usbd_device *usbd_dev, struct usb_setup_data *req, uint8_t **buf, +static enum usbd_request_return_codes usbdfu_control_request (usbd_device *usbd_dev, struct usb_setup_data *req, uint8_t **buf, uint16_t *len, usbd_control_complete_callback *complete) { if ((req->bmRequestType & 0x7F) != 0x21) - return 0; /* Only accept class request. */ + return USBD_REQ_NEXT_CALLBACK; switch (req->bRequest) { case DFU_DNLOAD: if ((len == NULL) || (*len == 0)) { usbdfu_state = STATE_DFU_MANIFEST_SYNC; - return 1; } else { /* Copy download data for use on GET_STATUS. */ prog.blocknum = req->wValue; prog.len = *len; memcpy (prog.buf, *buf, *len); usbdfu_state = STATE_DFU_DNLOAD_SYNC; - return 1; } + return USBD_REQ_HANDLED; case DFU_CLRSTATUS: @@ -230,16 +228,16 @@ static int usbdfu_control_request (usbd_device *usbd_dev, struct usb_setup_data if (usbdfu_state == STATE_DFU_ERROR) usbdfu_state = STATE_DFU_IDLE; - return 1; + return USBD_REQ_HANDLED; case DFU_ABORT: /* Abort returns to dfuIDLE state. */ usbdfu_state = STATE_DFU_IDLE; - return 1; + return USBD_REQ_HANDLED; case DFU_UPLOAD: /* Upload not supported for now. */ - return 0; + return USBD_REQ_NOTSUPP; case DFU_GETSTATUS: { uint32_t bwPollTimeout = 0; /* 24-bit integer in DFU class spec */ @@ -251,17 +249,17 @@ static int usbdfu_control_request (usbd_device *usbd_dev, struct usb_setup_data (*buf)[5] = 0; /* iString not used here */ *len = 6; *complete = usbdfu_getstatus_complete; - return 1; + return USBD_REQ_HANDLED; } case DFU_GETSTATE: /* Return state with no state transision. */ *buf[0] = usbdfu_state; *len = 1; - return 1; + return USBD_REQ_HANDLED; } - return 0; + return USBD_REQ_NEXT_CALLBACK; } static void usb_reset (void) @@ -316,7 +314,7 @@ int main (void) dfu_flag = 0; - rcc_clock_setup_in_hsi_out_48mhz(); + rcc_clock_setup_pll(&rcc_hsi_configs[RCC_CLOCK_HSI_48MHZ]); rcc_periph_clock_enable (RCC_GPIOC); @@ -325,7 +323,7 @@ int main (void) gpio_set (GPIOC, GPIO11); - usbd_dev = usbd_init (&stm32f103_usb_driver, &dev, &config, usb_strings, N_USB_STRINGS, usbd_control_buffer, sizeof (usbd_control_buffer)); + usbd_dev = usbd_init (&st_usbfs_v1_usb_driver, &dev, &config, usb_strings, N_USB_STRINGS, usbd_control_buffer, sizeof (usbd_control_buffer)); usbd_register_set_config_callback (usbd_dev, usb_set_config); diff --git a/boot/usbdfu.ld b/boot/usbdfu.ld index 8680dc9..498bcea 100644 --- a/boot/usbdfu.ld +++ b/boot/usbdfu.ld @@ -27,7 +27,7 @@ MEMORY } /* Include the common ld script. */ -INCLUDE libopencm3_stm32f1.ld +INCLUDE cortex-m-generic.ld dfu_shared_location = ORIGIN(ram) + LENGTH(ram) - 1024; -- cgit v1.2.3