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:
parent
a57287a59f
commit
ec537fd84d
9 changed files with 123 additions and 3 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue