aboutsummaryrefslogtreecommitdiffstats
path: root/boot/usbdfu.c
diff options
context:
space:
mode:
authorroot <root@ka-ata-killa.ourano.james.local>2021-03-10 10:17:23 +0000
committerroot <root@ka-ata-killa.ourano.james.local>2021-03-10 10:17:23 +0000
commit9da4b55529e3c9cb34be47ee23391c1dfd4dec5a (patch)
tree4e36c7ec587c12d79ceffcd769f1993e35f9c383 /boot/usbdfu.c
parent49148e76706e5e24c2ba7f6ccc1d7ec4736ab2f3 (diff)
downloadserial_over_dp-9da4b55529e3c9cb34be47ee23391c1dfd4dec5a.tar.gz
serial_over_dp-9da4b55529e3c9cb34be47ee23391c1dfd4dec5a.tar.bz2
serial_over_dp-9da4b55529e3c9cb34be47ee23391c1dfd4dec5a.zip
update libopencm3 to fix bugs in usb implementation
Diffstat (limited to 'boot/usbdfu.c')
-rw-r--r--boot/usbdfu.c30
1 files changed, 14 insertions, 16 deletions
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);