X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/d0806c817cbf0c1b5c5362d1577eac6075c94dfc..a4ebf4e92061bf1eec9224e64bc823ca7bedada4:/LUFA/Drivers/USB/LowLevel/LowLevel.c diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.c b/LUFA/Drivers/USB/LowLevel/LowLevel.c index 8b395be98..b49c5b8ce 100644 --- a/LUFA/Drivers/USB/LowLevel/LowLevel.c +++ b/LUFA/Drivers/USB/LowLevel/LowLevel.c @@ -1,21 +1,21 @@ /* LUFA Library - Copyright (C) Dean Camera, 2009. + Copyright (C) Dean Camera, 2010. dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ /* - Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, and distribute this software - and its documentation for any purpose and without fee is hereby - granted, provided that the above copyright notice appear in all - copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -54,8 +54,6 @@ void USB_Init( #endif ) { - USB_ShutDown(); - #if defined(USB_CAN_BE_BOTH) USB_CurrentMode = Mode; #endif @@ -68,7 +66,7 @@ void USB_Init( USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE; #endif - #if defined(USB_DEVICE_ONLY) && defined(USB_FULL_CONTROLLER) + #if defined(USB_DEVICE_ONLY) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) UHWCON |= (1 << UIMOD); #elif defined(USB_HOST_ONLY) UHWCON &= ~(1 << UIMOD); @@ -99,7 +97,7 @@ void USB_Init( USB_ResetInterface(); - #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) USB_OTGPAD_On(); #endif @@ -110,62 +108,53 @@ void USB_Init( void USB_ShutDown(void) { - if (USB_IsConnected) - EVENT_USB_Disconnect(); - + USB_ResetInterface(); USB_Detach(); - - USB_INT_DisableAllInterrupts(); - USB_INT_ClearAllInterrupts(); - - USB_IsConnected = false; - USB_IsInitialized = false; - - #if defined(USB_CAN_BE_HOST) - USB_HostState = HOST_STATE_Unattached; - #endif - - #if defined(USB_CAN_BE_DEVICE) - USB_ConfigurationNumber = 0; - #endif - - #if defined(CAN_BE_BOTH) - USB_CurrentMode = USB_MODE_NONE; - #endif - - USB_Interface_Disable(); - USB_PLL_Off(); + USB_Controller_Disable(); + + if (!(USB_Options & USB_OPT_MANUAL_PLL)) + USB_PLL_Off(); - #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) USB_OTGPAD_Off(); #endif #if defined(USB_CAN_BE_BOTH) UHWCON &= ~(1 << UIDE); #endif + + USB_IsInitialized = false; + + #if defined(USB_CAN_BE_BOTH) + USB_CurrentMode = USB_MODE_NONE; + #endif } void USB_ResetInterface(void) { USB_INT_DisableAllInterrupts(); USB_INT_ClearAllInterrupts(); - - USB_IsConnected = false; - + #if defined(USB_CAN_BE_HOST) - USB_HostState = HOST_STATE_Unattached; + USB_HostState = HOST_STATE_Unattached; #endif - + #if defined(USB_CAN_BE_DEVICE) + USB_DeviceState = DEVICE_STATE_Unattached; USB_ConfigurationNumber = 0; - USB_IsSuspended = false; - USB_RemoteWakeupEnabled = false; - USB_CurrentlySelfPowered = false; + + #if !defined(NO_DEVICE_REMOTE_WAKEUP) + USB_RemoteWakeupEnabled = false; + #endif + + #if !defined(NO_DEVICE_SELF_POWER) + USB_CurrentlySelfPowered = false; + #endif #endif if (!(USB_Options & USB_OPT_MANUAL_PLL)) { - #if defined(USB_MODIFIED_FULL_CONTROLLER) + #if defined(USB_SERIES_4_AVR) PLLFRQ = ((1 << PLLUSB) | (1 << PDIV3) | (1 << PDIV1)); #endif @@ -173,7 +162,7 @@ void USB_ResetInterface(void) while (!(USB_PLL_IsReady())); } - USB_Interface_Reset(); + USB_Controller_Reset(); #if defined(USB_CAN_BE_BOTH) if (UHWCON & (1 << UIDE)) @@ -186,18 +175,18 @@ void USB_ResetInterface(void) if (!(USB_Options & USB_OPT_REG_DISABLED)) USB_REG_On(); + else + USB_REG_Off(); USB_CLK_Unfreeze(); - #if (defined(USB_CAN_BE_DEVICE) && (defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER))) + #if (defined(USB_CAN_BE_DEVICE) && (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))) if (USB_CurrentMode == USB_MODE_DEVICE) { if (USB_Options & USB_DEVICE_OPT_LOWSPEED) USB_Device_SetLowSpeed(); else - USB_Device_SetHighSpeed(); - - USB_INT_Enable(USB_INT_VBUS); + USB_Device_SetFullSpeed(); } #endif @@ -209,11 +198,11 @@ void USB_ResetInterface(void) if (CALLBACK_USB_GetDescriptor((DTYPE_Device << 8), 0, (void*)&DeviceDescriptorPtr) != NO_DESCRIPTOR) { #if defined(USE_RAM_DESCRIPTORS) - USB_ControlEndpointSize = DeviceDescriptorPtr->Endpoint0Size; + USB_ControlEndpointSize = DeviceDescriptorPtr->Endpoint0Size; #elif defined(USE_EEPROM_DESCRIPTORS) - USB_ControlEndpointSize = eeprom_read_byte(&DeviceDescriptorPtr->Endpoint0Size); + USB_ControlEndpointSize = eeprom_read_byte(&DeviceDescriptorPtr->Endpoint0Size); #else - USB_ControlEndpointSize = pgm_read_byte(&DeviceDescriptorPtr->Endpoint0Size); + USB_ControlEndpointSize = pgm_read_byte(&DeviceDescriptorPtr->Endpoint0Size); #endif } } @@ -221,14 +210,15 @@ void USB_ResetInterface(void) USB_Attach(); - #if defined(USB_DEVICE_ONLY) + #if defined(USB_DEVICE_ONLY) + USB_INT_Clear(USB_INT_SUSPEND); USB_INT_Enable(USB_INT_SUSPEND); + USB_INT_Clear(USB_INT_EORSTI); USB_INT_Enable(USB_INT_EORSTI); - #if defined(CONTROL_ONLY_DEVICE) - UENUM = ENDPOINT_CONTROLEP; - #endif - + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) + USB_INT_Enable(USB_INT_VBUS); + #endif #elif defined(USB_HOST_ONLY) USB_Host_HostMode_On(); @@ -243,9 +233,15 @@ void USB_ResetInterface(void) #else if (USB_CurrentMode == USB_MODE_DEVICE) { + USB_INT_Clear(USB_INT_SUSPEND); USB_INT_Enable(USB_INT_SUSPEND); + USB_INT_Clear(USB_INT_EORSTI); USB_INT_Enable(USB_INT_EORSTI); + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) + USB_INT_Enable(USB_INT_VBUS); + #endif + #if defined(CONTROL_ONLY_DEVICE) UENUM = ENDPOINT_CONTROLEP; #endif