diff --git a/include/libopencm3/usb/usbd.h b/include/libopencm3/usb/usbd.h index fa9af67c..04452d9b 100644 --- a/include/libopencm3/usb/usbd.h +++ b/include/libopencm3/usb/usbd.h @@ -160,7 +160,12 @@ extern void usbd_register_set_altsetting_callback(usbd_device *usbd_dev, /* Functions to be provided by the hardware abstraction layer */ extern void usbd_poll(usbd_device *usbd_dev); -/** Disconnect, if supported by the driver */ +/** Disconnect, if supported by the driver + * + * This function is implemented as weak function and can be replaced by an + * application specific version to handle chips that don't have built-in + * handling for this (e.g. STM32F1.) + */ extern void usbd_disconnect(usbd_device *usbd_dev, bool disconnected); /** Setup an endpoint diff --git a/lib/usb/usb.c b/lib/usb/usb.c index cca6dde1..e2dd0c27 100644 --- a/lib/usb/usb.c +++ b/lib/usb/usb.c @@ -112,7 +112,8 @@ void usbd_poll(usbd_device *usbd_dev) usbd_dev->driver->poll(usbd_dev); } -void usbd_disconnect(usbd_device *usbd_dev, bool disconnected) +__attribute__((weak)) void usbd_disconnect(usbd_device *usbd_dev, + bool disconnected) { /* not all drivers support disconnection */ if (usbd_dev->driver->disconnect) {