aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-04-24 07:28:51 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-04-24 07:28:51 +0000
commita504a3a010ec2441dda0209f195492fb36e7c97b (patch)
tree878acffb3679796597b9e0bd94a322f2cb074819 /LUFA
parentc20a94a4e84c89debf5e7109482ede708a694a0c (diff)
downloadlufa-a504a3a010ec2441dda0209f195492fb36e7c97b.tar.gz
lufa-a504a3a010ec2441dda0209f195492fb36e7c97b.tar.bz2
lufa-a504a3a010ec2441dda0209f195492fb36e7c97b.zip
Endpoint configuration is now refined to give better output when all configurations have static inputs - removed the now useless STATIC_ENDPOINT_CONFIGURATION compile time token.
Diffstat (limited to 'LUFA')
-rw-r--r--LUFA/ChangeLog.txt4
-rw-r--r--LUFA/CompileTimeTokens.txt10
-rw-r--r--LUFA/Drivers/USB/Class/ConfigDescriptor.c2
-rw-r--r--LUFA/Drivers/USB/Class/ConfigDescriptor.h4
-rw-r--r--LUFA/Drivers/USB/LowLevel/Endpoint.c19
-rw-r--r--LUFA/Drivers/USB/LowLevel/Endpoint.h52
-rw-r--r--LUFA/MigrationInformation.txt1
7 files changed, 33 insertions, 59 deletions
diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt
index 1557db500..4b1c5dcef 100644
--- a/LUFA/ChangeLog.txt
+++ b/LUFA/ChangeLog.txt
@@ -60,7 +60,9 @@
* - The USB_UnhandledControlPacket event has had its parameters removed, in favour of accessing the new USB_ControlRequest structure
* - The Endpoint control stream functions now correctly send a ZLP to the host when less data than requested is sent
* - Fixed USB_RemoteWakeupEnabled flag never being set (the REMOTE WAKEUP Set Feature request was not being handled)
- * - Renamed the FEATURELESS_CONTROL_ONLY_DEVICE compile-time token to CONTROL_ONLY_DEVICE
+ * - Renamed the FEATURELESS_CONTROL_ONLY_DEVICE compile-time token to CONTROL_ONLY_DEVICE
+ * - Endpoint configuration is now refined to give better output when all configurations have static inputs - removed the now useless
+ * STATIC_ENDPOINT_CONFIGURATION compile time token
*
*
* \section Sec_ChangeLog090401 Version 090401
diff --git a/LUFA/CompileTimeTokens.txt b/LUFA/CompileTimeTokens.txt
index 090ace8ce..e3afc59bd 100644
--- a/LUFA/CompileTimeTokens.txt
+++ b/LUFA/CompileTimeTokens.txt
@@ -98,15 +98,7 @@
* Normally this reduces the amount of configuration required for the library, allows the value to change dynamically (if
* descriptors are stored in EEPROM or RAM rather than flash memory) and reduces code maintenance. However, this token can be
* defined to a non-zero value instead to give the size in bytes of the control endpoint, to reduce the size of the compiled
- * binary at the expense of flexibility.
- *
- * <b>STATIC_ENDPOINT_CONFIGURATION</b> - ( \ref Group_EndpointManagement ) \n
- * By default, the endpoint configuration routine is designed to accept dynamic inputs, so that the endpoints can be configured
- * using variable values known only at runtime. This allows for a great deal of flexibility, however uses a small amount of binary
- * space which may be wasted if all endpoint configurations are static and known at compile time. Define this token via the -D switch
- * to optimize the endpoint configuration routine for constant inputs, to reduce the size of the compiled binary at the expense of
- * flexibility. Note that with this option dynamic values may still be used, but will result in many times more code to be generated than
- * if the option was disabled. This is designed to be used only if the FIXED_CONTROL_ENDPOINT_SIZE option is also used.
+ * binary.
*
* <b>USE_SINGLE_DEVICE_CONFIGURATION</b> - ( \ref Group_Device ) \n
* By default, the library determines the number of configurations a USB device supports by reading the device descriptor. This reduces
diff --git a/LUFA/Drivers/USB/Class/ConfigDescriptor.c b/LUFA/Drivers/USB/Class/ConfigDescriptor.c
index 367b28ae3..78838305a 100644
--- a/LUFA/Drivers/USB/Class/ConfigDescriptor.c
+++ b/LUFA/Drivers/USB/Class/ConfigDescriptor.c
@@ -114,7 +114,7 @@ void USB_GetNextDescriptorOfTypeAfter(uint16_t* const BytesRem,
USB_GetNextDescriptorOfType(BytesRem, CurrConfigLoc, Type);
}
-uint8_t USB_GetNextDescriptorComp_P(uint16_t* BytesRem, uint8_t** CurrConfigLoc, ComparatorPtr_t ComparatorRoutine)
+uint8_t USB_GetNextDescriptorComp_Prv(uint16_t* BytesRem, uint8_t** CurrConfigLoc, ComparatorPtr_t ComparatorRoutine)
{
uint8_t ErrorCode;
diff --git a/LUFA/Drivers/USB/Class/ConfigDescriptor.h b/LUFA/Drivers/USB/Class/ConfigDescriptor.h
index da38492ff..dce7de79e 100644
--- a/LUFA/Drivers/USB/Class/ConfigDescriptor.h
+++ b/LUFA/Drivers/USB/Class/ConfigDescriptor.h
@@ -162,7 +162,7 @@
*/
uint8_t USB_GetNextDescriptorComp(uint16_t* BytesRem, uint8_t** CurrConfigLoc, ComparatorPtr_t ComparatorRoutine);
#else
- #define USB_GetNextDescriptorComp(DSize, DPos, DSearch) USB_GetNextDescriptorComp_P(DSize, DPos, DCOMP_##DSearch)
+ #define USB_GetNextDescriptorComp(DSize, DPos, DSearch) USB_GetNextDescriptorComp_Prv(DSize, DPos, DCOMP_##DSearch)
#endif
/* Enums: */
@@ -270,7 +270,7 @@
typedef uint8_t (* const ComparatorPtr_t)(void* const);
/* Function Prototypes: */
- uint8_t USB_GetNextDescriptorComp_P(uint16_t* BytesRem, uint8_t** CurrConfigLoc, ComparatorPtr_t ComparatorRoutine);
+ uint8_t USB_GetNextDescriptorComp_Prv(uint16_t* BytesRem, uint8_t** CurrConfigLoc, ComparatorPtr_t ComparatorRoutine);
#endif
/* Disable C linkage for C++ Compilers: */
diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.c b/LUFA/Drivers/USB/LowLevel/Endpoint.c
index da2925ec7..4615baa69 100644
--- a/LUFA/Drivers/USB/LowLevel/Endpoint.c
+++ b/LUFA/Drivers/USB/LowLevel/Endpoint.c
@@ -39,22 +39,12 @@
uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
#endif
-#if !defined(STATIC_ENDPOINT_CONFIGURATION)
-bool Endpoint_ConfigureEndpoint(const uint8_t Number, const uint8_t Type, const uint8_t Direction,
- const uint16_t Size, const uint8_t Banks)
+uint8_t Endpoint_BytesToEPSizeMaskDynamic(const uint16_t Size)
{
- Endpoint_SelectEndpoint(Number);
- Endpoint_EnableEndpoint();
-
- UECFG1X = 0;
-
- UECFG0X = ((Type << EPTYPE0) | Direction);
- UECFG1X = ((1 << ALLOC) | Banks | Endpoint_BytesToEPSizeMask(Size));
-
- return Endpoint_IsConfigured();
+ return Endpoint_BytesToEPSizeMask(Size);
}
-#else
-bool Endpoint_ConfigureEndpointStatic(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData)
+
+bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData)
{
Endpoint_SelectEndpoint(Number);
Endpoint_EnableEndpoint();
@@ -66,7 +56,6 @@ bool Endpoint_ConfigureEndpointStatic(const uint8_t Number, const uint8_t UECFG0
return Endpoint_IsConfigured();
}
-#endif
void Endpoint_ClearEndpoints(void)
{
diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.h b/LUFA/Drivers/USB/LowLevel/Endpoint.h
index 1e88e0658..4d5aa538e 100644
--- a/LUFA/Drivers/USB/LowLevel/Endpoint.h
+++ b/LUFA/Drivers/USB/LowLevel/Endpoint.h
@@ -734,11 +734,6 @@
*
* The success of this routine can be determined via the \ref Endpoint_IsConfigured() macro.
*
- * By default, the routine is entirely dynamic, and will accept both constant and variable inputs.
- * If dynamic configuration is unused, a small space savings can be made by defining the
- * STATIC_ENDPOINT_CONFIGURATION macro via the -D switch to the compiler, to optimize for constant
- * input values.
- *
* \note This routine will select the specified endpoint, and the endpoint will remain selected
* once the routine completes regardless of if the endpoint configuration succeeds.
*
@@ -1002,38 +997,33 @@
#define ENDPOINT_DETAILS_EP4 64, true
#endif
- #if defined(STATIC_ENDPOINT_CONFIGURATION)
- #define Endpoint_ConfigureEndpoint(Number, Type, Direction, Size, Banks) \
- Endpoint_ConfigureEndpointStatic(Number, \
- ((Type << EPTYPE0) | Direction), \
- ((1 << ALLOC) | Banks | Endpoint_BytesToEPSizeMask(Size)));
- #endif
-
+ #define Endpoint_ConfigureEndpoint(Number, Type, Direction, Size, Banks) \
+ Endpoint_ConfigureEndpoint_Prv(Number, \
+ ((Type << EPTYPE0) | Direction), \
+ ((1 << ALLOC) | Banks | \
+ (__builtin_constant_p(Size) ? \
+ Endpoint_BytesToEPSizeMask(Size) : \
+ Endpoint_BytesToEPSizeMaskDynamic(Size))))
+
/* Function Prototypes: */
- void Endpoint_ClearEndpoints(void);
- bool Endpoint_ConfigureEndpointStatic(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData);
+ void Endpoint_ClearEndpoints(void);
+ uint8_t Endpoint_BytesToEPSizeMaskDynamic(const uint16_t Size);
+ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData);
/* Inline Functions: */
static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE;
static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes)
{
- if (Bytes <= 8)
- return (0 << EPSIZE0);
- else if (Bytes <= 16)
- return (1 << EPSIZE0);
- else if (Bytes <= 32)
- return (2 << EPSIZE0);
- #if defined(USB_LIMITED_CONTROLLER)
- else
- return (3 << EPSIZE0);
- #else
- else if (Bytes <= 64)
- return (3 << EPSIZE0);
- else if (Bytes <= 128)
- return (4 << EPSIZE0);
- else
- return (5 << EPSIZE0);
- #endif
+ uint8_t MaskVal = 0;
+ uint16_t CheckBytes = 8;
+
+ while (CheckBytes < Bytes)
+ {
+ MaskVal++;
+ CheckBytes <<= 1;
+ }
+
+ return (MaskVal << EPSIZE0);
};
#endif
diff --git a/LUFA/MigrationInformation.txt b/LUFA/MigrationInformation.txt
index 9dbabb7e4..f3c3a6fa4 100644
--- a/LUFA/MigrationInformation.txt
+++ b/LUFA/MigrationInformation.txt
@@ -37,6 +37,7 @@
* the Control Request header as all Control Request header data is now preloaded by the library and made available in the
* USB_ControlRequest structure.
* - The FEATURELESS_CONTROL_ONLY_DEVICE token has been renamed to CONTROL_ONLY_DEVICE.
+ * - The STATIC_ENDPOINT_CONFIGURATION is no longer applicable as the library will apply this optimization when appropriate automatically.
*
* <b>Host Mode</b>
* - The USB_Host_SendControlRequest() function no longer automatically selects the Control pipe (pipe 0) to allow it to be used on