Re-add in old Endpoint/Pipe workaround for unordered pipes - add new ORDERED_EP_CONFIG compile time option to override the workaround and use the previous behaviour that imposes correct Endpoint/Pipe ordering but produces smaller compiled code.

This commit is contained in:
Dean Camera 2010-12-24 17:05:41 +00:00
parent a57287a59f
commit ec537fd84d
9 changed files with 123 additions and 3 deletions

View file

@ -43,6 +43,7 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,
const uint8_t UECFG0XData,
const uint8_t UECFG1XData)
{
#if defined(CONTROL_ONLY_DEVICE) || defined(ORDERED_EP_CONFIG)
Endpoint_SelectEndpoint(Number);
Endpoint_EnableEndpoint();
@ -51,6 +52,51 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,
UECFG1X = UECFG1XData;
return Endpoint_IsConfigured();
#else
uint8_t UECFG0XTemp[ENDPOINT_TOTAL_ENDPOINTS];
uint8_t UECFG1XTemp[ENDPOINT_TOTAL_ENDPOINTS];
uint8_t UEIENXTemp[ENDPOINT_TOTAL_ENDPOINTS];
for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
{
Endpoint_SelectEndpoint(EPNum);
UECFG0XTemp[EPNum] = UECFG0X;
UECFG1XTemp[EPNum] = UECFG1X;
UEIENXTemp[EPNum] = UEIENX;
}
UECFG0XTemp[Number] = UECFG0XData;
UECFG1XTemp[Number] = UECFG1XData;
UEIENXTemp[Number] = 0;
for (uint8_t EPNum = 1; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
{
Endpoint_SelectEndpoint(EPNum);
UEIENX = 0;
UEINTX = 0;
UECFG1X = 0;
Endpoint_DisableEndpoint();
}
for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
{
if (!(UECFG1XTemp[EPNum] & (1 << ALLOC)))
continue;
Endpoint_SelectEndpoint(EPNum);
Endpoint_EnableEndpoint();
UECFG0X = UECFG0XTemp[EPNum];
UECFG1X = UECFG1XTemp[EPNum];
UEIENX = UEIENXTemp[EPNum];
if (!(Endpoint_IsConfigured()))
return false;
}
Endpoint_SelectEndpoint(Number);
return true;
#endif
}
void Endpoint_ClearEndpoints(void)