usb: make the maximum number of interfaces and endpoints as configuration parameters
authorarighi <arighi@38d2e660-2303-0410-9eaa-f027e97ec537>
Mon, 7 Feb 2011 13:53:48 +0000 (13:53 +0000)
committerarighi <arighi@38d2e660-2303-0410-9eaa-f027e97ec537>
Mon, 7 Feb 2011 13:53:48 +0000 (13:53 +0000)
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
bertos/cpu/cortex-m3/drv/usb_stm32.c
bertos/drv/usb_endpoint.h

index e5a282b158fbac6b52e083113783e179688a57d1..d1c724c9f843365f8bdb210342b417b4a52de8d1 100644 (file)
  */
 #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 */
index 879b2d6f0a828bd5724fe8dd6839e9c6fbc2cf35..dd1e09dbaa56fba1f9a58846010ba295b425c299 100644 (file)
@@ -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)
index f393425b0574d982b170dc0803f4d9c635222bfc..e9ebc90c9caf65f585ec8c791b9ba078bba5e284 100644 (file)
 #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 */