usb: make the maximum number of interfaces and endpoints as configuration parameters
[bertos.git] / bertos / drv / usb_endpoint.h
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 */