From 448b0d5418ea97af845eb2d9cc3345e3ff7dd67b Mon Sep 17 00:00:00 2001 From: arighi Date: Mon, 7 Feb 2011 13:53:48 +0000 Subject: [PATCH] usb: make the maximum number of interfaces and endpoints as configuration parameters Allow to change the maximum number of supported interfaces and endpoints per device from the wizard. These options can be useful to create custom USB devices without changing internal BeRTOS components. If only the standard USB devices already supported by BeRTOS are used there's no need to change such options, and the default behaviour is to auto-detect these values and evaluate them at compile-time, according to the selected drivers. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4685 38d2e660-2303-0410-9eaa-f027e97ec537 --- bertos/cfg/cfg_usb.h | 14 ++++++++++++++ bertos/cpu/cortex-m3/drv/usb_stm32.c | 2 +- bertos/drv/usb_endpoint.h | 15 ++++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/bertos/cfg/cfg_usb.h b/bertos/cfg/cfg_usb.h index e5a282b1..d1c724c9 100644 --- a/bertos/cfg/cfg_usb.h +++ b/bertos/cfg/cfg_usb.h @@ -61,4 +61,18 @@ */ #define CONFIG_USB_BUFSIZE 64 +/** + * Maximum number of USB device interfaces (default = 1). + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_USB_INTERFACE_MAX 1 + +/** + * Maximum number of allocated endpoints (0 = auto). + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_USB_EP_MAX 0 + #endif /* CFG_USB_H */ diff --git a/bertos/cpu/cortex-m3/drv/usb_stm32.c b/bertos/cpu/cortex-m3/drv/usb_stm32.c index 879b2d6f..dd1e09db 100644 --- a/bertos/cpu/cortex-m3/drv/usb_stm32.c +++ b/bertos/cpu/cortex-m3/drv/usb_stm32.c @@ -117,7 +117,7 @@ static const UsbEndpointDesc USB_CtrlEpDescr1 = static UsbCtrlRequest setup_packet; /* USB device controller: max supported interfaces */ -#define USB_MAX_INTERFACE 1 +#define USB_MAX_INTERFACE CONFIG_USB_INTERFACE_MAX /* USB device controller features */ #define STM32_UDC_FEATURE_SELFPOWERED BV(0) diff --git a/bertos/drv/usb_endpoint.h b/bertos/drv/usb_endpoint.h index f393425b..e9ebc90c 100644 --- a/bertos/drv/usb_endpoint.h +++ b/bertos/drv/usb_endpoint.h @@ -42,10 +42,18 @@ #ifndef USB_ENDPOINT_H #define USB_ENDPOINT_H +#include "cfg/cfg_usb.h" #include "cfg/cfg_usbser.h" #include "cfg/cfg_usbkbd.h" #include "cfg/cfg_usbmouse.h" +/* + * NOTE: a USB inteface requires at least one endpoint. Moreover, there's the + * special endpoint 0. In conclusion, the number of endpoints must be always + * greater than the number of interfaces. + */ +STATIC_ASSERT(CONFIG_USB_EP_MAX > CONFIG_USB_INTERFACE_MAX); + /* Enpoint allocation (according to the compile-time options) */ enum { USB_CTRL_ENDPOINT = 0, /* This must be always allocated */ @@ -60,7 +68,12 @@ enum { #if (defined(CONFIG_USBMOUSE) && CONFIG_USBMOUSE) USB_MOUSE_EP_REPORT, #endif - USB_EP_MAX, /* Number of allocated endpoints */ + /* Number of allocated endpoints */ +#if (CONFIG_USB_EP_MAX == 0) + USB_EP_MAX, +#else + USB_EP_MAX = CONFIG_USB_EP_MAX, +#endif }; #endif /* USB_ENDPOINT_H */ -- 2.25.1