diff --git a/include/libopencm3/usb/usbd.h b/include/libopencm3/usb/usbd.h index e81714fc..337ed00e 100644 --- a/include/libopencm3/usb/usbd.h +++ b/include/libopencm3/usb/usbd.h @@ -57,18 +57,12 @@ extern const usbd_driver stm32f207_usb_driver; #define otgfs_usb_driver stm32f107_usb_driver #define otghs_usb_driver stm32f207_usb_driver -/* Static buffer for control transactions: - * This is defined as weak in the library, applicaiton - * may provide if a larger buffer is requred. */ -extern u8 usbd_control_buffer[]; - /* */ extern usbd_device *usbd_init(const usbd_driver *driver, const struct usb_device_descriptor *dev, const struct usb_config_descriptor *conf, - const char **strings, int num_strings); - -extern void usbd_set_control_buffer_size(usbd_device *usbd_dev, u16 size); + const char **strings, int num_strings, + u8 *control_buffer, u16 control_buffer_size); extern void usbd_register_reset_callback(usbd_device *usbd_dev, void (*callback)(void)); diff --git a/lib/usb/usb.c b/lib/usb/usb.c index 6aa83917..c1b62f60 100644 --- a/lib/usb/usb.c +++ b/lib/usb/usb.c @@ -38,8 +38,6 @@ LGPL License Terms @ref lgpl_license #include #include "usb_private.h" -u8 usbd_control_buffer[128] __attribute__((weak)); - /** * Main initialization entry point. * @@ -56,12 +54,17 @@ u8 usbd_control_buffer[128] __attribute__((weak)); * array is determined by the bNumConfigurations field in the * device descriptor. * @param strings TODO + * @param control_buffer Pointer to array that would hold the data + * received during control requests with DATA + * stage + * @param control_buffer_size Size of control_buffer * @return Zero on success (currently cannot fail). */ usbd_device *usbd_init(const usbd_driver *driver, const struct usb_device_descriptor *dev, const struct usb_config_descriptor *conf, - const char **strings, int num_strings) + const char **strings, int num_strings, + u8 *control_buffer, u16 control_buffer_size) { usbd_device *usbd_dev; @@ -72,8 +75,8 @@ usbd_device *usbd_init(const usbd_driver *driver, usbd_dev->config = conf; usbd_dev->strings = strings; usbd_dev->num_strings = num_strings; - usbd_dev->ctrl_buf = usbd_control_buffer; - usbd_dev->ctrl_buf_len = sizeof(usbd_control_buffer); + usbd_dev->ctrl_buf = control_buffer; + usbd_dev->ctrl_buf_len = control_buffer_size; usbd_dev->user_callback_ctr[0][USB_TRANSACTION_SETUP] = _usbd_control_setup; @@ -107,11 +110,6 @@ void usbd_register_sof_callback(usbd_device *usbd_dev, void (*callback)(void)) usbd_dev->user_callback_sof = callback; } -void usbd_set_control_buffer_size(usbd_device *usbd_dev, u16 size) -{ - usbd_dev->ctrl_buf_len = size; -} - void _usbd_reset(usbd_device *usbd_dev) { usbd_dev->current_address = 0;