Make device mode configure the control endpoint even before the bus has been reset, so that the device will enumerate correctly on hosts that do not reset the device before initial use.

This commit is contained in:
Dean Camera 2010-09-19 06:30:14 +00:00
parent b17e87d140
commit d66a925786
1 changed files with 14 additions and 12 deletions

View File

@ -60,6 +60,11 @@ void USB_Init(
USB_Options = Options;
#endif
if (!(USB_Options & USB_OPT_REG_DISABLED))
USB_REG_On();
else
USB_REG_Off();
#if defined(USB_CAN_BE_BOTH)
if (Mode == USB_MODE_UID)
{
@ -112,11 +117,6 @@ void USB_ResetInterface(void)
USB_INT_ClearAllInterrupts();
USB_Controller_Reset();
if (!(USB_Options & USB_OPT_REG_DISABLED))
USB_REG_On();
else
USB_REG_Off();
if (!(USB_Options & USB_OPT_MANUAL_PLL))
{
@ -126,9 +126,7 @@ void USB_ResetInterface(void)
USB_PLL_On();
while (!(USB_PLL_IsReady()));
}
USB_CLK_Unfreeze();
}
#if defined(USB_CAN_BE_BOTH)
if (UIDModeSelectEnabled)
@ -137,6 +135,8 @@ void USB_ResetInterface(void)
USB_INT_Enable(USB_INT_IDTI);
}
#endif
USB_CLK_Unfreeze();
if (USB_CurrentMode == USB_MODE_DEVICE)
{
@ -159,8 +159,6 @@ void USB_ResetInterface(void)
#if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
USB_OTGPAD_On();
#endif
USB_Attach();
}
#if defined(USB_CAN_BE_DEVICE)
@ -201,10 +199,14 @@ static void USB_Init_Device(void)
USB_INT_Enable(USB_INT_VBUS);
#endif
USB_INT_Clear(USB_INT_SUSPEND);
Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,
ENDPOINT_DIR_OUT, USB_ControlEndpointSize,
ENDPOINT_BANK_SINGLE);
USB_INT_Enable(USB_INT_SUSPEND);
USB_INT_Clear(USB_INT_EORSTI);
USB_INT_Enable(USB_INT_EORSTI);
USB_Attach();
}
#endif