Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/thirdpin/libopencm3.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2018-05-26 15:59:14 +0300
committerKarl Palsson <karlp@tweak.net.au>2018-08-27 18:11:32 +0300
commitebcf1978106322e92a7b1f53b58a33c6ff432cbd (patch)
tree50c852a29f862b24078ff182dfd09e01b46b639b
parent343cff467513759e1fdaa28deff0879350ad9c44 (diff)
usb: make usb_disconnect() weak
usb_disconnect() is board/platform specific for chips that don't have built-in handling for this. Allow the application to provide its own version of usb_disconnect() to handle this. See https://github.com/libopencm3/libopencm3/pull/924
-rw-r--r--include/libopencm3/usb/usbd.h7
-rw-r--r--lib/usb/usb.c3
2 files changed, 8 insertions, 2 deletions
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) {