@ -29,9 +29,8 @@
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					*/ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					/** \file
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   \ brief  USB  device  mode  definitions  ( AVR8 ) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 * 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   This  file  contains  structures ,  function  prototypes  and  macros  related  to  USB  device  mode . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   \ brief  USB  Device  definitions  for  the  AVR8  microcontrollers . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   \ copydetails  Group_Device_AVR8 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 * 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   \ note  This  file  should  not  be  included  directly .  It  is  automatically  included  as  needed  by  the  USB  driver 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *         dispatch  header  located  in  LUFA / Drivers / USB / USB . h . 
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -39,9 +38,9 @@
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					/** \ingroup Group_Device
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   \ defgroup  Group_Device_AVR8  Device  Management  ( AVR8 ) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   \ brief  USB  Device  definitions  for  the  AVR8  microcontrollers . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 * 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   USB  Device  mode  related  macros  and  enums .  This  module  contains  macros  and  enums  which  are  used  when 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   the  USB  controller  is  initialized  in  device  mode . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   Architecture  specific  USB  Device  definitions  for  the  Atmel  8 - bit  AVR  microcontrollers . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 * 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 *   @ { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 */ 
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -55,17 +54,15 @@
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# include  "../USBInterrupt.h" 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# include  "../Endpoint.h" 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# include  <avr/boot.h> 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						/* Preprocessor Checks: */ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS)) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								# error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive. 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# endif 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# if !defined(__INCLUDE_FROM_USB_DRIVER) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								# error Do not include this file directly. Include LUFA / Drivers / USB / USB.h instead. 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# endif 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS)) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								# error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive. 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							# endif 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						/* Public Interface - May be used in end-application: */ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							/* Macros: */ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								/** \name USB Device Mode Option Masks */ 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -125,7 +122,7 @@
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *         the  \ ref  USB_OPT_MANUAL_PLL  option  enabled ,  the  user  must  ensure  that  the  PLL  is  running 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *         before  attempting  to  call  this  function . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 * 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   \ see  \ ref  Group_ Descriptors for  more  information  on  the  RMWAKEUP  feature  and  device  descriptors . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   \ see  \ ref  Group_ Std Descriptors for  more  information  on  the  RMWAKEUP  feature  and  device  descriptors . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 */ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								void  USB_Device_SendRemoteWakeup ( void ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -192,40 +189,6 @@
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								# endif 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							/* Function Prototypes: */ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								/** Function to retrieve a given descriptor's size and memory location from the given descriptor type value,
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   index  and  language  ID .  This  function  MUST  be  overridden  in  the  user  application  ( added  with  full ,  identical 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   prototype  and  name  so  that  the  library  can  call  it  to  retrieve  descriptor  data . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 * 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   \ param [ in ]  wValue                The  type  of  the  descriptor  to  retrieve  in  the  upper  byte ,  and  the  index  in  the 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *                                   lower  byte  ( when  more  than  one  descriptor  of  the  given  type  exists ,  such  as  the 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *                                   case  of  string  descriptors ) .  The  type  may  be  one  of  the  standard  types  defined 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *                                   in  the  DescriptorTypes_t  enum ,  or  may  be  a  class - specific  descriptor  type  value . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   \ param [ in ]  wIndex                The  language  ID  of  the  string  to  return  if  the  \ c  wValue  type  indicates 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *                                   \ ref  DTYPE_String ,  otherwise  zero  for  standard  descriptors ,  or  as  defined  in  a 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *                                   class - specific  standards . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   \ param [ out ]  DescriptorAddress    Pointer  to  the  descriptor  in  memory .  This  should  be  set  by  the  routine  to 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *                                   the  address  of  the  descriptor . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   \ param [ out ]  MemoryAddressSpace   A  value  from  the  \ ref  USB_DescriptorMemorySpaces_t  enum  to  indicate  the  memory 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *                                   space  in  which  the  descriptor  is  stored .  This  parameter  does  not  exist  when  one 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *                                   of  the  \ c  USE_ * _DESCRIPTORS  compile  time  options  is  used . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 * 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   \ note  By  default ,  the  library  expects  all  descriptors  to  be  located  in  flash  memory  via  the  \ c  PROGMEM  attribute . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *         If  descriptors  should  be  located  in  RAM  or  EEPROM  instead  ( to  speed  up  access  in  the  case  of  RAM ,  or  to 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *         allow  the  descriptors  to  be  changed  dynamically  at  runtime )  either  the  \ c  USE_RAM_DESCRIPTORS  or  the 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *         \ c  USE_EEPROM_DESCRIPTORS  tokens  may  be  defined  in  the  project  makefile  and  passed  to  the  compiler  by  the  - D 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *         switch . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 * 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *   \ return  Size  in  bytes  of  the  descriptor  if  it  exists ,  zero  or  \ ref  NO_DESCRIPTOR  otherwise . 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 */ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								uint16_t  CALLBACK_USB_GetDescriptor ( const  uint16_t  wValue , 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								                                    const  uint8_t  wIndex , 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								                                    const  void * *  const  DescriptorAddress 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								# if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								                                    ,  uint8_t *  MemoryAddressSpace 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								# endif 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								                                    )  ATTR_WARN_UNUSED_RESULT  ATTR_NON_NULL_PTR_ARG ( 3 ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						/* Private Interface - For use in library only: */ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						# if !defined(__DOXYGEN__) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							/* Inline Functions: */