parent
							
								
									4bc7e909f9
								
							
						
					
					
						commit
						c1a1b6eeec
					
				@ -0,0 +1 @@
 | 
				
			||||
<AVRStudio><MANAGEMENT><ProjectName>BootloaderCDC</ProjectName><Created>30-Sep-2008 14:20:09</Created><LastEdit>30-Sep-2008 14:20:30</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:20:09</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>BootloaderCDC.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Bootloaders\CDC\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>BootloaderCDC.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>BootloaderCDC.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>BootloaderCDC.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Bootloaders\CDC\BootloaderCDC.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Bootloaders\CDC\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Bootloaders\CDC\BootloaderCDC.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Bootloaders\CDC\Descriptors.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
 | 
				
			||||
@ -0,0 +1,570 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Main source file for the CDC class bootloader. This file contains the complete bootloader logic.
 | 
				
			||||
 */
 | 
				
			||||
 
 | 
				
			||||
#define  INCLUDE_FROM_BOOTLOADERCDC_C
 | 
				
			||||
#include "BootloaderCDC.h"
 | 
				
			||||
 | 
				
			||||
/* Globals: */
 | 
				
			||||
/** Line coding options for the virtual serial port. Although the virtual serial port data is never
 | 
				
			||||
 *  sent through a physical serial port, the line encoding data must still be read and preserved from
 | 
				
			||||
 *  the host, or the host will detect a problem and fail to open the port. This structure contains the
 | 
				
			||||
 *  current encoding options, including baud rate, character format, parity mode and total number of 
 | 
				
			||||
 *  bits in each data chunk.
 | 
				
			||||
 */
 | 
				
			||||
CDC_Line_Coding_t LineCoding = { BaudRateBPS: 9600,
 | 
				
			||||
                                 CharFormat:  OneStopBit,
 | 
				
			||||
                                 ParityType:  Parity_None,
 | 
				
			||||
                                 DataBits:    8            };
 | 
				
			||||
 | 
				
			||||
/** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host,
 | 
				
			||||
 *  and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued
 | 
				
			||||
 *  command.)
 | 
				
			||||
 */
 | 
				
			||||
uint16_t CurrAddress;
 | 
				
			||||
 | 
				
			||||
/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
 | 
				
			||||
 *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
 | 
				
			||||
 *  jumped to via an indirect jump to location 0x0000.
 | 
				
			||||
 */
 | 
				
			||||
bool RunBootloader = true;
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously 
 | 
				
			||||
 *  runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start
 | 
				
			||||
 *  the loaded application code.
 | 
				
			||||
 */
 | 
				
			||||
int main(void)
 | 
				
			||||
{
 | 
				
			||||
	/* Disable watchdog if enabled by bootloader/fuses */
 | 
				
			||||
	MCUSR &= ~(1 << WDRF);
 | 
				
			||||
	wdt_disable();
 | 
				
			||||
 | 
				
			||||
	/* Disable Clock Division */
 | 
				
			||||
	SetSystemClockPrescaler(0);
 | 
				
			||||
	
 | 
				
			||||
	/* Relocate the interrupt vector table to the bootloader section */
 | 
				
			||||
	MCUCR = (1 << IVCE);
 | 
				
			||||
	MCUCR = (1 << IVSEL);
 | 
				
			||||
	
 | 
				
			||||
	/* Initialize USB Subsystem */
 | 
				
			||||
	USB_Init();
 | 
				
			||||
 | 
				
			||||
	while (RunBootloader)
 | 
				
			||||
	{
 | 
				
			||||
		USB_USBTask();
 | 
				
			||||
		CDC_Task();
 | 
				
			||||
	}
 | 
				
			||||
	
 | 
				
			||||
	Endpoint_SelectEndpoint(CDC_TX_EPNUM);
 | 
				
			||||
 | 
				
			||||
	/* Wait until any pending transmissions have completed before shutting down */
 | 
				
			||||
	while (!(Endpoint_ReadWriteAllowed()));
 | 
				
			||||
	
 | 
				
			||||
	/* Shut down the USB subsystem */
 | 
				
			||||
	USB_ShutDown();
 | 
				
			||||
	
 | 
				
			||||
	/* Relocate the interrupt vector table back to the application section */
 | 
				
			||||
	MCUCR = (1 << IVCE);
 | 
				
			||||
	MCUCR = 0;
 | 
				
			||||
 | 
				
			||||
	/* Reset any used hardware ports back to their defaults */
 | 
				
			||||
	PORTD = 0;
 | 
				
			||||
	DDRD  = 0;
 | 
				
			||||
	
 | 
				
			||||
	#if defined(PORTE)
 | 
				
			||||
	PORTE = 0;
 | 
				
			||||
	DDRE  = 0;
 | 
				
			||||
	#endif
 | 
				
			||||
	
 | 
				
			||||
	/* Re-enable RWW section */
 | 
				
			||||
	boot_rww_enable();
 | 
				
			||||
 | 
				
			||||
	/* Start the user application */
 | 
				
			||||
	AppPtr_t AppStartPtr = (AppPtr_t)0x0000;
 | 
				
			||||
	AppStartPtr();	
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Event handler for the USB_Disconnect event. This indicates that the bootloader should exit and the user
 | 
				
			||||
 *  application started.
 | 
				
			||||
 */
 | 
				
			||||
EVENT_HANDLER(USB_Disconnect)
 | 
				
			||||
{
 | 
				
			||||
	/* Upon disconnection, run user application */
 | 
				
			||||
	RunBootloader = false;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready
 | 
				
			||||
 *  to relay data to and from the attached USB host.
 | 
				
			||||
 */
 | 
				
			||||
EVENT_HANDLER(USB_ConfigurationChanged)
 | 
				
			||||
{
 | 
				
			||||
	/* Setup CDC Notification, Rx and Tx Endpoints */
 | 
				
			||||
	Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,
 | 
				
			||||
		                       ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,
 | 
				
			||||
	                           ENDPOINT_BANK_SINGLE);
 | 
				
			||||
 | 
				
			||||
	Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,
 | 
				
			||||
		                       ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,
 | 
				
			||||
	                           ENDPOINT_BANK_SINGLE);
 | 
				
			||||
 | 
				
			||||
	Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,
 | 
				
			||||
		                       ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,
 | 
				
			||||
	                           ENDPOINT_BANK_SINGLE);
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific
 | 
				
			||||
 *  control requests that are not handled internally by the USB library, so that they can be handled appropriately
 | 
				
			||||
 *  for the application.
 | 
				
			||||
 */
 | 
				
			||||
EVENT_HANDLER(USB_UnhandledControlPacket)
 | 
				
			||||
{
 | 
				
			||||
	uint8_t* LineCodingData = (uint8_t*)&LineCoding;
 | 
				
			||||
 | 
				
			||||
	Endpoint_Discard_Word();
 | 
				
			||||
 | 
				
			||||
	/* Process CDC specific control requests */
 | 
				
			||||
	switch (bRequest)
 | 
				
			||||
	{
 | 
				
			||||
		case REQ_GetLineEncoding:
 | 
				
			||||
			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
 | 
				
			||||
			{
 | 
				
			||||
				Endpoint_ClearSetupReceived();
 | 
				
			||||
 | 
				
			||||
				for (uint8_t i = 0; i < sizeof(LineCoding); i++)
 | 
				
			||||
				  Endpoint_Write_Byte(*(LineCodingData++));	
 | 
				
			||||
				
 | 
				
			||||
				Endpoint_ClearSetupIN();
 | 
				
			||||
				
 | 
				
			||||
				while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
				Endpoint_ClearSetupOUT();
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			break;
 | 
				
			||||
		case REQ_SetLineEncoding:
 | 
				
			||||
			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
 | 
				
			||||
			{
 | 
				
			||||
				Endpoint_ClearSetupReceived();
 | 
				
			||||
 | 
				
			||||
				while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
 | 
				
			||||
				for (uint8_t i = 0; i < sizeof(LineCoding); i++)
 | 
				
			||||
				  *(LineCodingData++) = Endpoint_Read_Byte();
 | 
				
			||||
 | 
				
			||||
				Endpoint_ClearSetupOUT();
 | 
				
			||||
 | 
				
			||||
				while (!(Endpoint_IsSetupINReady()));
 | 
				
			||||
				Endpoint_ClearSetupIN();
 | 
				
			||||
			}
 | 
				
			||||
	
 | 
				
			||||
			break;
 | 
				
			||||
		case REQ_SetControlLineState:
 | 
				
			||||
			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
 | 
				
			||||
			{
 | 
				
			||||
				Endpoint_ClearSetupReceived();
 | 
				
			||||
				
 | 
				
			||||
				while (!(Endpoint_IsSetupINReady()));
 | 
				
			||||
				Endpoint_ClearSetupIN();
 | 
				
			||||
			}
 | 
				
			||||
	
 | 
				
			||||
			break;
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Reads or writes a block of EEPROM or FLASH memory to or from the appropriate CDC data endpoint, depending
 | 
				
			||||
 *  on the AVR910 protocol command issued.
 | 
				
			||||
 *
 | 
				
			||||
 *  \param Command  Single character AVR910 protocol command indicating what memory operation to perform
 | 
				
			||||
 */
 | 
				
			||||
static void ProgramReadWriteMemoryBlock(const uint8_t Command)
 | 
				
			||||
{
 | 
				
			||||
	uint16_t BlockSize;
 | 
				
			||||
	char     MemoryType;
 | 
				
			||||
	
 | 
				
			||||
	bool     HighByte = false;
 | 
				
			||||
	uint8_t  LowByte  = 0;
 | 
				
			||||
	
 | 
				
			||||
	BlockSize  = (FetchNextCommandByte() << 8);
 | 
				
			||||
	BlockSize |=  FetchNextCommandByte();
 | 
				
			||||
	
 | 
				
			||||
	MemoryType =  FetchNextCommandByte();
 | 
				
			||||
 | 
				
			||||
	if ((MemoryType == 'E') || (MemoryType == 'F'))
 | 
				
			||||
	{
 | 
				
			||||
		/* Check if command is to read memory */
 | 
				
			||||
		if (Command == 'g')
 | 
				
			||||
		{
 | 
				
			||||
			/* Re-enable RWW section */
 | 
				
			||||
			boot_rww_enable();
 | 
				
			||||
 | 
				
			||||
			while (BlockSize--)
 | 
				
			||||
			{
 | 
				
			||||
				if (MemoryType == 'E')
 | 
				
			||||
				{
 | 
				
			||||
					/* Read the next EEPROM byte into the endpoint */
 | 
				
			||||
					WriteNextResponseByte(eeprom_read_byte((uint8_t*)CurrAddress));
 | 
				
			||||
 | 
				
			||||
					/* Increment the address counter after use */
 | 
				
			||||
					CurrAddress++;
 | 
				
			||||
				}
 | 
				
			||||
				else
 | 
				
			||||
				{
 | 
				
			||||
					/* Read the next FLASH byte from the current FLASH page */
 | 
				
			||||
					#if defined(RAMPZ)
 | 
				
			||||
					WriteNextResponseByte(pgm_read_byte_far(((uint32_t)CurrAddress << 1) + HighByte));
 | 
				
			||||
					#else
 | 
				
			||||
					WriteNextResponseByte(pgm_read_byte((CurrAddress << 1) + HighByte));					
 | 
				
			||||
					#endif
 | 
				
			||||
					
 | 
				
			||||
					/* If both bytes in current word have been read, increment the address counter */
 | 
				
			||||
					if (HighByte)
 | 
				
			||||
					  CurrAddress++;
 | 
				
			||||
					
 | 
				
			||||
					HighByte ^= 1;
 | 
				
			||||
				}
 | 
				
			||||
			}
 | 
				
			||||
		}
 | 
				
			||||
		else
 | 
				
			||||
		{
 | 
				
			||||
			uint32_t PageStartAddress = ((uint32_t)CurrAddress << 1);
 | 
				
			||||
	
 | 
				
			||||
			if (MemoryType == 'F')
 | 
				
			||||
			{
 | 
				
			||||
				boot_page_erase(PageStartAddress);
 | 
				
			||||
				boot_spm_busy_wait();
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			while (BlockSize--)
 | 
				
			||||
			{
 | 
				
			||||
				if (MemoryType == 'E')
 | 
				
			||||
				{
 | 
				
			||||
					/* Write the next EEPROM byte from the endpoint */
 | 
				
			||||
					eeprom_write_byte((uint8_t*)CurrAddress, FetchNextCommandByte());					
 | 
				
			||||
 | 
				
			||||
					/* Increment the address counter after use */
 | 
				
			||||
					CurrAddress++;
 | 
				
			||||
				}
 | 
				
			||||
				else
 | 
				
			||||
				{	
 | 
				
			||||
					/* If both bytes in current word have been written, increment the address counter */
 | 
				
			||||
					if (HighByte)
 | 
				
			||||
					{
 | 
				
			||||
						/* Write the next FLASH word to the current FLASH page */
 | 
				
			||||
						boot_page_fill(((uint32_t)CurrAddress << 1), ((FetchNextCommandByte() << 8) | LowByte));
 | 
				
			||||
 | 
				
			||||
						HighByte = false;
 | 
				
			||||
						
 | 
				
			||||
						/* Increment the address counter after use */
 | 
				
			||||
						CurrAddress++;
 | 
				
			||||
					}
 | 
				
			||||
					else
 | 
				
			||||
					{
 | 
				
			||||
						LowByte = FetchNextCommandByte();
 | 
				
			||||
					
 | 
				
			||||
						HighByte = true;
 | 
				
			||||
					}
 | 
				
			||||
				}
 | 
				
			||||
			}
 | 
				
			||||
 | 
				
			||||
			/* If in FLASH programming mode, commit the page after writing */
 | 
				
			||||
			if (MemoryType == 'F')
 | 
				
			||||
			{
 | 
				
			||||
				/* Commit the flash page to memory */
 | 
				
			||||
				boot_page_write(PageStartAddress);
 | 
				
			||||
				
 | 
				
			||||
				/* Wait until write operation has completed */
 | 
				
			||||
				boot_spm_busy_wait();
 | 
				
			||||
			}
 | 
				
			||||
		
 | 
				
			||||
			/* Send response byte back to the host */
 | 
				
			||||
			WriteNextResponseByte('\r');		
 | 
				
			||||
		}
 | 
				
			||||
	}
 | 
				
			||||
	else
 | 
				
			||||
	{
 | 
				
			||||
		/* Send error byte back to the host */
 | 
				
			||||
		WriteNextResponseByte('?');
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Retrieves the next byte from the host in the CDC data OUT endpoint, and clears the endpoint bank if needed
 | 
				
			||||
 *  to allow reception of the next data packet from the host.
 | 
				
			||||
 *
 | 
				
			||||
 *  \return Next received byte from the host in the CDC data OUT endpoint
 | 
				
			||||
 */
 | 
				
			||||
static uint8_t FetchNextCommandByte(void)
 | 
				
			||||
{
 | 
				
			||||
	/* Select the OUT endpoint so that the next data byte can be read */
 | 
				
			||||
	Endpoint_SelectEndpoint(CDC_RX_EPNUM);
 | 
				
			||||
	
 | 
				
			||||
	/* If OUT endpoint empty, clear it and wait for the next packet from the host */
 | 
				
			||||
	if (!(Endpoint_ReadWriteAllowed()))
 | 
				
			||||
	{
 | 
				
			||||
		Endpoint_ClearCurrentBank();
 | 
				
			||||
		while (!(Endpoint_ReadWriteAllowed()));
 | 
				
			||||
	}
 | 
				
			||||
	
 | 
				
			||||
	/* Fetch the next byte from the OUT endpoint */
 | 
				
			||||
	return Endpoint_Read_Byte();
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Writes the next response byte to the CDC data IN endpoint, and sends the endpoint back if needed to free up the
 | 
				
			||||
 *  bank when full ready for the next byte in the packet to the host.
 | 
				
			||||
 *
 | 
				
			||||
 *  \param Response  Next response byte to send to the host
 | 
				
			||||
 */
 | 
				
			||||
static void WriteNextResponseByte(const uint8_t Response)
 | 
				
			||||
{
 | 
				
			||||
	/* Select the IN endpoint so that the next data byte can be written */
 | 
				
			||||
	Endpoint_SelectEndpoint(CDC_TX_EPNUM);
 | 
				
			||||
	
 | 
				
			||||
	/* If OUT endpoint empty, clear it and wait for the next packet from the host */
 | 
				
			||||
	if (!(Endpoint_ReadWriteAllowed()))
 | 
				
			||||
	{
 | 
				
			||||
		Endpoint_ClearCurrentBank();
 | 
				
			||||
		while (!(Endpoint_ReadWriteAllowed()));
 | 
				
			||||
	}
 | 
				
			||||
	
 | 
				
			||||
	/* Write the next byte to the OUT endpoint */
 | 
				
			||||
	Endpoint_Write_Byte(Response);
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Task to read in AVR910 commands from the CDC data OUT endpoint, process them, perform the required actions
 | 
				
			||||
 *  and send the appropriate response back to the host.
 | 
				
			||||
 */
 | 
				
			||||
TASK(CDC_Task)
 | 
				
			||||
{
 | 
				
			||||
	/* Select the OUT endpoint */
 | 
				
			||||
	Endpoint_SelectEndpoint(CDC_RX_EPNUM);
 | 
				
			||||
	
 | 
				
			||||
	/* Check if endpoint has a command in it sent from the host */
 | 
				
			||||
	if (Endpoint_ReadWriteAllowed())
 | 
				
			||||
	{
 | 
				
			||||
		/* Read in the bootloader command (first byte sent from host) */
 | 
				
			||||
		uint8_t Command = FetchNextCommandByte();
 | 
				
			||||
 | 
				
			||||
		if ((Command == 'L') || (Command == 'P') || (Command == 'T') || (Command == 'E'))
 | 
				
			||||
		{
 | 
				
			||||
			if (Command == 'E')
 | 
				
			||||
			  RunBootloader = false;
 | 
				
			||||
			if (Command == 'T')
 | 
				
			||||
			  FetchNextCommandByte();
 | 
				
			||||
 | 
				
			||||
			/* Send confirmation byte back to the host */
 | 
				
			||||
			WriteNextResponseByte('\r');			
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 't')
 | 
				
			||||
		{
 | 
				
			||||
			/* Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader */
 | 
				
			||||
			WriteNextResponseByte(0x44);
 | 
				
			||||
 | 
				
			||||
			WriteNextResponseByte(0x00);
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'a')
 | 
				
			||||
		{
 | 
				
			||||
			/* Indicate auto-address increment is supported */
 | 
				
			||||
			WriteNextResponseByte('Y');
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'A')
 | 
				
			||||
		{
 | 
				
			||||
			/* Set the current address to that given by the host */
 | 
				
			||||
			CurrAddress  = (FetchNextCommandByte() << 8);
 | 
				
			||||
			CurrAddress |=  FetchNextCommandByte();
 | 
				
			||||
 | 
				
			||||
			/* Send confirmation byte back to the host */
 | 
				
			||||
			WriteNextResponseByte('\r');
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'p')
 | 
				
			||||
		{
 | 
				
			||||
			/* Indicate serial programmer back to the host */
 | 
				
			||||
			WriteNextResponseByte('S');		 
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'S')
 | 
				
			||||
		{
 | 
				
			||||
			/* Write the 7-byte software identifier to the endpoint */
 | 
				
			||||
			for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++)
 | 
				
			||||
			  WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]);		
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'V')
 | 
				
			||||
		{
 | 
				
			||||
			WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR);
 | 
				
			||||
			WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR);
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 's')
 | 
				
			||||
		{
 | 
				
			||||
			WriteNextResponseByte(boot_signature_byte_get(4));
 | 
				
			||||
			WriteNextResponseByte(boot_signature_byte_get(2));
 | 
				
			||||
			WriteNextResponseByte(boot_signature_byte_get(0));		
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'b')
 | 
				
			||||
		{
 | 
				
			||||
			WriteNextResponseByte('Y');
 | 
				
			||||
				
 | 
				
			||||
			/* Send block size to the host */
 | 
				
			||||
			WriteNextResponseByte(SPM_PAGESIZE >> 8);
 | 
				
			||||
			WriteNextResponseByte(SPM_PAGESIZE & 0xFF);		
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'e')
 | 
				
			||||
		{
 | 
				
			||||
			/* Clear the application section of flash */
 | 
				
			||||
			for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < BOOT_START_ADDR; CurrFlashAddress++)
 | 
				
			||||
			{
 | 
				
			||||
				boot_page_erase(CurrFlashAddress);
 | 
				
			||||
				boot_spm_busy_wait();
 | 
				
			||||
				boot_page_write(CurrFlashAddress);
 | 
				
			||||
				boot_spm_busy_wait();
 | 
				
			||||
 | 
				
			||||
				CurrFlashAddress += SPM_PAGESIZE;
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			/* Send confirmation byte back to the host */
 | 
				
			||||
			WriteNextResponseByte('\r');		
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'l')
 | 
				
			||||
		{
 | 
				
			||||
			/* Set the lock bits to those given by the host */
 | 
				
			||||
			boot_lock_bits_set(FetchNextCommandByte());
 | 
				
			||||
 | 
				
			||||
			/* Send confirmation byte back to the host */
 | 
				
			||||
			WriteNextResponseByte('\r');
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'r')
 | 
				
			||||
		{
 | 
				
			||||
			WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS));		
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'F')
 | 
				
			||||
		{
 | 
				
			||||
			WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS));
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'N')
 | 
				
			||||
		{
 | 
				
			||||
			WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS));		
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'Q')
 | 
				
			||||
		{
 | 
				
			||||
			WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS));		
 | 
				
			||||
		}
 | 
				
			||||
		else if ((Command == 'C') || (Command == 'c'))
 | 
				
			||||
		{
 | 
				
			||||
			if (Command == 'c')
 | 
				
			||||
			{
 | 
				
			||||
				/* Increment the address if the second byte is being written */
 | 
				
			||||
				CurrAddress++;
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			/* Write the high byte to the current flash page */
 | 
				
			||||
			boot_page_fill(((uint32_t)CurrAddress << 1), FetchNextCommandByte());
 | 
				
			||||
			
 | 
				
			||||
			/* Send confirmation byte back to the host */
 | 
				
			||||
			WriteNextResponseByte('\r');		
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'm')
 | 
				
			||||
		{
 | 
				
			||||
			/* Commit the flash page to memory */
 | 
				
			||||
			boot_page_write((uint32_t)CurrAddress << 1);
 | 
				
			||||
			
 | 
				
			||||
			/* Wait until write operation has completed */
 | 
				
			||||
			boot_spm_busy_wait();
 | 
				
			||||
 | 
				
			||||
			/* Send confirmation byte back to the host */
 | 
				
			||||
			WriteNextResponseByte('\r');		
 | 
				
			||||
		}
 | 
				
			||||
		else if ((Command == 'B') || (Command == 'g'))
 | 
				
			||||
		{
 | 
				
			||||
			/* Delegate the block write/read to a seperate function for clarity */
 | 
				
			||||
			ProgramReadWriteMemoryBlock(Command);
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'R')
 | 
				
			||||
		{
 | 
				
			||||
			#if defined(RAMPZ)
 | 
				
			||||
			uint16_t ProgramWord = pgm_read_word_far(((uint32_t)CurrAddress << 1));
 | 
				
			||||
			#else
 | 
				
			||||
			uint16_t ProgramWord = pgm_read_word(CurrAddress << 1);			
 | 
				
			||||
			#endif
 | 
				
			||||
			
 | 
				
			||||
			WriteNextResponseByte(ProgramWord >> 8);
 | 
				
			||||
			WriteNextResponseByte(ProgramWord & 0xFF);
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'D')
 | 
				
			||||
		{
 | 
				
			||||
			/* Read the byte from the endpoint and write it to the EEPROM */
 | 
				
			||||
			eeprom_write_byte((uint8_t*)CurrAddress, FetchNextCommandByte());
 | 
				
			||||
			
 | 
				
			||||
			/* Increment the address after use */			
 | 
				
			||||
			CurrAddress++;
 | 
				
			||||
	
 | 
				
			||||
			/* Send confirmation byte back to the host */
 | 
				
			||||
			WriteNextResponseByte('\r');		
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 'd')
 | 
				
			||||
		{
 | 
				
			||||
			/* Read the EEPROM byte and write it to the endpoint */
 | 
				
			||||
			WriteNextResponseByte(eeprom_read_byte((uint8_t*)CurrAddress));
 | 
				
			||||
 | 
				
			||||
			/* Increment the address after use */
 | 
				
			||||
			CurrAddress++;
 | 
				
			||||
		}
 | 
				
			||||
		else if (Command == 27)
 | 
				
			||||
		{
 | 
				
			||||
			/* Escape is sync, ignore */
 | 
				
			||||
		}
 | 
				
			||||
		else
 | 
				
			||||
		{
 | 
				
			||||
			/* Unknown command, return fail code */
 | 
				
			||||
			WriteNextResponseByte('?');
 | 
				
			||||
		}
 | 
				
			||||
 | 
				
			||||
		/* Select the IN endpoint */
 | 
				
			||||
		Endpoint_SelectEndpoint(CDC_TX_EPNUM);
 | 
				
			||||
 | 
				
			||||
		/* Remember if the endpoint is completely full before clearing it */
 | 
				
			||||
		bool IsEndpointFull = !(Endpoint_ReadWriteAllowed());
 | 
				
			||||
 | 
				
			||||
		/* Send the endpoint data to the host */
 | 
				
			||||
		Endpoint_ClearCurrentBank();
 | 
				
			||||
		
 | 
				
			||||
		/* If a full endpoint's worth of data was sent, we need to send an empty packet afterwards to signal end of transfer */
 | 
				
			||||
		if (IsEndpointFull)
 | 
				
			||||
		{
 | 
				
			||||
			while (!(Endpoint_ReadWriteAllowed()));
 | 
				
			||||
			Endpoint_ClearCurrentBank();
 | 
				
			||||
		}
 | 
				
			||||
		
 | 
				
			||||
		/* Select the OUT endpoint */
 | 
				
			||||
		Endpoint_SelectEndpoint(CDC_RX_EPNUM);
 | 
				
			||||
 | 
				
			||||
		/* Acknowledge the command from the host */
 | 
				
			||||
		Endpoint_ClearCurrentBank();
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,135 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Header file for BootloaderCDC.c.
 | 
				
			||||
 */
 | 
				
			||||
 
 | 
				
			||||
#ifndef _CDC_H_
 | 
				
			||||
#define _CDC_H_
 | 
				
			||||
 | 
				
			||||
	/* Includes: */
 | 
				
			||||
		#include <avr/io.h>
 | 
				
			||||
		#include <avr/wdt.h>
 | 
				
			||||
		#include <avr/boot.h>
 | 
				
			||||
		#include <avr/eeprom.h>
 | 
				
			||||
		#include <stdbool.h>
 | 
				
			||||
 | 
				
			||||
		#include "Descriptors.h"
 | 
				
			||||
 | 
				
			||||
		#include <LUFA/Drivers/USB/USB.h>                // USB Functionality
 | 
				
			||||
 | 
				
			||||
	/* Macros: */
 | 
				
			||||
		/** CDC Class Specific request to get the line encoding on a CDC-ACM virtual serial port, including the
 | 
				
			||||
		 *  baud rate, parity, stop bits and data bits.
 | 
				
			||||
		 */
 | 
				
			||||
		#define REQ_GetLineEncoding          0x21
 | 
				
			||||
 | 
				
			||||
		/** CDC Class Specific request to set the line encoding on a CDC-ACM virtual serial port, including the
 | 
				
			||||
		 *  baud rate, parity, stop bits and data bits.
 | 
				
			||||
		 */
 | 
				
			||||
		#define REQ_SetLineEncoding          0x20
 | 
				
			||||
 | 
				
			||||
		/** CDC Class Specific request to set the state of the serial handshake lines (such as DCD and RTS) on
 | 
				
			||||
		 *  a CDC-ACM virtual serial port.
 | 
				
			||||
		 */
 | 
				
			||||
		#define REQ_SetControlLineState      0x22
 | 
				
			||||
		
 | 
				
			||||
		/** Version major of the CDC bootloader. */
 | 
				
			||||
		#define BOOTLOADER_VERSION_MAJOR     0x01
 | 
				
			||||
 | 
				
			||||
		/** Version minor of the CDC bootloader. */
 | 
				
			||||
		#define BOOTLOADER_VERSION_MINOR     0x00
 | 
				
			||||
				
 | 
				
			||||
		/** Hardware version major of the CDC bootloader. */
 | 
				
			||||
		#define BOOTLOADER_HWVERSION_MAJOR   0x01
 | 
				
			||||
 | 
				
			||||
		/** Hardware version minor of the CDC bootloader. */
 | 
				
			||||
		#define BOOTLOADER_HWVERSION_MINOR   0x00
 | 
				
			||||
 | 
				
			||||
		/** Eight character bootloader firmware identifier reported to the host when requested */
 | 
				
			||||
		#define SOFTWARE_IDENTIFIER          "LUFA-CDC"
 | 
				
			||||
 | 
				
			||||
	/* Event Handlers: */
 | 
				
			||||
		/** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */
 | 
				
			||||
		HANDLES_EVENT(USB_Disconnect);
 | 
				
			||||
 | 
				
			||||
		/** Indicates that this module will catch the USB_ConfigurationChanged event when thrown by the library. */
 | 
				
			||||
		HANDLES_EVENT(USB_ConfigurationChanged);
 | 
				
			||||
 | 
				
			||||
		/** Indicates that this module will catch the USB_UnhandledControlPacket event when thrown by the library. */
 | 
				
			||||
		HANDLES_EVENT(USB_UnhandledControlPacket);
 | 
				
			||||
		
 | 
				
			||||
	/* Type Defines: */
 | 
				
			||||
		/** Type define for a non-returning pointer to the start of the loaded application in flash memory. */
 | 
				
			||||
		typedef void (*AppPtr_t)(void) ATTR_NO_RETURN;
 | 
				
			||||
 | 
				
			||||
		/** Type define for the CDC-ACM virtual serial port line encoding options, including baud rate, format, parity
 | 
				
			||||
		 *  and size of each data chunk in bits.
 | 
				
			||||
		 */
 | 
				
			||||
		typedef struct
 | 
				
			||||
		{
 | 
				
			||||
			uint32_t BaudRateBPS; /**< Baud rate in BPS */
 | 
				
			||||
			uint8_t  CharFormat; /**< Character format, an entry from the BootloaderCDC_CDC_LineCodingFormats_t enum */
 | 
				
			||||
			uint8_t  ParityType; /**< Parity mode, an entry from the BootloaderCDC_CDC_LineCodeingParity_t enum */
 | 
				
			||||
			uint8_t  DataBits; /**< Size of each data chunk, in bits */
 | 
				
			||||
		} CDC_Line_Coding_t;
 | 
				
			||||
		
 | 
				
			||||
	/* Enums: */
 | 
				
			||||
		/** Enum for the possible line encoding formats on a CDC-ACM virtual serial port */
 | 
				
			||||
		enum BootloaderCDC_CDC_LineCodingFormats_t
 | 
				
			||||
		{
 | 
				
			||||
			OneStopBit          = 0, /**< Single stop bit */
 | 
				
			||||
			OneAndAHalfStopBits = 1, /**< 1.5 stop bits */
 | 
				
			||||
			TwoStopBits         = 2, /**< Two stop bits */
 | 
				
			||||
		};
 | 
				
			||||
		
 | 
				
			||||
		/** Enum for the possible parity modes on a CDC-ACM virtual serial port */
 | 
				
			||||
		enum BootloaderCDC_CDC_LineCodeingParity_t
 | 
				
			||||
		{
 | 
				
			||||
			Parity_None         = 0, /**< No data parity checking */
 | 
				
			||||
			Parity_Odd          = 1, /**< Odd data parity checking */
 | 
				
			||||
			Parity_Even         = 2, /**< Even data parity checking */
 | 
				
			||||
			Parity_Mark         = 3, /**< Mark data parity checking */
 | 
				
			||||
			Parity_Space        = 4, /**< Space data parity checking */
 | 
				
			||||
		};
 | 
				
			||||
		
 | 
				
			||||
	/* Tasks: */
 | 
				
			||||
		TASK(CDC_Task);
 | 
				
			||||
 | 
				
			||||
	/* Function Prototypes: */
 | 
				
			||||
		#if defined(INCLUDE_FROM_BOOTLOADERCDC_C) || defined(__DOXYGEN__)
 | 
				
			||||
			static void ProgramReadWriteMemoryBlock(const uint8_t Command);
 | 
				
			||||
			static uint8_t FetchNextCommandByte(void);
 | 
				
			||||
			static void WriteNextResponseByte(const uint8_t Response);
 | 
				
			||||
		#endif
 | 
				
			||||
 | 
				
			||||
#endif
 | 
				
			||||
@ -0,0 +1,40 @@
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
				
			||||
 *  documentation pages. It is not a project source file.
 | 
				
			||||
 */
 | 
				
			||||
 
 | 
				
			||||
/** \mainpage CDC Class USB AVR Bootloader
 | 
				
			||||
 * 
 | 
				
			||||
 * This bootloader enumerates to the host as a CDC Class device (virtual serial port), allowing for AVR109
 | 
				
			||||
 * protocol compatible programming software to load firmware onto the AVR.	
 | 
				
			||||
 *  
 | 
				
			||||
 * Out of the box this bootloader builds for the USB1287, and will fit into 4KB of bootloader space. If
 | 
				
			||||
 * you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU
 | 
				
			||||
 * values in the accompanying makefile.
 | 
				
			||||
 *  
 | 
				
			||||
 * This bootloader is compatible with the open source application AVRDUDE, or Atmel's AVRPROG.
 | 
				
			||||
 *
 | 
				
			||||
 * <table>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>USB Mode:</b></td>
 | 
				
			||||
 *   <td>Device</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>USB Class:</b></td>
 | 
				
			||||
 *   <td>Communications Device Class (CDC)</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr> 
 | 
				
			||||
 *   <td><b>USB Subclass:</b></td>
 | 
				
			||||
 *   <td>Abstract Control Model (ACM)</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>Relevant Standards:</b></td>
 | 
				
			||||
 *   <td>USBIF CDC Class Standard</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>Usable Speeds:</b></td>
 | 
				
			||||
 *   <td>Full Speed Mode</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 * </table>
 | 
				
			||||
 */
 | 
				
			||||
@ -0,0 +1,247 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
				
			||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
				
			||||
 *  the device's capabilities and functions.  
 | 
				
			||||
 */
 | 
				
			||||
 | 
				
			||||
#include "Descriptors.h"
 | 
				
			||||
 | 
				
			||||
/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall
 | 
				
			||||
 *  device characteristics, including the supported USB version, control endpoint size and the
 | 
				
			||||
 *  number of device configurations. The descriptor is read out by the USB host when the enumeration
 | 
				
			||||
 *  process begins.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_Device_t DeviceDescriptor =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: sizeof(USB_Descriptor_Device_t), Type: DTYPE_Device},
 | 
				
			||||
		
 | 
				
			||||
	USBSpecification:       VERSION_BCD(01.10),
 | 
				
			||||
	Class:                  0x02,
 | 
				
			||||
	SubClass:               0x00,
 | 
				
			||||
	Protocol:               0x00,
 | 
				
			||||
				
 | 
				
			||||
	Endpoint0Size:          FIXED_CONTROL_ENDPOINT_SIZE,
 | 
				
			||||
		
 | 
				
			||||
	VendorID:               0x03EB,
 | 
				
			||||
	ProductID:              0x204A,
 | 
				
			||||
	ReleaseNumber:          0x0000,
 | 
				
			||||
		
 | 
				
			||||
	ManufacturerStrIndex:   NO_DESCRIPTOR,
 | 
				
			||||
	ProductStrIndex:        0x01,
 | 
				
			||||
	SerialNumStrIndex:      NO_DESCRIPTOR,
 | 
				
			||||
		
 | 
				
			||||
	NumberOfConfigurations: 1
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage
 | 
				
			||||
 *  of the device in one of its supported configurations, including information about any device interfaces
 | 
				
			||||
 *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
 | 
				
			||||
 *  a configuration so that the host may correctly communicate with the USB device.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_Configuration_t ConfigurationDescriptor =
 | 
				
			||||
{
 | 
				
			||||
	Config:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Configuration_Header_t), Type: DTYPE_Configuration},
 | 
				
			||||
 | 
				
			||||
			TotalConfigurationSize: sizeof(USB_Descriptor_Configuration_t),
 | 
				
			||||
			TotalInterfaces:        2,
 | 
				
			||||
				
 | 
				
			||||
			ConfigurationNumber:    1,
 | 
				
			||||
			ConfigurationStrIndex:  NO_DESCRIPTOR,
 | 
				
			||||
				
 | 
				
			||||
			ConfigAttributes:       (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
				
			||||
			
 | 
				
			||||
			MaxPowerConsumption:    USB_CONFIG_POWER_MA(100)
 | 
				
			||||
		},
 | 
				
			||||
		
 | 
				
			||||
	CCI_Interface:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Interface_t), Type: DTYPE_Interface},
 | 
				
			||||
 | 
				
			||||
			InterfaceNumber:        0,
 | 
				
			||||
			AlternateSetting:       0,
 | 
				
			||||
			
 | 
				
			||||
			TotalEndpoints:         1,
 | 
				
			||||
				
 | 
				
			||||
			Class:                  0x02,
 | 
				
			||||
			SubClass:               0x02,
 | 
				
			||||
			Protocol:               0x01,
 | 
				
			||||
				
 | 
				
			||||
			InterfaceStrIndex:      NO_DESCRIPTOR
 | 
				
			||||
		},
 | 
				
			||||
 | 
				
			||||
	CDC_Functional_IntHeader:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), Type: 0x24},
 | 
				
			||||
			SubType:                0x00,
 | 
				
			||||
			
 | 
				
			||||
			Data:                   {0x10, 0x01}
 | 
				
			||||
		},
 | 
				
			||||
 | 
				
			||||
	CDC_Functional_CallManagement:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), Type: 0x24},
 | 
				
			||||
			SubType:                0x01,
 | 
				
			||||
			
 | 
				
			||||
			Data:                   {0x03, 0x01}
 | 
				
			||||
		},
 | 
				
			||||
 | 
				
			||||
	CDC_Functional_AbstractControlManagement:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), Type: 0x24},
 | 
				
			||||
			SubType:                0x02,
 | 
				
			||||
			
 | 
				
			||||
			Data:                   {0x06}
 | 
				
			||||
		},
 | 
				
			||||
		
 | 
				
			||||
	CDC_Functional_Union:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), Type: 0x24},
 | 
				
			||||
			SubType:                0x06,
 | 
				
			||||
			
 | 
				
			||||
			Data:                   {0x00, 0x01}
 | 
				
			||||
		},	
 | 
				
			||||
 | 
				
			||||
	ManagementEndpoint:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},
 | 
				
			||||
										 
 | 
				
			||||
			EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),
 | 
				
			||||
			Attributes:       		EP_TYPE_INTERRUPT,
 | 
				
			||||
			EndpointSize:           CDC_NOTIFICATION_EPSIZE,
 | 
				
			||||
			PollingIntervalMS:		0x02
 | 
				
			||||
		},
 | 
				
			||||
 | 
				
			||||
	DCI_Interface:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Interface_t), Type: DTYPE_Interface},
 | 
				
			||||
 | 
				
			||||
			InterfaceNumber:        1,
 | 
				
			||||
			AlternateSetting:       0,
 | 
				
			||||
			
 | 
				
			||||
			TotalEndpoints:         2,
 | 
				
			||||
				
 | 
				
			||||
			Class:                  0x0A,
 | 
				
			||||
			SubClass:               0x00,
 | 
				
			||||
			Protocol:               0x00,
 | 
				
			||||
				
 | 
				
			||||
			InterfaceStrIndex:      NO_DESCRIPTOR
 | 
				
			||||
		},
 | 
				
			||||
 | 
				
			||||
	DataOutEndpoint:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},
 | 
				
			||||
										 
 | 
				
			||||
			EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),
 | 
				
			||||
			Attributes:       		EP_TYPE_BULK,
 | 
				
			||||
			EndpointSize:           CDC_TXRX_EPSIZE,
 | 
				
			||||
			PollingIntervalMS:		0x00
 | 
				
			||||
		},
 | 
				
			||||
		
 | 
				
			||||
	DataInEndpoint:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},
 | 
				
			||||
										 
 | 
				
			||||
			EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),
 | 
				
			||||
			Attributes:       		EP_TYPE_BULK,
 | 
				
			||||
			EndpointSize:           CDC_TXRX_EPSIZE,
 | 
				
			||||
			PollingIntervalMS:		0x00
 | 
				
			||||
		}
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Language descriptor structure. This descriptor, located in SRAM memory, is returned when the host requests
 | 
				
			||||
 *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
 | 
				
			||||
 *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_String_t LanguageString =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: USB_STRING_LEN(1), Type: DTYPE_String},
 | 
				
			||||
		
 | 
				
			||||
	UnicodeString:          {LANGUAGE_ID_ENG}
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
 | 
				
			||||
 *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
 | 
				
			||||
 *  Descriptor.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_String_t ProductString =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: USB_STRING_LEN(15), Type: DTYPE_String},
 | 
				
			||||
		
 | 
				
			||||
	UnicodeString:          L"AVR CDC Bootloader"
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** This function is called by the library when in device mode, and must be overridden (see StdDescriptors.h
 | 
				
			||||
 *  documentation) by the application code so that the address and size of a requested descriptor can be given
 | 
				
			||||
 *  to the USB library. When the device recieves a Get Descriptor request on the control endpoint, this function
 | 
				
			||||
 *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
 | 
				
			||||
 *  USB host.
 | 
				
			||||
 */
 | 
				
			||||
uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
				
			||||
{
 | 
				
			||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
				
			||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
				
			||||
 | 
				
			||||
	void*    Address = NULL;
 | 
				
			||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
				
			||||
 | 
				
			||||
	switch (DescriptorType)
 | 
				
			||||
	{
 | 
				
			||||
		case DTYPE_Device:
 | 
				
			||||
			Address = DESCRIPTOR_ADDRESS(DeviceDescriptor);
 | 
				
			||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
				
			||||
			break;
 | 
				
			||||
		case DTYPE_Configuration:
 | 
				
			||||
			Address = DESCRIPTOR_ADDRESS(ConfigurationDescriptor);
 | 
				
			||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
				
			||||
			break;
 | 
				
			||||
		case DTYPE_String:
 | 
				
			||||
			if (!(DescriptorNumber))
 | 
				
			||||
			{
 | 
				
			||||
				Address = DESCRIPTOR_ADDRESS(LanguageString);
 | 
				
			||||
				Size    = LanguageString.Header.Size;
 | 
				
			||||
			}
 | 
				
			||||
			else
 | 
				
			||||
			{
 | 
				
			||||
				Address = DESCRIPTOR_ADDRESS(ProductString);
 | 
				
			||||
				Size    = ProductString.Header.Size;
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			break;
 | 
				
			||||
	}
 | 
				
			||||
	
 | 
				
			||||
	*DescriptorAddress = Address;
 | 
				
			||||
	return Size;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,95 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Header file for Descriptors.c.
 | 
				
			||||
 */
 | 
				
			||||
 | 
				
			||||
#ifndef _DESCRIPTORS_H_
 | 
				
			||||
#define _DESCRIPTORS_H_
 | 
				
			||||
 | 
				
			||||
	/* Includes: */
 | 
				
			||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
				
			||||
 | 
				
			||||
	/* Macros: */
 | 
				
			||||
		/** Structure for a CDC class Functional descriptor, with a given data size. This is used instead of a
 | 
				
			||||
		 *  type define so that the same macro can be used for functional descriptors of varying data lengths,
 | 
				
			||||
		 *  while allowing the sizeof() operator to return correct results.
 | 
				
			||||
		 *
 | 
				
			||||
		 *  \param DataSize  Size of the functional descriptor's data payload, in bytes
 | 
				
			||||
		 */
 | 
				
			||||
		#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
 | 
				
			||||
		     struct                                        \
 | 
				
			||||
		     {                                             \
 | 
				
			||||
		          USB_Descriptor_Header_t Header;          \
 | 
				
			||||
			      uint8_t                 SubType;         \
 | 
				
			||||
		          uint8_t                 Data[DataSize];  \
 | 
				
			||||
		     }
 | 
				
			||||
 | 
				
			||||
		/** Endpoint number for the CDC control interface event notification endpoint. */
 | 
				
			||||
		#define CDC_NOTIFICATION_EPNUM         3
 | 
				
			||||
 | 
				
			||||
		/** Size of the CDC control interface notification endpoint bank, in bytes */
 | 
				
			||||
		#define CDC_NOTIFICATION_EPSIZE        8
 | 
				
			||||
 | 
				
			||||
		/** Endpoint number for the CDC data interface TX (data IN) endpoint */
 | 
				
			||||
		#define CDC_TX_EPNUM                   1	
 | 
				
			||||
 | 
				
			||||
		/** Endpoint number for the CDC data interface RX (data OUT) endpoint */
 | 
				
			||||
		#define CDC_RX_EPNUM                   2	
 | 
				
			||||
 | 
				
			||||
		/** Size of the CDC data interface TX and RX data endpoint banks, in bytes */
 | 
				
			||||
		#define CDC_TXRX_EPSIZE                16
 | 
				
			||||
 | 
				
			||||
	/* Type Defines: */
 | 
				
			||||
		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
				
			||||
		 *  application code, as the configuration descriptor contains several sub-descriptors which
 | 
				
			||||
		 *  vary between devices, and which describe the device's usage to the host.
 | 
				
			||||
		 */
 | 
				
			||||
		typedef struct
 | 
				
			||||
		{
 | 
				
			||||
			USB_Descriptor_Configuration_Header_t    Config;
 | 
				
			||||
			USB_Descriptor_Interface_t               CCI_Interface;
 | 
				
			||||
			CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_IntHeader;
 | 
				
			||||
			CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;
 | 
				
			||||
			CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;
 | 
				
			||||
			CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;
 | 
				
			||||
			USB_Descriptor_Endpoint_t                ManagementEndpoint;
 | 
				
			||||
			USB_Descriptor_Interface_t               DCI_Interface;
 | 
				
			||||
			USB_Descriptor_Endpoint_t                DataOutEndpoint;
 | 
				
			||||
			USB_Descriptor_Endpoint_t                DataInEndpoint;
 | 
				
			||||
		} USB_Descriptor_Configuration_t;
 | 
				
			||||
 | 
				
			||||
	/* Function Prototypes: */
 | 
				
			||||
		uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
				
			||||
		                           ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
				
			||||
 | 
				
			||||
#endif
 | 
				
			||||
@ -0,0 +1,1485 @@
 | 
				
			||||
# Doxyfile 1.5.7.1
 | 
				
			||||
 | 
				
			||||
# This file describes the settings to be used by the documentation system
 | 
				
			||||
# doxygen (www.doxygen.org) for a project
 | 
				
			||||
#
 | 
				
			||||
# All text after a hash (#) is considered a comment and will be ignored
 | 
				
			||||
# The format is:
 | 
				
			||||
#       TAG = value [value, ...]
 | 
				
			||||
# For lists items can also be appended using:
 | 
				
			||||
#       TAG += value [value, ...]
 | 
				
			||||
# Values that contain spaces should be placed between quotes (" ")
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Project related configuration options
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# This tag specifies the encoding used for all characters in the config file 
 | 
				
			||||
# that follow. The default is UTF-8 which is also the encoding used for all 
 | 
				
			||||
# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
 | 
				
			||||
# iconv built into libc) for the transcoding. See 
 | 
				
			||||
# http://www.gnu.org/software/libiconv for the list of possible encodings.
 | 
				
			||||
 | 
				
			||||
DOXYFILE_ENCODING      = UTF-8
 | 
				
			||||
 | 
				
			||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
 | 
				
			||||
# by quotes) that should identify the project.
 | 
				
			||||
 | 
				
			||||
PROJECT_NAME           = "LUFA Library - CDC Class Bootloader"
 | 
				
			||||
 | 
				
			||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
 | 
				
			||||
# This could be handy for archiving the generated documentation or 
 | 
				
			||||
# if some version control system is used.
 | 
				
			||||
 | 
				
			||||
PROJECT_NUMBER         = 0.0.0
 | 
				
			||||
 | 
				
			||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 | 
				
			||||
# base path where the generated documentation will be put. 
 | 
				
			||||
# If a relative path is entered, it will be relative to the location 
 | 
				
			||||
# where doxygen was started. If left blank the current directory will be used.
 | 
				
			||||
 | 
				
			||||
OUTPUT_DIRECTORY       = ./Documentation/
 | 
				
			||||
 | 
				
			||||
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
 | 
				
			||||
# 4096 sub-directories (in 2 levels) under the output directory of each output 
 | 
				
			||||
# format and will distribute the generated files over these directories. 
 | 
				
			||||
# Enabling this option can be useful when feeding doxygen a huge amount of 
 | 
				
			||||
# source files, where putting all generated files in the same directory would 
 | 
				
			||||
# otherwise cause performance problems for the file system.
 | 
				
			||||
 | 
				
			||||
CREATE_SUBDIRS         = YES
 | 
				
			||||
 | 
				
			||||
# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
 | 
				
			||||
# documentation generated by doxygen is written. Doxygen will use this 
 | 
				
			||||
# information to generate all constant output in the proper language. 
 | 
				
			||||
# The default language is English, other supported languages are: 
 | 
				
			||||
# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
 | 
				
			||||
# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
 | 
				
			||||
# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
 | 
				
			||||
# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
 | 
				
			||||
# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
 | 
				
			||||
# Spanish, Swedish, and Ukrainian.
 | 
				
			||||
 | 
				
			||||
OUTPUT_LANGUAGE        = English
 | 
				
			||||
 | 
				
			||||
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# include brief member descriptions after the members that are listed in 
 | 
				
			||||
# the file and class documentation (similar to JavaDoc). 
 | 
				
			||||
# Set to NO to disable this.
 | 
				
			||||
 | 
				
			||||
BRIEF_MEMBER_DESC      = YES
 | 
				
			||||
 | 
				
			||||
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
 | 
				
			||||
# the brief description of a member or function before the detailed description. 
 | 
				
			||||
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
 | 
				
			||||
# brief descriptions will be completely suppressed.
 | 
				
			||||
 | 
				
			||||
REPEAT_BRIEF           = YES
 | 
				
			||||
 | 
				
			||||
# This tag implements a quasi-intelligent brief description abbreviator 
 | 
				
			||||
# that is used to form the text in various listings. Each string 
 | 
				
			||||
# in this list, if found as the leading text of the brief description, will be 
 | 
				
			||||
# stripped from the text and the result after processing the whole list, is 
 | 
				
			||||
# used as the annotated text. Otherwise, the brief description is used as-is. 
 | 
				
			||||
# If left blank, the following values are used ("$name" is automatically 
 | 
				
			||||
# replaced with the name of the entity): "The $name class" "The $name widget" 
 | 
				
			||||
# "The $name file" "is" "provides" "specifies" "contains" 
 | 
				
			||||
# "represents" "a" "an" "the"
 | 
				
			||||
 | 
				
			||||
ABBREVIATE_BRIEF       = "The $name class" \
 | 
				
			||||
                         "The $name widget" \
 | 
				
			||||
                         "The $name file" \
 | 
				
			||||
                         is \
 | 
				
			||||
                         provides \
 | 
				
			||||
                         specifies \
 | 
				
			||||
                         contains \
 | 
				
			||||
                         represents \
 | 
				
			||||
                         a \
 | 
				
			||||
                         an \
 | 
				
			||||
                         the
 | 
				
			||||
 | 
				
			||||
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
 | 
				
			||||
# Doxygen will generate a detailed section even if there is only a brief 
 | 
				
			||||
# description.
 | 
				
			||||
 | 
				
			||||
ALWAYS_DETAILED_SEC    = NO
 | 
				
			||||
 | 
				
			||||
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
 | 
				
			||||
# inherited members of a class in the documentation of that class as if those 
 | 
				
			||||
# members were ordinary class members. Constructors, destructors and assignment 
 | 
				
			||||
# operators of the base classes will not be shown.
 | 
				
			||||
 | 
				
			||||
INLINE_INHERITED_MEMB  = NO
 | 
				
			||||
 | 
				
			||||
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
 | 
				
			||||
# path before files name in the file list and in the header files. If set 
 | 
				
			||||
# to NO the shortest path that makes the file name unique will be used.
 | 
				
			||||
 | 
				
			||||
FULL_PATH_NAMES        = YES
 | 
				
			||||
 | 
				
			||||
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
 | 
				
			||||
# can be used to strip a user-defined part of the path. Stripping is 
 | 
				
			||||
# only done if one of the specified strings matches the left-hand part of 
 | 
				
			||||
# the path. The tag can be used to show relative paths in the file list. 
 | 
				
			||||
# If left blank the directory from which doxygen is run is used as the 
 | 
				
			||||
# path to strip.
 | 
				
			||||
 | 
				
			||||
STRIP_FROM_PATH        = 
 | 
				
			||||
 | 
				
			||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
 | 
				
			||||
# the path mentioned in the documentation of a class, which tells 
 | 
				
			||||
# the reader which header file to include in order to use a class. 
 | 
				
			||||
# If left blank only the name of the header file containing the class 
 | 
				
			||||
# definition is used. Otherwise one should specify the include paths that 
 | 
				
			||||
# are normally passed to the compiler using the -I flag.
 | 
				
			||||
 | 
				
			||||
STRIP_FROM_INC_PATH    = 
 | 
				
			||||
 | 
				
			||||
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
 | 
				
			||||
# (but less readable) file names. This can be useful is your file systems 
 | 
				
			||||
# doesn't support long names like on DOS, Mac, or CD-ROM.
 | 
				
			||||
 | 
				
			||||
SHORT_NAMES            = YES
 | 
				
			||||
 | 
				
			||||
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
 | 
				
			||||
# will interpret the first line (until the first dot) of a JavaDoc-style 
 | 
				
			||||
# comment as the brief description. If set to NO, the JavaDoc 
 | 
				
			||||
# comments will behave just like regular Qt-style comments 
 | 
				
			||||
# (thus requiring an explicit @brief command for a brief description.)
 | 
				
			||||
 | 
				
			||||
JAVADOC_AUTOBRIEF      = NO
 | 
				
			||||
 | 
				
			||||
# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
 | 
				
			||||
# interpret the first line (until the first dot) of a Qt-style 
 | 
				
			||||
# comment as the brief description. If set to NO, the comments 
 | 
				
			||||
# will behave just like regular Qt-style comments (thus requiring 
 | 
				
			||||
# an explicit \brief command for a brief description.)
 | 
				
			||||
 | 
				
			||||
QT_AUTOBRIEF           = NO
 | 
				
			||||
 | 
				
			||||
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
 | 
				
			||||
# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
 | 
				
			||||
# comments) as a brief description. This used to be the default behaviour. 
 | 
				
			||||
# The new default is to treat a multi-line C++ comment block as a detailed 
 | 
				
			||||
# description. Set this tag to YES if you prefer the old behaviour instead.
 | 
				
			||||
 | 
				
			||||
MULTILINE_CPP_IS_BRIEF = NO
 | 
				
			||||
 | 
				
			||||
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
 | 
				
			||||
# member inherits the documentation from any documented member that it 
 | 
				
			||||
# re-implements.
 | 
				
			||||
 | 
				
			||||
INHERIT_DOCS           = YES
 | 
				
			||||
 | 
				
			||||
# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
 | 
				
			||||
# a new page for each member. If set to NO, the documentation of a member will 
 | 
				
			||||
# be part of the file/class/namespace that contains it.
 | 
				
			||||
 | 
				
			||||
SEPARATE_MEMBER_PAGES  = NO
 | 
				
			||||
 | 
				
			||||
# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
 | 
				
			||||
# Doxygen uses this value to replace tabs by spaces in code fragments.
 | 
				
			||||
 | 
				
			||||
TAB_SIZE               = 4
 | 
				
			||||
 | 
				
			||||
# This tag can be used to specify a number of aliases that acts 
 | 
				
			||||
# as commands in the documentation. An alias has the form "name=value". 
 | 
				
			||||
# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
 | 
				
			||||
# put the command \sideeffect (or @sideeffect) in the documentation, which 
 | 
				
			||||
# will result in a user-defined paragraph with heading "Side Effects:". 
 | 
				
			||||
# You can put \n's in the value part of an alias to insert newlines.
 | 
				
			||||
 | 
				
			||||
ALIASES                = 
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for C. 
 | 
				
			||||
# For instance, some of the names that are used will be different. The list 
 | 
				
			||||
# of all members will be omitted, etc.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_FOR_C  = YES
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for 
 | 
				
			||||
# Java. For instance, namespaces will be presented as packages, qualified 
 | 
				
			||||
# scopes will look different, etc.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_JAVA   = NO
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for 
 | 
				
			||||
# Fortran.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_FOR_FORTRAN   = NO
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
 | 
				
			||||
# sources. Doxygen will then generate output that is tailored for 
 | 
				
			||||
# VHDL.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_VHDL   = NO
 | 
				
			||||
 | 
				
			||||
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
 | 
				
			||||
# to include (a tag file for) the STL sources as input, then you should 
 | 
				
			||||
# set this tag to YES in order to let doxygen match functions declarations and 
 | 
				
			||||
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
 | 
				
			||||
# func(std::string) {}). This also make the inheritance and collaboration 
 | 
				
			||||
# diagrams that involve STL classes more complete and accurate.
 | 
				
			||||
 | 
				
			||||
BUILTIN_STL_SUPPORT    = NO
 | 
				
			||||
 | 
				
			||||
# If you use Microsoft's C++/CLI language, you should set this option to YES to
 | 
				
			||||
# enable parsing support.
 | 
				
			||||
 | 
				
			||||
CPP_CLI_SUPPORT        = NO
 | 
				
			||||
 | 
				
			||||
# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
 | 
				
			||||
# Doxygen will parse them like normal C++ but will assume all classes use public 
 | 
				
			||||
# instead of private inheritance when no explicit protection keyword is present.
 | 
				
			||||
 | 
				
			||||
SIP_SUPPORT            = NO
 | 
				
			||||
 | 
				
			||||
# For Microsoft's IDL there are propget and propput attributes to indicate getter 
 | 
				
			||||
# and setter methods for a property. Setting this option to YES (the default) 
 | 
				
			||||
# will make doxygen to replace the get and set methods by a property in the 
 | 
				
			||||
# documentation. This will only work if the methods are indeed getting or 
 | 
				
			||||
# setting a simple type. If this is not the case, or you want to show the 
 | 
				
			||||
# methods anyway, you should set this option to NO.
 | 
				
			||||
 | 
				
			||||
IDL_PROPERTY_SUPPORT   = YES
 | 
				
			||||
 | 
				
			||||
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
 | 
				
			||||
# tag is set to YES, then doxygen will reuse the documentation of the first 
 | 
				
			||||
# member in the group (if any) for the other members of the group. By default 
 | 
				
			||||
# all members of a group must be documented explicitly.
 | 
				
			||||
 | 
				
			||||
DISTRIBUTE_GROUP_DOC   = NO
 | 
				
			||||
 | 
				
			||||
# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
 | 
				
			||||
# the same type (for instance a group of public functions) to be put as a 
 | 
				
			||||
# subgroup of that type (e.g. under the Public Functions section). Set it to 
 | 
				
			||||
# NO to prevent subgrouping. Alternatively, this can be done per class using 
 | 
				
			||||
# the \nosubgrouping command.
 | 
				
			||||
 | 
				
			||||
SUBGROUPING            = YES
 | 
				
			||||
 | 
				
			||||
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
 | 
				
			||||
# is documented as struct, union, or enum with the name of the typedef. So 
 | 
				
			||||
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
 | 
				
			||||
# with name TypeT. When disabled the typedef will appear as a member of a file, 
 | 
				
			||||
# namespace, or class. And the struct will be named TypeS. This can typically 
 | 
				
			||||
# be useful for C code in case the coding convention dictates that all compound 
 | 
				
			||||
# types are typedef'ed and only the typedef is referenced, never the tag name.
 | 
				
			||||
 | 
				
			||||
TYPEDEF_HIDES_STRUCT   = NO
 | 
				
			||||
 | 
				
			||||
# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
 | 
				
			||||
# determine which symbols to keep in memory and which to flush to disk.
 | 
				
			||||
# When the cache is full, less often used symbols will be written to disk.
 | 
				
			||||
# For small to medium size projects (<1000 input files) the default value is 
 | 
				
			||||
# probably good enough. For larger projects a too small cache size can cause 
 | 
				
			||||
# doxygen to be busy swapping symbols to and from disk most of the time 
 | 
				
			||||
# causing a significant performance penality. 
 | 
				
			||||
# If the system has enough physical memory increasing the cache will improve the 
 | 
				
			||||
# performance by keeping more symbols in memory. Note that the value works on 
 | 
				
			||||
# a logarithmic scale so increasing the size by one will rougly double the 
 | 
				
			||||
# memory usage. The cache size is given by this formula: 
 | 
				
			||||
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
 | 
				
			||||
# corresponding to a cache size of 2^16 = 65536 symbols
 | 
				
			||||
 | 
				
			||||
SYMBOL_CACHE_SIZE      = 0
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Build related configuration options
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
 | 
				
			||||
# documentation are documented, even if no documentation was available. 
 | 
				
			||||
# Private class members and static file members will be hidden unless 
 | 
				
			||||
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 | 
				
			||||
 | 
				
			||||
EXTRACT_ALL            = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
 | 
				
			||||
# will be included in the documentation.
 | 
				
			||||
 | 
				
			||||
EXTRACT_PRIVATE        = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_STATIC tag is set to YES all static members of a file 
 | 
				
			||||
# will be included in the documentation.
 | 
				
			||||
 | 
				
			||||
EXTRACT_STATIC         = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
 | 
				
			||||
# defined locally in source files will be included in the documentation. 
 | 
				
			||||
# If set to NO only classes defined in header files are included.
 | 
				
			||||
 | 
				
			||||
EXTRACT_LOCAL_CLASSES  = YES
 | 
				
			||||
 | 
				
			||||
# This flag is only useful for Objective-C code. When set to YES local 
 | 
				
			||||
# methods, which are defined in the implementation section but not in 
 | 
				
			||||
# the interface are included in the documentation. 
 | 
				
			||||
# If set to NO (the default) only methods in the interface are included.
 | 
				
			||||
 | 
				
			||||
EXTRACT_LOCAL_METHODS  = NO
 | 
				
			||||
 | 
				
			||||
# If this flag is set to YES, the members of anonymous namespaces will be 
 | 
				
			||||
# extracted and appear in the documentation as a namespace called 
 | 
				
			||||
# 'anonymous_namespace{file}', where file will be replaced with the base 
 | 
				
			||||
# name of the file that contains the anonymous namespace. By default 
 | 
				
			||||
# anonymous namespace are hidden.
 | 
				
			||||
 | 
				
			||||
EXTRACT_ANON_NSPACES   = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# undocumented members of documented classes, files or namespaces. 
 | 
				
			||||
# If set to NO (the default) these members will be included in the 
 | 
				
			||||
# various overviews, but no documentation section is generated. 
 | 
				
			||||
# This option has no effect if EXTRACT_ALL is enabled.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_MEMBERS     = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# undocumented classes that are normally visible in the class hierarchy. 
 | 
				
			||||
# If set to NO (the default) these classes will be included in the various 
 | 
				
			||||
# overviews. This option has no effect if EXTRACT_ALL is enabled.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_CLASSES     = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# friend (class|struct|union) declarations. 
 | 
				
			||||
# If set to NO (the default) these declarations will be included in the 
 | 
				
			||||
# documentation.
 | 
				
			||||
 | 
				
			||||
HIDE_FRIEND_COMPOUNDS  = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
 | 
				
			||||
# documentation blocks found inside the body of a function. 
 | 
				
			||||
# If set to NO (the default) these blocks will be appended to the 
 | 
				
			||||
# function's detailed documentation block.
 | 
				
			||||
 | 
				
			||||
HIDE_IN_BODY_DOCS      = NO
 | 
				
			||||
 | 
				
			||||
# The INTERNAL_DOCS tag determines if documentation 
 | 
				
			||||
# that is typed after a \internal command is included. If the tag is set 
 | 
				
			||||
# to NO (the default) then the documentation will be excluded. 
 | 
				
			||||
# Set it to YES to include the internal documentation.
 | 
				
			||||
 | 
				
			||||
INTERNAL_DOCS          = NO
 | 
				
			||||
 | 
				
			||||
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
 | 
				
			||||
# file names in lower-case letters. If set to YES upper-case letters are also 
 | 
				
			||||
# allowed. This is useful if you have classes or files whose names only differ 
 | 
				
			||||
# in case and if your file system supports case sensitive file names. Windows 
 | 
				
			||||
# and Mac users are advised to set this option to NO.
 | 
				
			||||
 | 
				
			||||
CASE_SENSE_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
 | 
				
			||||
# will show members with their full class and namespace scopes in the 
 | 
				
			||||
# documentation. If set to YES the scope will be hidden.
 | 
				
			||||
 | 
				
			||||
HIDE_SCOPE_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
 | 
				
			||||
# will put a list of the files that are included by a file in the documentation 
 | 
				
			||||
# of that file.
 | 
				
			||||
 | 
				
			||||
SHOW_INCLUDE_FILES     = YES
 | 
				
			||||
 | 
				
			||||
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
 | 
				
			||||
# is inserted in the documentation for inline members.
 | 
				
			||||
 | 
				
			||||
INLINE_INFO            = YES
 | 
				
			||||
 | 
				
			||||
# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
 | 
				
			||||
# will sort the (detailed) documentation of file and class members 
 | 
				
			||||
# alphabetically by member name. If set to NO the members will appear in 
 | 
				
			||||
# declaration order.
 | 
				
			||||
 | 
				
			||||
SORT_MEMBER_DOCS       = YES
 | 
				
			||||
 | 
				
			||||
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
 | 
				
			||||
# brief documentation of file, namespace and class members alphabetically 
 | 
				
			||||
# by member name. If set to NO (the default) the members will appear in 
 | 
				
			||||
# declaration order.
 | 
				
			||||
 | 
				
			||||
SORT_BRIEF_DOCS        = NO
 | 
				
			||||
 | 
				
			||||
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
 | 
				
			||||
# hierarchy of group names into alphabetical order. If set to NO (the default) 
 | 
				
			||||
# the group names will appear in their defined order.
 | 
				
			||||
 | 
				
			||||
SORT_GROUP_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
 | 
				
			||||
# sorted by fully-qualified names, including namespaces. If set to 
 | 
				
			||||
# NO (the default), the class list will be sorted only by class name, 
 | 
				
			||||
# not including the namespace part. 
 | 
				
			||||
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
 | 
				
			||||
# Note: This option applies only to the class list, not to the 
 | 
				
			||||
# alphabetical list.
 | 
				
			||||
 | 
				
			||||
SORT_BY_SCOPE_NAME     = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TODOLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the todo list. This list is created by putting \todo 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_TODOLIST      = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TESTLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the test list. This list is created by putting \test 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_TESTLIST      = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_BUGLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the bug list. This list is created by putting \bug 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_BUGLIST       = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the deprecated list. This list is created by putting 
 | 
				
			||||
# \deprecated commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_DEPRECATEDLIST= YES
 | 
				
			||||
 | 
				
			||||
# The ENABLED_SECTIONS tag can be used to enable conditional 
 | 
				
			||||
# documentation sections, marked by \if sectionname ... \endif.
 | 
				
			||||
 | 
				
			||||
ENABLED_SECTIONS       = 
 | 
				
			||||
 | 
				
			||||
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
 | 
				
			||||
# the initial value of a variable or define consists of for it to appear in 
 | 
				
			||||
# the documentation. If the initializer consists of more lines than specified 
 | 
				
			||||
# here it will be hidden. Use a value of 0 to hide initializers completely. 
 | 
				
			||||
# The appearance of the initializer of individual variables and defines in the 
 | 
				
			||||
# documentation can be controlled using \showinitializer or \hideinitializer 
 | 
				
			||||
# command in the documentation regardless of this setting.
 | 
				
			||||
 | 
				
			||||
MAX_INITIALIZER_LINES  = 30
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
 | 
				
			||||
# at the bottom of the documentation of classes and structs. If set to YES the 
 | 
				
			||||
# list will mention the files that were used to generate the documentation.
 | 
				
			||||
 | 
				
			||||
SHOW_USED_FILES        = YES
 | 
				
			||||
 | 
				
			||||
# If the sources in your project are distributed over multiple directories 
 | 
				
			||||
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
 | 
				
			||||
# in the documentation. The default is NO.
 | 
				
			||||
 | 
				
			||||
SHOW_DIRECTORIES       = YES
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
 | 
				
			||||
# This will remove the Files entry from the Quick Index and from the 
 | 
				
			||||
# Folder Tree View (if specified). The default is YES.
 | 
				
			||||
 | 
				
			||||
SHOW_FILES             = YES
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
 | 
				
			||||
# Namespaces page.  This will remove the Namespaces entry from the Quick Index
 | 
				
			||||
# and from the Folder Tree View (if specified). The default is YES.
 | 
				
			||||
 | 
				
			||||
SHOW_NAMESPACES        = YES
 | 
				
			||||
 | 
				
			||||
# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
 | 
				
			||||
# doxygen should invoke to get the current version for each file (typically from 
 | 
				
			||||
# the version control system). Doxygen will invoke the program by executing (via 
 | 
				
			||||
# popen()) the command <command> <input-file>, where <command> is the value of 
 | 
				
			||||
# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
 | 
				
			||||
# provided by doxygen. Whatever the program writes to standard output 
 | 
				
			||||
# is used as the file version. See the manual for examples.
 | 
				
			||||
 | 
				
			||||
FILE_VERSION_FILTER    = 
 | 
				
			||||
 | 
				
			||||
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
 | 
				
			||||
# doxygen. The layout file controls the global structure of the generated output files 
 | 
				
			||||
# in an output format independent way. The create the layout file that represents 
 | 
				
			||||
# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
 | 
				
			||||
# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
 | 
				
			||||
# of the layout file.
 | 
				
			||||
 | 
				
			||||
LAYOUT_FILE            = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to warning and progress messages
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The QUIET tag can be used to turn on/off the messages that are generated 
 | 
				
			||||
# by doxygen. Possible values are YES and NO. If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
QUIET                  = YES
 | 
				
			||||
 | 
				
			||||
# The WARNINGS tag can be used to turn on/off the warning messages that are 
 | 
				
			||||
# generated by doxygen. Possible values are YES and NO. If left blank 
 | 
				
			||||
# NO is used.
 | 
				
			||||
 | 
				
			||||
WARNINGS               = YES
 | 
				
			||||
 | 
				
			||||
# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
 | 
				
			||||
# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
 | 
				
			||||
# automatically be disabled.
 | 
				
			||||
 | 
				
			||||
WARN_IF_UNDOCUMENTED   = YES
 | 
				
			||||
 | 
				
			||||
# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
 | 
				
			||||
# potential errors in the documentation, such as not documenting some 
 | 
				
			||||
# parameters in a documented function, or documenting parameters that 
 | 
				
			||||
# don't exist or using markup commands wrongly.
 | 
				
			||||
 | 
				
			||||
WARN_IF_DOC_ERROR      = YES
 | 
				
			||||
 | 
				
			||||
# This WARN_NO_PARAMDOC option can be abled to get warnings for 
 | 
				
			||||
# functions that are documented, but have no documentation for their parameters 
 | 
				
			||||
# or return value. If set to NO (the default) doxygen will only warn about 
 | 
				
			||||
# wrong or incomplete parameter documentation, but not about the absence of 
 | 
				
			||||
# documentation.
 | 
				
			||||
 | 
				
			||||
WARN_NO_PARAMDOC       = YES
 | 
				
			||||
 | 
				
			||||
# The WARN_FORMAT tag determines the format of the warning messages that 
 | 
				
			||||
# doxygen can produce. The string should contain the $file, $line, and $text 
 | 
				
			||||
# tags, which will be replaced by the file and line number from which the 
 | 
				
			||||
# warning originated and the warning text. Optionally the format may contain 
 | 
				
			||||
# $version, which will be replaced by the version of the file (if it could 
 | 
				
			||||
# be obtained via FILE_VERSION_FILTER)
 | 
				
			||||
 | 
				
			||||
WARN_FORMAT            = "$file:$line: $text"
 | 
				
			||||
 | 
				
			||||
# The WARN_LOGFILE tag can be used to specify a file to which warning 
 | 
				
			||||
# and error messages should be written. If left blank the output is written 
 | 
				
			||||
# to stderr.
 | 
				
			||||
 | 
				
			||||
WARN_LOGFILE           = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the input files
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The INPUT tag can be used to specify the files and/or directories that contain 
 | 
				
			||||
# documented source files. You may enter file names like "myfile.cpp" or 
 | 
				
			||||
# directories like "/usr/src/myproject". Separate the files or directories 
 | 
				
			||||
# with spaces.
 | 
				
			||||
 | 
				
			||||
INPUT                  = ./
 | 
				
			||||
 | 
				
			||||
# This tag can be used to specify the character encoding of the source files 
 | 
				
			||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
 | 
				
			||||
# also the default input encoding. Doxygen uses libiconv (or the iconv built 
 | 
				
			||||
# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
 | 
				
			||||
# the list of possible encodings.
 | 
				
			||||
 | 
				
			||||
INPUT_ENCODING         = UTF-8
 | 
				
			||||
 | 
				
			||||
# If the value of the INPUT tag contains directories, you can use the 
 | 
				
			||||
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 | 
				
			||||
# and *.h) to filter out the source-files in the directories. If left 
 | 
				
			||||
# blank the following patterns are tested: 
 | 
				
			||||
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
 | 
				
			||||
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 | 
				
			||||
 | 
				
			||||
FILE_PATTERNS          = *.h \
 | 
				
			||||
                         *.c \
 | 
				
			||||
						 *.txt
 | 
				
			||||
 | 
				
			||||
# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 | 
				
			||||
# should be searched for input files as well. Possible values are YES and NO. 
 | 
				
			||||
# If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
RECURSIVE              = YES
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE tag can be used to specify files and/or directories that should 
 | 
				
			||||
# excluded from the INPUT source files. This way you can easily exclude a 
 | 
				
			||||
# subdirectory from a directory tree whose root is specified with the INPUT tag.
 | 
				
			||||
 | 
				
			||||
EXCLUDE                = 
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
 | 
				
			||||
# directories that are symbolic links (a Unix filesystem feature) are excluded 
 | 
				
			||||
# from the input.
 | 
				
			||||
 | 
				
			||||
EXCLUDE_SYMLINKS       = NO
 | 
				
			||||
 | 
				
			||||
# If the value of the INPUT tag contains directories, you can use the 
 | 
				
			||||
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
 | 
				
			||||
# certain files from those directories. Note that the wildcards are matched 
 | 
				
			||||
# against the file with absolute path, so to exclude all test directories 
 | 
				
			||||
# for example use the pattern */test/*
 | 
				
			||||
 | 
				
			||||
EXCLUDE_PATTERNS       = */LowLevel/USBMode.h
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
 | 
				
			||||
# (namespaces, classes, functions, etc.) that should be excluded from the 
 | 
				
			||||
# output. The symbol name can be a fully qualified name, a word, or if the 
 | 
				
			||||
# wildcard * is used, a substring. Examples: ANamespace, AClass, 
 | 
				
			||||
# AClass::ANamespace, ANamespace::*Test
 | 
				
			||||
 | 
				
			||||
EXCLUDE_SYMBOLS        = __*
 | 
				
			||||
 | 
				
			||||
# The EXAMPLE_PATH tag can be used to specify one or more files or 
 | 
				
			||||
# directories that contain example code fragments that are included (see 
 | 
				
			||||
# the \include command).
 | 
				
			||||
 | 
				
			||||
EXAMPLE_PATH           = 
 | 
				
			||||
 | 
				
			||||
# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
 | 
				
			||||
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 | 
				
			||||
# and *.h) to filter out the source-files in the directories. If left 
 | 
				
			||||
# blank all files are included.
 | 
				
			||||
 | 
				
			||||
EXAMPLE_PATTERNS       = *
 | 
				
			||||
 | 
				
			||||
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
 | 
				
			||||
# searched for input files to be used with the \include or \dontinclude 
 | 
				
			||||
# commands irrespective of the value of the RECURSIVE tag. 
 | 
				
			||||
# Possible values are YES and NO. If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
EXAMPLE_RECURSIVE      = NO
 | 
				
			||||
 | 
				
			||||
# The IMAGE_PATH tag can be used to specify one or more files or 
 | 
				
			||||
# directories that contain image that are included in the documentation (see 
 | 
				
			||||
# the \image command).
 | 
				
			||||
 | 
				
			||||
IMAGE_PATH             = 
 | 
				
			||||
 | 
				
			||||
# The INPUT_FILTER tag can be used to specify a program that doxygen should 
 | 
				
			||||
# invoke to filter for each input file. Doxygen will invoke the filter program 
 | 
				
			||||
# by executing (via popen()) the command <filter> <input-file>, where <filter> 
 | 
				
			||||
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
 | 
				
			||||
# input file. Doxygen will then use the output that the filter program writes 
 | 
				
			||||
# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
 | 
				
			||||
# ignored.
 | 
				
			||||
 | 
				
			||||
INPUT_FILTER           = 
 | 
				
			||||
 | 
				
			||||
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
 | 
				
			||||
# basis.  Doxygen will compare the file name with each pattern and apply the 
 | 
				
			||||
# filter if there is a match.  The filters are a list of the form: 
 | 
				
			||||
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
 | 
				
			||||
# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
 | 
				
			||||
# is applied to all files.
 | 
				
			||||
 | 
				
			||||
FILTER_PATTERNS        = 
 | 
				
			||||
 | 
				
			||||
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
 | 
				
			||||
# INPUT_FILTER) will be used to filter the input files when producing source 
 | 
				
			||||
# files to browse (i.e. when SOURCE_BROWSER is set to YES).
 | 
				
			||||
 | 
				
			||||
FILTER_SOURCE_FILES    = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to source browsing
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
 | 
				
			||||
# be generated. Documented entities will be cross-referenced with these sources. 
 | 
				
			||||
# Note: To get rid of all source code in the generated output, make sure also 
 | 
				
			||||
# VERBATIM_HEADERS is set to NO.
 | 
				
			||||
 | 
				
			||||
SOURCE_BROWSER         = NO
 | 
				
			||||
 | 
				
			||||
# Setting the INLINE_SOURCES tag to YES will include the body 
 | 
				
			||||
# of functions and classes directly in the documentation.
 | 
				
			||||
 | 
				
			||||
INLINE_SOURCES         = NO
 | 
				
			||||
 | 
				
			||||
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
 | 
				
			||||
# doxygen to hide any special comment blocks from generated source code 
 | 
				
			||||
# fragments. Normal C and C++ comments will always remain visible.
 | 
				
			||||
 | 
				
			||||
STRIP_CODE_COMMENTS    = YES
 | 
				
			||||
 | 
				
			||||
# If the REFERENCED_BY_RELATION tag is set to YES 
 | 
				
			||||
# then for each documented function all documented 
 | 
				
			||||
# functions referencing it will be listed.
 | 
				
			||||
 | 
				
			||||
REFERENCED_BY_RELATION = NO
 | 
				
			||||
 | 
				
			||||
# If the REFERENCES_RELATION tag is set to YES 
 | 
				
			||||
# then for each documented function all documented entities 
 | 
				
			||||
# called/used by that function will be listed.
 | 
				
			||||
 | 
				
			||||
REFERENCES_RELATION    = NO
 | 
				
			||||
 | 
				
			||||
# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
 | 
				
			||||
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
 | 
				
			||||
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
 | 
				
			||||
# link to the source code.  Otherwise they will link to the documentstion.
 | 
				
			||||
 | 
				
			||||
REFERENCES_LINK_SOURCE = NO
 | 
				
			||||
 | 
				
			||||
# If the USE_HTAGS tag is set to YES then the references to source code 
 | 
				
			||||
# will point to the HTML generated by the htags(1) tool instead of doxygen 
 | 
				
			||||
# built-in source browser. The htags tool is part of GNU's global source 
 | 
				
			||||
# tagging system (see http://www.gnu.org/software/global/global.html). You 
 | 
				
			||||
# will need version 4.8.6 or higher.
 | 
				
			||||
 | 
				
			||||
USE_HTAGS              = NO
 | 
				
			||||
 | 
				
			||||
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
 | 
				
			||||
# will generate a verbatim copy of the header file for each class for 
 | 
				
			||||
# which an include is specified. Set to NO to disable this.
 | 
				
			||||
 | 
				
			||||
VERBATIM_HEADERS       = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the alphabetical class index
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
 | 
				
			||||
# of all compounds will be generated. Enable this if the project 
 | 
				
			||||
# contains a lot of classes, structs, unions or interfaces.
 | 
				
			||||
 | 
				
			||||
ALPHABETICAL_INDEX     = YES
 | 
				
			||||
 | 
				
			||||
# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
 | 
				
			||||
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
 | 
				
			||||
# in which this list will be split (can be a number in the range [1..20])
 | 
				
			||||
 | 
				
			||||
COLS_IN_ALPHA_INDEX    = 5
 | 
				
			||||
 | 
				
			||||
# In case all classes in a project start with a common prefix, all 
 | 
				
			||||
# classes will be put under the same header in the alphabetical index. 
 | 
				
			||||
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
 | 
				
			||||
# should be ignored while generating the index headers.
 | 
				
			||||
 | 
				
			||||
IGNORE_PREFIX          = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the HTML output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate HTML output.
 | 
				
			||||
 | 
				
			||||
GENERATE_HTML          = YES
 | 
				
			||||
 | 
				
			||||
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `html' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
HTML_OUTPUT            = html
 | 
				
			||||
 | 
				
			||||
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
 | 
				
			||||
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
 | 
				
			||||
# doxygen will generate files with .html extension.
 | 
				
			||||
 | 
				
			||||
HTML_FILE_EXTENSION    = .html
 | 
				
			||||
 | 
				
			||||
# The HTML_HEADER tag can be used to specify a personal HTML header for 
 | 
				
			||||
# each generated HTML page. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard header.
 | 
				
			||||
 | 
				
			||||
HTML_HEADER            = 
 | 
				
			||||
 | 
				
			||||
# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
 | 
				
			||||
# each generated HTML page. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard footer.
 | 
				
			||||
 | 
				
			||||
HTML_FOOTER            = 
 | 
				
			||||
 | 
				
			||||
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
 | 
				
			||||
# style sheet that is used by each HTML page. It can be used to 
 | 
				
			||||
# fine-tune the look of the HTML output. If the tag is left blank doxygen 
 | 
				
			||||
# will generate a default style sheet. Note that doxygen will try to copy 
 | 
				
			||||
# the style sheet file to the HTML output directory, so don't put your own 
 | 
				
			||||
# stylesheet in the HTML output directory as well, or it will be erased!
 | 
				
			||||
 | 
				
			||||
HTML_STYLESHEET        = 
 | 
				
			||||
 | 
				
			||||
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
 | 
				
			||||
# files or namespaces will be aligned in HTML using tables. If set to 
 | 
				
			||||
# NO a bullet list will be used.
 | 
				
			||||
 | 
				
			||||
HTML_ALIGN_MEMBERS     = YES
 | 
				
			||||
 | 
				
			||||
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
 | 
				
			||||
# documentation will contain sections that can be hidden and shown after the 
 | 
				
			||||
# page has loaded. For this to work a browser that supports 
 | 
				
			||||
# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
 | 
				
			||||
# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
 | 
				
			||||
 | 
				
			||||
HTML_DYNAMIC_SECTIONS  = YES
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_DOCSET tag is set to YES, additional index files 
 | 
				
			||||
# will be generated that can be used as input for Apple's Xcode 3 
 | 
				
			||||
# integrated development environment, introduced with OSX 10.5 (Leopard). 
 | 
				
			||||
# To create a documentation set, doxygen will generate a Makefile in the 
 | 
				
			||||
# HTML output directory. Running make will produce the docset in that 
 | 
				
			||||
# directory and running "make install" will install the docset in 
 | 
				
			||||
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
 | 
				
			||||
# it at startup. 
 | 
				
			||||
# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
 | 
				
			||||
 | 
				
			||||
GENERATE_DOCSET        = NO
 | 
				
			||||
 | 
				
			||||
# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
 | 
				
			||||
# feed. A documentation feed provides an umbrella under which multiple 
 | 
				
			||||
# documentation sets from a single provider (such as a company or product suite) 
 | 
				
			||||
# can be grouped.
 | 
				
			||||
 | 
				
			||||
DOCSET_FEEDNAME        = "Doxygen generated docs"
 | 
				
			||||
 | 
				
			||||
# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
 | 
				
			||||
# should uniquely identify the documentation set bundle. This should be a 
 | 
				
			||||
# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
 | 
				
			||||
# will append .docset to the name.
 | 
				
			||||
 | 
				
			||||
DOCSET_BUNDLE_ID       = org.doxygen.Project
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
 | 
				
			||||
# will be generated that can be used as input for tools like the 
 | 
				
			||||
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
 | 
				
			||||
# of the generated HTML documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_HTMLHELP      = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
 | 
				
			||||
# be used to specify the file name of the resulting .chm file. You 
 | 
				
			||||
# can add a path in front of the file if the result should not be 
 | 
				
			||||
# written to the html output directory.
 | 
				
			||||
 | 
				
			||||
CHM_FILE               = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
 | 
				
			||||
# be used to specify the location (absolute path including file name) of 
 | 
				
			||||
# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
 | 
				
			||||
# the HTML help compiler on the generated index.hhp.
 | 
				
			||||
 | 
				
			||||
HHC_LOCATION           = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
 | 
				
			||||
# controls if a separate .chi index file is generated (YES) or that 
 | 
				
			||||
# it should be included in the master .chm file (NO).
 | 
				
			||||
 | 
				
			||||
GENERATE_CHI           = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
 | 
				
			||||
# is used to encode HtmlHelp index (hhk), content (hhc) and project file
 | 
				
			||||
# content.
 | 
				
			||||
 | 
				
			||||
CHM_INDEX_ENCODING     = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
 | 
				
			||||
# controls whether a binary table of contents is generated (YES) or a 
 | 
				
			||||
# normal table of contents (NO) in the .chm file.
 | 
				
			||||
 | 
				
			||||
BINARY_TOC             = NO
 | 
				
			||||
 | 
				
			||||
# The TOC_EXPAND flag can be set to YES to add extra items for group members 
 | 
				
			||||
# to the contents of the HTML help documentation and to the tree view.
 | 
				
			||||
 | 
				
			||||
TOC_EXPAND             = YES
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
 | 
				
			||||
# are set, an additional index file will be generated that can be used as input for 
 | 
				
			||||
# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
 | 
				
			||||
# HTML documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_QHP           = NO
 | 
				
			||||
 | 
				
			||||
# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
 | 
				
			||||
# be used to specify the file name of the resulting .qch file. 
 | 
				
			||||
# The path specified is relative to the HTML output folder.
 | 
				
			||||
 | 
				
			||||
QCH_FILE               = 
 | 
				
			||||
 | 
				
			||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating 
 | 
				
			||||
# Qt Help Project output. For more information please see 
 | 
				
			||||
# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.
 | 
				
			||||
 | 
				
			||||
QHP_NAMESPACE          = org.doxygen.Project
 | 
				
			||||
 | 
				
			||||
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
 | 
				
			||||
# Qt Help Project output. For more information please see 
 | 
				
			||||
# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.
 | 
				
			||||
 | 
				
			||||
QHP_VIRTUAL_FOLDER     = doc
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
 | 
				
			||||
# be used to specify the location of Qt's qhelpgenerator. 
 | 
				
			||||
# If non-empty doxygen will try to run qhelpgenerator on the generated 
 | 
				
			||||
# .qhp file .
 | 
				
			||||
 | 
				
			||||
QHG_LOCATION           = 
 | 
				
			||||
 | 
				
			||||
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
 | 
				
			||||
# top of each HTML page. The value NO (the default) enables the index and 
 | 
				
			||||
# the value YES disables it.
 | 
				
			||||
 | 
				
			||||
DISABLE_INDEX          = NO
 | 
				
			||||
 | 
				
			||||
# This tag can be used to set the number of enum values (range [1..20]) 
 | 
				
			||||
# that doxygen will group on one line in the generated HTML documentation.
 | 
				
			||||
 | 
				
			||||
ENUM_VALUES_PER_LINE   = 1
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
 | 
				
			||||
# structure should be generated to display hierarchical information.
 | 
				
			||||
# If the tag value is set to FRAME, a side panel will be generated
 | 
				
			||||
# containing a tree-like index structure (just like the one that 
 | 
				
			||||
# is generated for HTML Help). For this to work a browser that supports 
 | 
				
			||||
# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
 | 
				
			||||
# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
 | 
				
			||||
# probably better off using the HTML help feature. Other possible values 
 | 
				
			||||
# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
 | 
				
			||||
# and Class Hierarchy pages using a tree view instead of an ordered list;
 | 
				
			||||
# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
 | 
				
			||||
# disables this behavior completely. For backwards compatibility with previous
 | 
				
			||||
# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
 | 
				
			||||
# respectively.
 | 
				
			||||
 | 
				
			||||
GENERATE_TREEVIEW      = YES
 | 
				
			||||
 | 
				
			||||
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
 | 
				
			||||
# used to set the initial width (in pixels) of the frame in which the tree 
 | 
				
			||||
# is shown.
 | 
				
			||||
 | 
				
			||||
TREEVIEW_WIDTH         = 250
 | 
				
			||||
 | 
				
			||||
# Use this tag to change the font size of Latex formulas included 
 | 
				
			||||
# as images in the HTML documentation. The default is 10. Note that 
 | 
				
			||||
# when you change the font size after a successful doxygen run you need 
 | 
				
			||||
# to manually remove any form_*.png images from the HTML output directory 
 | 
				
			||||
# to force them to be regenerated.
 | 
				
			||||
 | 
				
			||||
FORMULA_FONTSIZE       = 10
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the LaTeX output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate Latex output.
 | 
				
			||||
 | 
				
			||||
GENERATE_LATEX         = NO
 | 
				
			||||
 | 
				
			||||
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `latex' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
LATEX_OUTPUT           = latex
 | 
				
			||||
 | 
				
			||||
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
 | 
				
			||||
# invoked. If left blank `latex' will be used as the default command name.
 | 
				
			||||
 | 
				
			||||
LATEX_CMD_NAME         = latex
 | 
				
			||||
 | 
				
			||||
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
 | 
				
			||||
# generate index for LaTeX. If left blank `makeindex' will be used as the 
 | 
				
			||||
# default command name.
 | 
				
			||||
 | 
				
			||||
MAKEINDEX_CMD_NAME     = makeindex
 | 
				
			||||
 | 
				
			||||
# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
 | 
				
			||||
# LaTeX documents. This may be useful for small projects and may help to 
 | 
				
			||||
# save some trees in general.
 | 
				
			||||
 | 
				
			||||
COMPACT_LATEX          = NO
 | 
				
			||||
 | 
				
			||||
# The PAPER_TYPE tag can be used to set the paper type that is used 
 | 
				
			||||
# by the printer. Possible values are: a4, a4wide, letter, legal and 
 | 
				
			||||
# executive. If left blank a4wide will be used.
 | 
				
			||||
 | 
				
			||||
PAPER_TYPE             = a4wide
 | 
				
			||||
 | 
				
			||||
# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
 | 
				
			||||
# packages that should be included in the LaTeX output.
 | 
				
			||||
 | 
				
			||||
EXTRA_PACKAGES         = 
 | 
				
			||||
 | 
				
			||||
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
 | 
				
			||||
# the generated latex document. The header should contain everything until 
 | 
				
			||||
# the first chapter. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard header. Notice: only use this tag if you know what you are doing!
 | 
				
			||||
 | 
				
			||||
LATEX_HEADER           = 
 | 
				
			||||
 | 
				
			||||
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
 | 
				
			||||
# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
 | 
				
			||||
# contain links (just like the HTML output) instead of page references 
 | 
				
			||||
# This makes the output suitable for online browsing using a pdf viewer.
 | 
				
			||||
 | 
				
			||||
PDF_HYPERLINKS         = YES
 | 
				
			||||
 | 
				
			||||
# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
 | 
				
			||||
# plain latex in the generated Makefile. Set this option to YES to get a 
 | 
				
			||||
# higher quality PDF documentation.
 | 
				
			||||
 | 
				
			||||
USE_PDFLATEX           = YES
 | 
				
			||||
 | 
				
			||||
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
 | 
				
			||||
# command to the generated LaTeX files. This will instruct LaTeX to keep 
 | 
				
			||||
# running if errors occur, instead of asking the user for help. 
 | 
				
			||||
# This option is also used when generating formulas in HTML.
 | 
				
			||||
 | 
				
			||||
LATEX_BATCHMODE        = NO
 | 
				
			||||
 | 
				
			||||
# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
 | 
				
			||||
# include the index chapters (such as File Index, Compound Index, etc.) 
 | 
				
			||||
# in the output.
 | 
				
			||||
 | 
				
			||||
LATEX_HIDE_INDICES     = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the RTF output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
 | 
				
			||||
# The RTF output is optimized for Word 97 and may not look very pretty with 
 | 
				
			||||
# other RTF readers or editors.
 | 
				
			||||
 | 
				
			||||
GENERATE_RTF           = NO
 | 
				
			||||
 | 
				
			||||
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `rtf' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
RTF_OUTPUT             = rtf
 | 
				
			||||
 | 
				
			||||
# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
 | 
				
			||||
# RTF documents. This may be useful for small projects and may help to 
 | 
				
			||||
# save some trees in general.
 | 
				
			||||
 | 
				
			||||
COMPACT_RTF            = NO
 | 
				
			||||
 | 
				
			||||
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
 | 
				
			||||
# will contain hyperlink fields. The RTF file will 
 | 
				
			||||
# contain links (just like the HTML output) instead of page references. 
 | 
				
			||||
# This makes the output suitable for online browsing using WORD or other 
 | 
				
			||||
# programs which support those fields. 
 | 
				
			||||
# Note: wordpad (write) and others do not support links.
 | 
				
			||||
 | 
				
			||||
RTF_HYPERLINKS         = NO
 | 
				
			||||
 | 
				
			||||
# Load stylesheet definitions from file. Syntax is similar to doxygen's 
 | 
				
			||||
# config file, i.e. a series of assignments. You only have to provide 
 | 
				
			||||
# replacements, missing definitions are set to their default value.
 | 
				
			||||
 | 
				
			||||
RTF_STYLESHEET_FILE    = 
 | 
				
			||||
 | 
				
			||||
# Set optional variables used in the generation of an rtf document. 
 | 
				
			||||
# Syntax is similar to doxygen's config file.
 | 
				
			||||
 | 
				
			||||
RTF_EXTENSIONS_FILE    = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the man page output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate man pages
 | 
				
			||||
 | 
				
			||||
GENERATE_MAN           = NO
 | 
				
			||||
 | 
				
			||||
# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `man' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
MAN_OUTPUT             = man
 | 
				
			||||
 | 
				
			||||
# The MAN_EXTENSION tag determines the extension that is added to 
 | 
				
			||||
# the generated man pages (default is the subroutine's section .3)
 | 
				
			||||
 | 
				
			||||
MAN_EXTENSION          = .3
 | 
				
			||||
 | 
				
			||||
# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
 | 
				
			||||
# then it will generate one additional man file for each entity 
 | 
				
			||||
# documented in the real man page(s). These additional files 
 | 
				
			||||
# only source the real man page, but without them the man command 
 | 
				
			||||
# would be unable to find the correct page. The default is NO.
 | 
				
			||||
 | 
				
			||||
MAN_LINKS              = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the XML output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_XML tag is set to YES Doxygen will 
 | 
				
			||||
# generate an XML file that captures the structure of 
 | 
				
			||||
# the code including all documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_XML           = NO
 | 
				
			||||
 | 
				
			||||
# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `xml' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
XML_OUTPUT             = xml
 | 
				
			||||
 | 
				
			||||
# The XML_SCHEMA tag can be used to specify an XML schema, 
 | 
				
			||||
# which can be used by a validating XML parser to check the 
 | 
				
			||||
# syntax of the XML files.
 | 
				
			||||
 | 
				
			||||
XML_SCHEMA             = 
 | 
				
			||||
 | 
				
			||||
# The XML_DTD tag can be used to specify an XML DTD, 
 | 
				
			||||
# which can be used by a validating XML parser to check the 
 | 
				
			||||
# syntax of the XML files.
 | 
				
			||||
 | 
				
			||||
XML_DTD                = 
 | 
				
			||||
 | 
				
			||||
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
 | 
				
			||||
# dump the program listings (including syntax highlighting 
 | 
				
			||||
# and cross-referencing information) to the XML output. Note that 
 | 
				
			||||
# enabling this will significantly increase the size of the XML output.
 | 
				
			||||
 | 
				
			||||
XML_PROGRAMLISTING     = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options for the AutoGen Definitions output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
 | 
				
			||||
# generate an AutoGen Definitions (see autogen.sf.net) file 
 | 
				
			||||
# that captures the structure of the code including all 
 | 
				
			||||
# documentation. Note that this feature is still experimental 
 | 
				
			||||
# and incomplete at the moment.
 | 
				
			||||
 | 
				
			||||
GENERATE_AUTOGEN_DEF   = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the Perl module output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
 | 
				
			||||
# generate a Perl module file that captures the structure of 
 | 
				
			||||
# the code including all documentation. Note that this 
 | 
				
			||||
# feature is still experimental and incomplete at the 
 | 
				
			||||
# moment.
 | 
				
			||||
 | 
				
			||||
GENERATE_PERLMOD       = NO
 | 
				
			||||
 | 
				
			||||
# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
 | 
				
			||||
# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
 | 
				
			||||
# to generate PDF and DVI output from the Perl module output.
 | 
				
			||||
 | 
				
			||||
PERLMOD_LATEX          = NO
 | 
				
			||||
 | 
				
			||||
# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
 | 
				
			||||
# nicely formatted so it can be parsed by a human reader.  This is useful 
 | 
				
			||||
# if you want to understand what is going on.  On the other hand, if this 
 | 
				
			||||
# tag is set to NO the size of the Perl module output will be much smaller 
 | 
				
			||||
# and Perl will parse it just the same.
 | 
				
			||||
 | 
				
			||||
PERLMOD_PRETTY         = YES
 | 
				
			||||
 | 
				
			||||
# The names of the make variables in the generated doxyrules.make file 
 | 
				
			||||
# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
 | 
				
			||||
# This is useful so different doxyrules.make files included by the same 
 | 
				
			||||
# Makefile don't overwrite each other's variables.
 | 
				
			||||
 | 
				
			||||
PERLMOD_MAKEVAR_PREFIX = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration options related to the preprocessor   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# evaluate all C-preprocessor directives found in the sources and include 
 | 
				
			||||
# files.
 | 
				
			||||
 | 
				
			||||
ENABLE_PREPROCESSING   = YES
 | 
				
			||||
 | 
				
			||||
# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
 | 
				
			||||
# names in the source code. If set to NO (the default) only conditional 
 | 
				
			||||
# compilation will be performed. Macro expansion can be done in a controlled 
 | 
				
			||||
# way by setting EXPAND_ONLY_PREDEF to YES.
 | 
				
			||||
 | 
				
			||||
MACRO_EXPANSION        = YES
 | 
				
			||||
 | 
				
			||||
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
 | 
				
			||||
# then the macro expansion is limited to the macros specified with the 
 | 
				
			||||
# PREDEFINED and EXPAND_AS_DEFINED tags.
 | 
				
			||||
 | 
				
			||||
EXPAND_ONLY_PREDEF     = YES
 | 
				
			||||
 | 
				
			||||
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
 | 
				
			||||
# in the INCLUDE_PATH (see below) will be search if a #include is found.
 | 
				
			||||
 | 
				
			||||
SEARCH_INCLUDES        = YES
 | 
				
			||||
 | 
				
			||||
# The INCLUDE_PATH tag can be used to specify one or more directories that 
 | 
				
			||||
# contain include files that are not input files but should be processed by 
 | 
				
			||||
# the preprocessor.
 | 
				
			||||
 | 
				
			||||
INCLUDE_PATH           = 
 | 
				
			||||
 | 
				
			||||
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
 | 
				
			||||
# patterns (like *.h and *.hpp) to filter out the header-files in the 
 | 
				
			||||
# directories. If left blank, the patterns specified with FILE_PATTERNS will 
 | 
				
			||||
# be used.
 | 
				
			||||
 | 
				
			||||
INCLUDE_FILE_PATTERNS  = 
 | 
				
			||||
 | 
				
			||||
# The PREDEFINED tag can be used to specify one or more macro names that 
 | 
				
			||||
# are defined before the preprocessor is started (similar to the -D option of 
 | 
				
			||||
# gcc). The argument of the tag is a list of macros of the form: name 
 | 
				
			||||
# or name=definition (no spaces). If the definition and the = are 
 | 
				
			||||
# omitted =1 is assumed. To prevent a macro definition from being 
 | 
				
			||||
# undefined via #undef or recursively expanded use the := operator 
 | 
				
			||||
# instead of the = operator.
 | 
				
			||||
 | 
				
			||||
PREDEFINED             = __DOXYGEN__
 | 
				
			||||
 | 
				
			||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
 | 
				
			||||
# this tag can be used to specify a list of macro names that should be expanded. 
 | 
				
			||||
# The macro definition that is found in the sources will be used. 
 | 
				
			||||
# Use the PREDEFINED tag if you want to use a different macro definition.
 | 
				
			||||
 | 
				
			||||
EXPAND_AS_DEFINED      = BUTTLOADTAG
 | 
				
			||||
 | 
				
			||||
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
 | 
				
			||||
# doxygen's preprocessor will remove all function-like macros that are alone 
 | 
				
			||||
# on a line, have an all uppercase name, and do not end with a semicolon. Such 
 | 
				
			||||
# function macros are typically used for boiler-plate code, and will confuse 
 | 
				
			||||
# the parser if not removed.
 | 
				
			||||
 | 
				
			||||
SKIP_FUNCTION_MACROS   = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration::additions related to external references   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The TAGFILES option can be used to specify one or more tagfiles. 
 | 
				
			||||
# Optionally an initial location of the external documentation 
 | 
				
			||||
# can be added for each tagfile. The format of a tag file without 
 | 
				
			||||
# this location is as follows: 
 | 
				
			||||
#   TAGFILES = file1 file2 ... 
 | 
				
			||||
# Adding location for the tag files is done as follows: 
 | 
				
			||||
#   TAGFILES = file1=loc1 "file2 = loc2" ... 
 | 
				
			||||
# where "loc1" and "loc2" can be relative or absolute paths or 
 | 
				
			||||
# URLs. If a location is present for each tag, the installdox tool 
 | 
				
			||||
# does not have to be run to correct the links.
 | 
				
			||||
# Note that each tag file must have a unique name
 | 
				
			||||
# (where the name does NOT include the path)
 | 
				
			||||
# If a tag file is not located in the directory in which doxygen 
 | 
				
			||||
# is run, you must also specify the path to the tagfile here.
 | 
				
			||||
 | 
				
			||||
TAGFILES               = 
 | 
				
			||||
 | 
				
			||||
# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
 | 
				
			||||
# a tag file that is based on the input files it reads.
 | 
				
			||||
 | 
				
			||||
GENERATE_TAGFILE       = 
 | 
				
			||||
 | 
				
			||||
# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
 | 
				
			||||
# in the class index. If set to NO only the inherited external classes 
 | 
				
			||||
# will be listed.
 | 
				
			||||
 | 
				
			||||
ALLEXTERNALS           = NO
 | 
				
			||||
 | 
				
			||||
# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
 | 
				
			||||
# in the modules index. If set to NO, only the current project's groups will 
 | 
				
			||||
# be listed.
 | 
				
			||||
 | 
				
			||||
EXTERNAL_GROUPS        = YES
 | 
				
			||||
 | 
				
			||||
# The PERL_PATH should be the absolute path and name of the perl script 
 | 
				
			||||
# interpreter (i.e. the result of `which perl').
 | 
				
			||||
 | 
				
			||||
PERL_PATH              = /usr/bin/perl
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration options related to the dot tool   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
 | 
				
			||||
# or super classes. Setting the tag to NO turns the diagrams off. Note that 
 | 
				
			||||
# this option is superseded by the HAVE_DOT option below. This is only a 
 | 
				
			||||
# fallback. It is recommended to install and use dot, since it yields more 
 | 
				
			||||
# powerful graphs.
 | 
				
			||||
 | 
				
			||||
CLASS_DIAGRAMS         = NO
 | 
				
			||||
 | 
				
			||||
# You can define message sequence charts within doxygen comments using the \msc 
 | 
				
			||||
# command. Doxygen will then run the mscgen tool (see 
 | 
				
			||||
# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
 | 
				
			||||
# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
 | 
				
			||||
# the mscgen tool resides. If left empty the tool is assumed to be found in the 
 | 
				
			||||
# default search path.
 | 
				
			||||
 | 
				
			||||
MSCGEN_PATH            = 
 | 
				
			||||
 | 
				
			||||
# If set to YES, the inheritance and collaboration graphs will hide 
 | 
				
			||||
# inheritance and usage relations if the target is undocumented 
 | 
				
			||||
# or is not a class.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_RELATIONS   = YES
 | 
				
			||||
 | 
				
			||||
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
 | 
				
			||||
# available from the path. This tool is part of Graphviz, a graph visualization 
 | 
				
			||||
# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
 | 
				
			||||
# have no effect if this option is set to NO (the default)
 | 
				
			||||
 | 
				
			||||
HAVE_DOT               = NO
 | 
				
			||||
 | 
				
			||||
# By default doxygen will write a font called FreeSans.ttf to the output 
 | 
				
			||||
# directory and reference it in all dot files that doxygen generates. This 
 | 
				
			||||
# font does not include all possible unicode characters however, so when you need 
 | 
				
			||||
# these (or just want a differently looking font) you can specify the font name 
 | 
				
			||||
# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
 | 
				
			||||
# which can be done by putting it in a standard location or by setting the 
 | 
				
			||||
# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
 | 
				
			||||
# containing the font.
 | 
				
			||||
 | 
				
			||||
DOT_FONTNAME           = FreeSans
 | 
				
			||||
 | 
				
			||||
# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
 | 
				
			||||
# The default size is 10pt.
 | 
				
			||||
 | 
				
			||||
DOT_FONTSIZE           = 10
 | 
				
			||||
 | 
				
			||||
# By default doxygen will tell dot to use the output directory to look for the 
 | 
				
			||||
# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
 | 
				
			||||
# different font using DOT_FONTNAME you can set the path where dot 
 | 
				
			||||
# can find it using this tag.
 | 
				
			||||
 | 
				
			||||
DOT_FONTPATH           = 
 | 
				
			||||
 | 
				
			||||
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for each documented class showing the direct and 
 | 
				
			||||
# indirect inheritance relations. Setting this tag to YES will force the 
 | 
				
			||||
# the CLASS_DIAGRAMS tag to NO.
 | 
				
			||||
 | 
				
			||||
CLASS_GRAPH            = NO
 | 
				
			||||
 | 
				
			||||
# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for each documented class showing the direct and 
 | 
				
			||||
# indirect implementation dependencies (inheritance, containment, and 
 | 
				
			||||
# class references variables) of the class with other documented classes.
 | 
				
			||||
 | 
				
			||||
COLLABORATION_GRAPH    = NO
 | 
				
			||||
 | 
				
			||||
# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for groups, showing the direct groups dependencies
 | 
				
			||||
 | 
				
			||||
GROUP_GRAPHS           = NO
 | 
				
			||||
 | 
				
			||||
# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
 | 
				
			||||
# collaboration diagrams in a style similar to the OMG's Unified Modeling 
 | 
				
			||||
# Language.
 | 
				
			||||
 | 
				
			||||
UML_LOOK               = NO
 | 
				
			||||
 | 
				
			||||
# If set to YES, the inheritance and collaboration graphs will show the 
 | 
				
			||||
# relations between templates and their instances.
 | 
				
			||||
 | 
				
			||||
TEMPLATE_RELATIONS     = NO
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
 | 
				
			||||
# tags are set to YES then doxygen will generate a graph for each documented 
 | 
				
			||||
# file showing the direct and indirect include dependencies of the file with 
 | 
				
			||||
# other documented files.
 | 
				
			||||
 | 
				
			||||
INCLUDE_GRAPH          = NO
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
 | 
				
			||||
# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
 | 
				
			||||
# documented header file showing the documented files that directly or 
 | 
				
			||||
# indirectly include this file.
 | 
				
			||||
 | 
				
			||||
INCLUDED_BY_GRAPH      = NO
 | 
				
			||||
 | 
				
			||||
# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
 | 
				
			||||
# doxygen will generate a call dependency graph for every global function 
 | 
				
			||||
# or class method. Note that enabling this option will significantly increase 
 | 
				
			||||
# the time of a run. So in most cases it will be better to enable call graphs 
 | 
				
			||||
# for selected functions only using the \callgraph command.
 | 
				
			||||
 | 
				
			||||
CALL_GRAPH             = NO
 | 
				
			||||
 | 
				
			||||
# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
 | 
				
			||||
# doxygen will generate a caller dependency graph for every global function 
 | 
				
			||||
# or class method. Note that enabling this option will significantly increase 
 | 
				
			||||
# the time of a run. So in most cases it will be better to enable caller 
 | 
				
			||||
# graphs for selected functions only using the \callergraph command.
 | 
				
			||||
 | 
				
			||||
CALLER_GRAPH           = NO
 | 
				
			||||
 | 
				
			||||
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will graphical hierarchy of all classes instead of a textual one.
 | 
				
			||||
 | 
				
			||||
GRAPHICAL_HIERARCHY    = NO
 | 
				
			||||
 | 
				
			||||
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
 | 
				
			||||
# then doxygen will show the dependencies a directory has on other directories 
 | 
				
			||||
# in a graphical way. The dependency relations are determined by the #include
 | 
				
			||||
# relations between the files in the directories.
 | 
				
			||||
 | 
				
			||||
DIRECTORY_GRAPH        = NO
 | 
				
			||||
 | 
				
			||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
 | 
				
			||||
# generated by dot. Possible values are png, jpg, or gif
 | 
				
			||||
# If left blank png will be used.
 | 
				
			||||
 | 
				
			||||
DOT_IMAGE_FORMAT       = png
 | 
				
			||||
 | 
				
			||||
# The tag DOT_PATH can be used to specify the path where the dot tool can be 
 | 
				
			||||
# found. If left blank, it is assumed the dot tool can be found in the path.
 | 
				
			||||
 | 
				
			||||
DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"
 | 
				
			||||
 | 
				
			||||
# The DOTFILE_DIRS tag can be used to specify one or more directories that 
 | 
				
			||||
# contain dot files that are included in the documentation (see the 
 | 
				
			||||
# \dotfile command).
 | 
				
			||||
 | 
				
			||||
DOTFILE_DIRS           = 
 | 
				
			||||
 | 
				
			||||
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
 | 
				
			||||
# nodes that will be shown in the graph. If the number of nodes in a graph 
 | 
				
			||||
# becomes larger than this value, doxygen will truncate the graph, which is 
 | 
				
			||||
# visualized by representing a node as a red box. Note that doxygen if the 
 | 
				
			||||
# number of direct children of the root node in a graph is already larger than 
 | 
				
			||||
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
 | 
				
			||||
# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 | 
				
			||||
 | 
				
			||||
DOT_GRAPH_MAX_NODES    = 15
 | 
				
			||||
 | 
				
			||||
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
 | 
				
			||||
# graphs generated by dot. A depth value of 3 means that only nodes reachable 
 | 
				
			||||
# from the root by following a path via at most 3 edges will be shown. Nodes 
 | 
				
			||||
# that lay further from the root node will be omitted. Note that setting this 
 | 
				
			||||
# option to 1 or 2 may greatly reduce the computation time needed for large 
 | 
				
			||||
# code bases. Also note that the size of a graph can be further restricted by 
 | 
				
			||||
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
 | 
				
			||||
 | 
				
			||||
MAX_DOT_GRAPH_DEPTH    = 2
 | 
				
			||||
 | 
				
			||||
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
 | 
				
			||||
# background. This is disabled by default, because dot on Windows does not 
 | 
				
			||||
# seem to support this out of the box. Warning: Depending on the platform used, 
 | 
				
			||||
# enabling this option may lead to badly anti-aliased labels on the edges of 
 | 
				
			||||
# a graph (i.e. they become hard to read).
 | 
				
			||||
 | 
				
			||||
DOT_TRANSPARENT        = YES
 | 
				
			||||
 | 
				
			||||
# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
 | 
				
			||||
# files in one run (i.e. multiple -o and -T options on the command line). This 
 | 
				
			||||
# makes dot run faster, but since only newer versions of dot (>1.8.10) 
 | 
				
			||||
# support this, this feature is disabled by default.
 | 
				
			||||
 | 
				
			||||
DOT_MULTI_TARGETS      = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate a legend page explaining the meaning of the various boxes and 
 | 
				
			||||
# arrows in the dot generated graphs.
 | 
				
			||||
 | 
				
			||||
GENERATE_LEGEND        = YES
 | 
				
			||||
 | 
				
			||||
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# remove the intermediate dot files that are used to generate 
 | 
				
			||||
# the various graphs.
 | 
				
			||||
 | 
				
			||||
DOT_CLEANUP            = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration::additions related to the search engine   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The SEARCHENGINE tag specifies whether or not a search engine should be 
 | 
				
			||||
# used. If set to NO the values of all tags below this one will be ignored.
 | 
				
			||||
 | 
				
			||||
SEARCHENGINE           = NO
 | 
				
			||||
@ -0,0 +1,55 @@
 | 
				
			||||
;       Windows LUFA CDC Setup File
 | 
				
			||||
; Copyright (c) 2000 Microsoft Corporation
 | 
				
			||||
 | 
				
			||||
[Version] 
 | 
				
			||||
Signature="$Windows NT$" 
 | 
				
			||||
Class=Ports
 | 
				
			||||
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} 
 | 
				
			||||
Provider=%COMPANY% 
 | 
				
			||||
LayoutFile=layout.inf
 | 
				
			||||
DriverVer=06/06/2006,1.0.0.0
 | 
				
			||||
 | 
				
			||||
[Manufacturer] 
 | 
				
			||||
%MFGNAME% = ManufName
 | 
				
			||||
 | 
				
			||||
[DestinationDirs] 
 | 
				
			||||
DefaultDestDir=12 
 | 
				
			||||
 | 
				
			||||
[ManufName] 
 | 
				
			||||
%Modem3% = Modem3, USB\VID_03EB&PID_204A
 | 
				
			||||
 | 
				
			||||
;------------------------------------------------------------------------------
 | 
				
			||||
;  Windows 2000/XP Sections
 | 
				
			||||
;------------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
[Modem3.nt]
 | 
				
			||||
CopyFiles=USBModemCopyFileSection
 | 
				
			||||
AddReg=Modem3.nt.AddReg 
 | 
				
			||||
 | 
				
			||||
[USBModemCopyFileSection]
 | 
				
			||||
usbser.sys,,,0x20
 | 
				
			||||
 | 
				
			||||
[Modem3.nt.AddReg] 
 | 
				
			||||
HKR,,DevLoader,,*ntkern 
 | 
				
			||||
HKR,,NTMPDriver,,usbser.sys 
 | 
				
			||||
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" 
 | 
				
			||||
 | 
				
			||||
[Modem3.nt.Services] 
 | 
				
			||||
AddService=usbser, 0x00000002, DriverService
 | 
				
			||||
 | 
				
			||||
[DriverService] 
 | 
				
			||||
DisplayName=%SERVICE%
 | 
				
			||||
ServiceType=1
 | 
				
			||||
StartType=3
 | 
				
			||||
ErrorControl=1
 | 
				
			||||
ServiceBinary=%12%\usbser.sys 
 | 
				
			||||
 | 
				
			||||
;------------------------------------------------------------------------------
 | 
				
			||||
;  String Definitions
 | 
				
			||||
;------------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
[Strings] 
 | 
				
			||||
COMPANY="LUFA Library"
 | 
				
			||||
MFGNAME="Dean Camera"
 | 
				
			||||
Modem3="USB AVR109 Bootloader" 
 | 
				
			||||
SERVICE="USB Virtual Serial Port CDC Driver"
 | 
				
			||||
@ -0,0 +1,711 @@
 | 
				
			||||
# Hey Emacs, this is a -*- makefile -*-
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
 | 
				
			||||
#  >> Modified for use with the LUFA project. <<
 | 
				
			||||
#
 | 
				
			||||
# Released to the Public Domain
 | 
				
			||||
#
 | 
				
			||||
# Additional material for this makefile was written by:
 | 
				
			||||
# Peter Fleury
 | 
				
			||||
# Tim Henigan
 | 
				
			||||
# Colin O'Flynn
 | 
				
			||||
# Reiner Patommel
 | 
				
			||||
# Markus Pfaff
 | 
				
			||||
# Sander Pool
 | 
				
			||||
# Frederik Rouleau
 | 
				
			||||
# Carlos Lamas
 | 
				
			||||
# Dean Camera
 | 
				
			||||
# Opendous Inc.
 | 
				
			||||
# Denver Gingerich
 | 
				
			||||
#
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
# On command line:
 | 
				
			||||
#
 | 
				
			||||
# make all = Make software.
 | 
				
			||||
#
 | 
				
			||||
# make clean = Clean out built project files.
 | 
				
			||||
#
 | 
				
			||||
# make coff = Convert ELF to AVR COFF.
 | 
				
			||||
#
 | 
				
			||||
# make extcoff = Convert ELF to AVR Extended COFF.
 | 
				
			||||
#
 | 
				
			||||
# make program = Download the hex file to the device, using avrdude.
 | 
				
			||||
#                Please customize the avrdude settings below first!
 | 
				
			||||
#
 | 
				
			||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
 | 
				
			||||
#            have dfu-programmer installed).
 | 
				
			||||
#
 | 
				
			||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
 | 
				
			||||
#             have Atmel FLIP installed).
 | 
				
			||||
#
 | 
				
			||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
 | 
				
			||||
#               (must have dfu-programmer installed).
 | 
				
			||||
#
 | 
				
			||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
 | 
				
			||||
#                (must have Atmel FLIP installed).
 | 
				
			||||
#
 | 
				
			||||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
				
			||||
#                DoxyGen installed)
 | 
				
			||||
#
 | 
				
			||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
				
			||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
				
			||||
#
 | 
				
			||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
				
			||||
#
 | 
				
			||||
# make filename.i = Create a preprocessed source file for use in submitting
 | 
				
			||||
#                   bug reports to the GCC project.
 | 
				
			||||
#
 | 
				
			||||
# To rebuild project do "make clean" then "make all".
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# MCU name
 | 
				
			||||
MCU = at90usb1287
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Target board (see library BoardTypes.h documentation, USER or blank for projects not requiring
 | 
				
			||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called 
 | 
				
			||||
# "Board" inside the application directory.
 | 
				
			||||
BOARD  = USBKEY
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Processor frequency.
 | 
				
			||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
				
			||||
#     processor frequency. You can then use this symbol in your source code to 
 | 
				
			||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
				
			||||
#     automatically to create a 32-bit value in your source code.
 | 
				
			||||
#     Typical values are:
 | 
				
			||||
#         F_CPU =  1000000
 | 
				
			||||
#         F_CPU =  1843200
 | 
				
			||||
#         F_CPU =  2000000
 | 
				
			||||
#         F_CPU =  3686400
 | 
				
			||||
#         F_CPU =  4000000
 | 
				
			||||
#         F_CPU =  7372800
 | 
				
			||||
#         F_CPU =  8000000
 | 
				
			||||
#         F_CPU = 11059200
 | 
				
			||||
#         F_CPU = 14745600
 | 
				
			||||
#         F_CPU = 16000000
 | 
				
			||||
#         F_CPU = 18432000
 | 
				
			||||
#         F_CPU = 20000000
 | 
				
			||||
F_CPU = 8000000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Output format. (can be srec, ihex, binary)
 | 
				
			||||
FORMAT = ihex
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Target file name (without extension).
 | 
				
			||||
TARGET = BootloaderCDC
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Object files directory
 | 
				
			||||
#     To put object files in current directory, use a dot (.), do NOT make
 | 
				
			||||
#     this an empty or blank macro!
 | 
				
			||||
OBJDIR = .
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List C source files here. (C dependencies are automatically generated.)
 | 
				
			||||
SRC = $(TARGET).c                                          \
 | 
				
			||||
	  Descriptors.c                                        \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
 | 
				
			||||
	  
 | 
				
			||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
				
			||||
CPPSRC = 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List Assembler source files here.
 | 
				
			||||
#     Make them always end in a capital .S.  Files ending in a lowercase .s
 | 
				
			||||
#     will not be considered source files but generated files (assembler
 | 
				
			||||
#     output from the compiler), and will be deleted upon "make clean"!
 | 
				
			||||
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
 | 
				
			||||
#     it will preserve the spelling of the filenames, and gcc itself does
 | 
				
			||||
#     care about how the name is spelled on its command-line.
 | 
				
			||||
ASRC =
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
				
			||||
#     0 = turn off optimization. s = optimize for size.
 | 
				
			||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
				
			||||
OPT = s
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Debugging format.
 | 
				
			||||
#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
 | 
				
			||||
#     AVR Studio 4.10 requires dwarf-2.
 | 
				
			||||
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
 | 
				
			||||
DEBUG = dwarf-2
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List any extra directories to look for include files here.
 | 
				
			||||
#     Each directory must be seperated by a space.
 | 
				
			||||
#     Use forward slashes for directory separators.
 | 
				
			||||
#     For a directory that has spaces, enclose it in quotes.
 | 
				
			||||
EXTRAINCDIRS = ../../
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compiler flag to set the C Standard level.
 | 
				
			||||
#     c89   = "ANSI" C
 | 
				
			||||
#     gnu89 = c89 plus GCC extensions
 | 
				
			||||
#     c99   = ISO C99 standard (not yet fully implemented)
 | 
				
			||||
#     gnu99 = c99 plus GCC extensions
 | 
				
			||||
CSTANDARD = -std=gnu99
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Starting byte address of the bootloader
 | 
				
			||||
BOOT_START = 0x1E000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for C sources
 | 
				
			||||
CDEFS  = -DF_CPU=$(F_CPU)UL -DBOARD=BOARD_$(BOARD) -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DSTATIC_ENDPOINT_CONFIGURATION
 | 
				
			||||
CDEFS += -DUSB_DEVICE_ONLY -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
 | 
				
			||||
CDEFS += -DUSE_RAM_DESCRIPTORS -DBOOT_START_ADDR=$(BOOT_START)UL -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for ASM sources
 | 
				
			||||
ADEFS = -DF_CPU=$(F_CPU)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for C++ sources
 | 
				
			||||
CPPDEFS = -DF_CPU=$(F_CPU)UL
 | 
				
			||||
#CPPDEFS += -D__STDC_LIMIT_MACROS
 | 
				
			||||
#CPPDEFS += -D__STDC_CONSTANT_MACROS
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Compiler Options C ----------------
 | 
				
			||||
#  -g*:          generate debugging information
 | 
				
			||||
#  -O*:          optimization level
 | 
				
			||||
#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
				
			||||
#  -Wall...:     warning level
 | 
				
			||||
#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
				
			||||
#    -adhlns...: create assembler listing
 | 
				
			||||
CFLAGS = -g$(DEBUG)
 | 
				
			||||
CFLAGS += $(CDEFS)
 | 
				
			||||
CFLAGS += -O$(OPT)
 | 
				
			||||
CFLAGS += -funsigned-char
 | 
				
			||||
CFLAGS += -funsigned-bitfields
 | 
				
			||||
CFLAGS += -ffunction-sections
 | 
				
			||||
CFLAGS += -fpack-struct
 | 
				
			||||
CFLAGS += -fshort-enums
 | 
				
			||||
CFLAGS += -fno-inline-small-functions
 | 
				
			||||
CFLAGS += -fno-reorder-blocks
 | 
				
			||||
CFLAGS += -fno-reorder-blocks-and-partition
 | 
				
			||||
CFLAGS += -fno-reorder-functions
 | 
				
			||||
CFLAGS += -fno-toplevel-reorder
 | 
				
			||||
CFLAGS += -Wall
 | 
				
			||||
CFLAGS += -Wstrict-prototypes
 | 
				
			||||
CFLAGS += -Wundef
 | 
				
			||||
#CFLAGS += -fno-unit-at-a-time
 | 
				
			||||
#CFLAGS += -Wunreachable-code
 | 
				
			||||
#CFLAGS += -Wsign-compare
 | 
				
			||||
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
 | 
				
			||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
				
			||||
CFLAGS += $(CSTANDARD)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Compiler Options C++ ----------------
 | 
				
			||||
#  -g*:          generate debugging information
 | 
				
			||||
#  -O*:          optimization level
 | 
				
			||||
#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
				
			||||
#  -Wall...:     warning level
 | 
				
			||||
#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
				
			||||
#    -adhlns...: create assembler listing
 | 
				
			||||
CPPFLAGS = -g$(DEBUG)
 | 
				
			||||
CPPFLAGS += $(CPPDEFS)
 | 
				
			||||
CPPFLAGS += -O$(OPT)
 | 
				
			||||
CPPFLAGS += -funsigned-char
 | 
				
			||||
CPPFLAGS += -funsigned-bitfields
 | 
				
			||||
CPPFLAGS += -fpack-struct
 | 
				
			||||
CPPFLAGS += -fshort-enums
 | 
				
			||||
CPPFLAGS += -fno-exceptions
 | 
				
			||||
CPPFLAGS += -Wall
 | 
				
			||||
CFLAGS += -Wundef
 | 
				
			||||
#CPPFLAGS += -mshort-calls
 | 
				
			||||
#CPPFLAGS += -fno-unit-at-a-time
 | 
				
			||||
#CPPFLAGS += -Wstrict-prototypes
 | 
				
			||||
#CPPFLAGS += -Wunreachable-code
 | 
				
			||||
#CPPFLAGS += -Wsign-compare
 | 
				
			||||
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
 | 
				
			||||
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
				
			||||
#CPPFLAGS += $(CSTANDARD)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Assembler Options ----------------
 | 
				
			||||
#  -Wa,...:   tell GCC to pass this to the assembler.
 | 
				
			||||
#  -adhlns:   create listing
 | 
				
			||||
#  -gstabs:   have the assembler create line number information; note that
 | 
				
			||||
#             for use in COFF files, additional information about filenames
 | 
				
			||||
#             and function names needs to be present in the assembler source
 | 
				
			||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
				
			||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
				
			||||
#       dump that will be displayed for a given single line of source input.
 | 
				
			||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Library Options ----------------
 | 
				
			||||
# Minimalistic printf version
 | 
				
			||||
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
				
			||||
 | 
				
			||||
# Floating point printf version (requires MATH_LIB = -lm below)
 | 
				
			||||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
				
			||||
 | 
				
			||||
# If this is left blank, then it will use the Standard printf version.
 | 
				
			||||
PRINTF_LIB = 
 | 
				
			||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
				
			||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Minimalistic scanf version
 | 
				
			||||
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
				
			||||
 | 
				
			||||
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
 | 
				
			||||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
				
			||||
 | 
				
			||||
# If this is left blank, then it will use the Standard scanf version.
 | 
				
			||||
SCANF_LIB = 
 | 
				
			||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
				
			||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
MATH_LIB = -lm
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List any extra directories to look for libraries here.
 | 
				
			||||
#     Each directory must be seperated by a space.
 | 
				
			||||
#     Use forward slashes for directory separators.
 | 
				
			||||
#     For a directory that has spaces, enclose it in quotes.
 | 
				
			||||
EXTRALIBDIRS = 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- External Memory Options ----------------
 | 
				
			||||
 | 
				
			||||
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
				
			||||
# used for variables (.data/.bss) and heap (malloc()).
 | 
				
			||||
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
 | 
				
			||||
 | 
				
			||||
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
				
			||||
# only used for heap (malloc()).
 | 
				
			||||
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
 | 
				
			||||
 | 
				
			||||
EXTMEMOPTS =
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Linker Options ----------------
 | 
				
			||||
#  -Wl,...:     tell GCC to pass this to linker.
 | 
				
			||||
#    -Map:      create map file
 | 
				
			||||
#    --cref:    add cross reference to  map file
 | 
				
			||||
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 | 
				
			||||
LDFLAGS += -Wl,--relax
 | 
				
			||||
LDFLAGS += -Wl,--gc-sections
 | 
				
			||||
LDFLAGS += -Wl,--section-start=.text=$(BOOT_START)
 | 
				
			||||
LDFLAGS += $(EXTMEMOPTS)
 | 
				
			||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
				
			||||
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
 | 
				
			||||
#LDFLAGS += -T linker_script.x
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Programming Options (avrdude) ----------------
 | 
				
			||||
 | 
				
			||||
# Programming hardware: alf avr910 avrisp bascom bsd 
 | 
				
			||||
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
 | 
				
			||||
#
 | 
				
			||||
# Type: avrdude -c ?
 | 
				
			||||
# to get a full listing.
 | 
				
			||||
#
 | 
				
			||||
AVRDUDE_PROGRAMMER = jtagmkII
 | 
				
			||||
 | 
				
			||||
# com1 = serial port. Use lpt1 to connect to parallel port.
 | 
				
			||||
AVRDUDE_PORT = usb
 | 
				
			||||
 | 
				
			||||
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
				
			||||
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Uncomment the following if you want avrdude's erase cycle counter.
 | 
				
			||||
# Note that this counter needs to be initialized first using -Yn,
 | 
				
			||||
# see avrdude manual.
 | 
				
			||||
#AVRDUDE_ERASE_COUNTER = -y
 | 
				
			||||
 | 
				
			||||
# Uncomment the following if you do /not/ wish a verification to be
 | 
				
			||||
# performed after programming the device.
 | 
				
			||||
#AVRDUDE_NO_VERIFY = -V
 | 
				
			||||
 | 
				
			||||
# Increase verbosity level.  Please use this when submitting bug
 | 
				
			||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
				
			||||
# to submit bug reports.
 | 
				
			||||
#AVRDUDE_VERBOSE = -v -v
 | 
				
			||||
 | 
				
			||||
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Debugging Options ----------------
 | 
				
			||||
 | 
				
			||||
# For simulavr only - target MCU frequency.
 | 
				
			||||
DEBUG_MFREQ = $(F_CPU)
 | 
				
			||||
 | 
				
			||||
# Set the DEBUG_UI to either gdb or insight.
 | 
				
			||||
# DEBUG_UI = gdb
 | 
				
			||||
DEBUG_UI = insight
 | 
				
			||||
 | 
				
			||||
# Set the debugging back-end to either avarice, simulavr.
 | 
				
			||||
DEBUG_BACKEND = avarice
 | 
				
			||||
#DEBUG_BACKEND = simulavr
 | 
				
			||||
 | 
				
			||||
# GDB Init Filename.
 | 
				
			||||
GDBINIT_FILE = __avr_gdbinit
 | 
				
			||||
 | 
				
			||||
# When using avarice settings for the JTAG
 | 
				
			||||
JTAG_DEV = /dev/com1
 | 
				
			||||
 | 
				
			||||
# Debugging port used to communicate between GDB / avarice / simulavr.
 | 
				
			||||
DEBUG_PORT = 4242
 | 
				
			||||
 | 
				
			||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
				
			||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
				
			||||
#     avarice is running on a different computer.
 | 
				
			||||
DEBUG_HOST = localhost
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#============================================================================
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Define programs and commands.
 | 
				
			||||
SHELL = sh
 | 
				
			||||
CC = avr-gcc
 | 
				
			||||
OBJCOPY = avr-objcopy
 | 
				
			||||
OBJDUMP = avr-objdump
 | 
				
			||||
SIZE = avr-size
 | 
				
			||||
AR = avr-ar rcs
 | 
				
			||||
NM = avr-nm
 | 
				
			||||
AVRDUDE = avrdude
 | 
				
			||||
REMOVE = rm -f
 | 
				
			||||
REMOVEDIR = rm -rf
 | 
				
			||||
COPY = cp
 | 
				
			||||
WINSHELL = cmd
 | 
				
			||||
 | 
				
			||||
# Define Messages
 | 
				
			||||
# English
 | 
				
			||||
MSG_ERRORS_NONE = Errors: none
 | 
				
			||||
MSG_BEGIN = -------- begin --------
 | 
				
			||||
MSG_END = --------  end  --------
 | 
				
			||||
MSG_SIZE_BEFORE = Size before: 
 | 
				
			||||
MSG_SIZE_AFTER = Size after:
 | 
				
			||||
MSG_COFF = Converting to AVR COFF:
 | 
				
			||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
				
			||||
MSG_FLASH = Creating load file for Flash:
 | 
				
			||||
MSG_EEPROM = Creating load file for EEPROM:
 | 
				
			||||
MSG_EXTENDED_LISTING = Creating Extended Listing:
 | 
				
			||||
MSG_SYMBOL_TABLE = Creating Symbol Table:
 | 
				
			||||
MSG_LINKING = Linking:
 | 
				
			||||
MSG_COMPILING = Compiling C:
 | 
				
			||||
MSG_COMPILING_CPP = Compiling C++:
 | 
				
			||||
MSG_ASSEMBLING = Assembling:
 | 
				
			||||
MSG_CLEANING = Cleaning project:
 | 
				
			||||
MSG_CREATING_LIBRARY = Creating library:
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Define all object files.
 | 
				
			||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
				
			||||
 | 
				
			||||
# Define all listing files.
 | 
				
			||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compiler flags to generate dependency files.
 | 
				
			||||
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Combine all necessary flags and optional flags.
 | 
				
			||||
# Add target processor to flags.
 | 
				
			||||
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
 | 
				
			||||
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
 | 
				
			||||
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Default target.
 | 
				
			||||
all: begin gccversion sizebefore build checkhooks checklibmode sizeafter end
 | 
				
			||||
 | 
				
			||||
# Change the build target to build a HEX file or a library.
 | 
				
			||||
build: elf hex eep lss sym
 | 
				
			||||
#build: lib
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
elf: $(TARGET).elf
 | 
				
			||||
hex: $(TARGET).hex
 | 
				
			||||
eep: $(TARGET).eep
 | 
				
			||||
lss: $(TARGET).lss
 | 
				
			||||
sym: $(TARGET).sym
 | 
				
			||||
LIBNAME=lib$(TARGET).a
 | 
				
			||||
lib: $(LIBNAME)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Eye candy.
 | 
				
			||||
# AVR Studio 3.x does not check make's exit code but relies on
 | 
				
			||||
# the following magic strings to be generated by the compile job.
 | 
				
			||||
begin:
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_BEGIN)
 | 
				
			||||
 | 
				
			||||
end:
 | 
				
			||||
	@echo $(MSG_END)
 | 
				
			||||
	@echo
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Display size of file.
 | 
				
			||||
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
 | 
				
			||||
ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf
 | 
				
			||||
MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )
 | 
				
			||||
FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )
 | 
				
			||||
 | 
				
			||||
sizebefore:
 | 
				
			||||
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
 | 
				
			||||
	2>/dev/null; echo; fi
 | 
				
			||||
 | 
				
			||||
sizeafter:
 | 
				
			||||
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
 | 
				
			||||
	2>/dev/null; echo; fi
 | 
				
			||||
 | 
				
			||||
checkhooks: build
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo ------- Unhooked LUFA Events -------
 | 
				
			||||
	@$(shell) (grep -s '^Event.*LUFA/.*\\.o' $(TARGET).map | \
 | 
				
			||||
	           cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \
 | 
				
			||||
			   echo "(None)"
 | 
				
			||||
	@echo ----- End Unhooked LUFA Events -----
 | 
				
			||||
	
 | 
				
			||||
checklibmode:
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo ----------- Library Mode -----------
 | 
				
			||||
	@$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \
 | 
				
			||||
	          | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \
 | 
				
			||||
	          || echo "No specific mode (both device and host mode allowable)."
 | 
				
			||||
	@echo ------------------------------------
 | 
				
			||||
 | 
				
			||||
# Display compiler version information.
 | 
				
			||||
gccversion : 
 | 
				
			||||
	@$(CC) --version
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Program the device.  
 | 
				
			||||
program: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
				
			||||
 | 
				
			||||
flip: $(TARGET).hex
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation erase f
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation start reset 0
 | 
				
			||||
 | 
				
			||||
dfu: $(TARGET).hex
 | 
				
			||||
	dfu-programmer $(MCU) erase
 | 
				
			||||
	dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex
 | 
				
			||||
	dfu-programmer $(MCU) reset
 | 
				
			||||
 | 
				
			||||
flip-ee: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	copy $(TARGET).eep $(TARGET)eep.hex
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation start reset 0
 | 
				
			||||
 | 
				
			||||
dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	dfu-programmer $(MCU) erase
 | 
				
			||||
	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
 | 
				
			||||
	dfu-programmer $(MCU) reset
 | 
				
			||||
 | 
				
			||||
# Generate avr-gdb config/init file which does the following:
 | 
				
			||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
				
			||||
#     a breakpoint at main().
 | 
				
			||||
gdb-config: 
 | 
				
			||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
				
			||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo end >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
 | 
				
			||||
ifeq ($(DEBUG_BACKEND),simulavr)
 | 
				
			||||
	@echo load  >> $(GDBINIT_FILE)
 | 
				
			||||
endif
 | 
				
			||||
	@echo break main >> $(GDBINIT_FILE)
 | 
				
			||||
 | 
				
			||||
debug: gdb-config $(TARGET).elf
 | 
				
			||||
ifeq ($(DEBUG_BACKEND), avarice)
 | 
				
			||||
	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
 | 
				
			||||
	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
 | 
				
			||||
	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
 | 
				
			||||
	@$(WINSHELL) /c pause
 | 
				
			||||
 | 
				
			||||
else
 | 
				
			||||
	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
 | 
				
			||||
	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
 | 
				
			||||
endif
 | 
				
			||||
	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
 | 
				
			||||
COFFCONVERT = $(OBJCOPY) --debugging
 | 
				
			||||
COFFCONVERT += --change-section-address .data-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .bss-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .noinit-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .eeprom-0x810000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
coff: $(TARGET).elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COFF) $(TARGET).cof
 | 
				
			||||
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
extcoff: $(TARGET).elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
 | 
				
			||||
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create final output files (.hex, .eep) from ELF output file.
 | 
				
			||||
%.hex: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_FLASH) $@
 | 
				
			||||
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 | 
				
			||||
 | 
				
			||||
%.eep: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EEPROM) $@
 | 
				
			||||
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
 | 
				
			||||
	--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
 | 
				
			||||
 | 
				
			||||
# Create extended listing file from ELF output file.
 | 
				
			||||
%.lss: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EXTENDED_LISTING) $@
 | 
				
			||||
	$(OBJDUMP) -h -z -S $< > $@
 | 
				
			||||
 | 
				
			||||
# Create a symbol table from ELF output file.
 | 
				
			||||
%.sym: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_SYMBOL_TABLE) $@
 | 
				
			||||
	$(NM) -n $< > $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create library from object files.
 | 
				
			||||
.SECONDARY : $(TARGET).a
 | 
				
			||||
.PRECIOUS : $(OBJ)
 | 
				
			||||
%.a: $(OBJ)
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_CREATING_LIBRARY) $@
 | 
				
			||||
	$(AR) $@ $(OBJ)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Link: create ELF output file from object files.
 | 
				
			||||
.SECONDARY : $(TARGET).elf
 | 
				
			||||
.PRECIOUS : $(OBJ)
 | 
				
			||||
%.elf: $(OBJ)
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_LINKING) $@
 | 
				
			||||
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create object files from C source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.c
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COMPILING) $<
 | 
				
			||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create object files from C++ source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.cpp
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
				
			||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create assembler files from C source files.
 | 
				
			||||
%.s : %.c
 | 
				
			||||
	$(CC) -S $(ALL_CFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create assembler files from C++ source files.
 | 
				
			||||
%.s : %.cpp
 | 
				
			||||
	$(CC) -S $(ALL_CPPFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Assemble: create object files from assembler source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.S
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_ASSEMBLING) $<
 | 
				
			||||
	$(CC) -c $(ALL_ASFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create preprocessed source for use in sending a bug report.
 | 
				
			||||
%.i : %.c
 | 
				
			||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
				
			||||
	
 | 
				
			||||
 | 
				
			||||
# Target: clean project.
 | 
				
			||||
clean: begin clean_list clean_binary end
 | 
				
			||||
 | 
				
			||||
clean_binary:
 | 
				
			||||
	$(REMOVE) $(TARGET).hex
 | 
				
			||||
 | 
				
			||||
clean_list:
 | 
				
			||||
	@echo $(MSG_CLEANING)
 | 
				
			||||
	$(REMOVE) $(TARGET).eep
 | 
				
			||||
	$(REMOVE) $(TARGET).cof
 | 
				
			||||
	$(REMOVE) $(TARGET).elf
 | 
				
			||||
	$(REMOVE) $(TARGET).map
 | 
				
			||||
	$(REMOVE) $(TARGET).sym
 | 
				
			||||
	$(REMOVE) $(TARGET).lss
 | 
				
			||||
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
 | 
				
			||||
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.s)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.d)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.i)
 | 
				
			||||
	$(REMOVEDIR) .dep
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
doxygen:
 | 
				
			||||
	@echo Generating Project Documentation...
 | 
				
			||||
	@doxygen Doxygen.conf
 | 
				
			||||
	@echo Documentation Generation Complete.
 | 
				
			||||
	
 | 
				
			||||
clean_doxygen:
 | 
				
			||||
	rm -rf Documentation
 | 
				
			||||
 | 
				
			||||
# Create object files directory
 | 
				
			||||
$(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Include the dependency files.
 | 
				
			||||
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Listing of phony targets.
 | 
				
			||||
.PHONY : all checkhooks checklibmode begin  \
 | 
				
			||||
finish end sizebefore sizeafter gccversion  \
 | 
				
			||||
build elf hex eep lss sym coff extcoff      \
 | 
				
			||||
clean clean_list clean_binary program debug \
 | 
				
			||||
gdb-config doxygen
 | 
				
			||||
@ -0,0 +1 @@
 | 
				
			||||
<AVRStudio><MANAGEMENT><ProjectName>BootloaderDFU</ProjectName><Created>30-Sep-2008 14:20:47</Created><LastEdit>30-Sep-2008 14:21:00</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:20:47</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Bootloaders\DFU\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>BootloaderDFU.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>BootloaderDFU.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>BootloaderDFU.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
 | 
				
			||||
@ -0,0 +1,692 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Main source file for the DFU class bootloader. This file contains the complete bootloader logic.
 | 
				
			||||
 */
 | 
				
			||||
 
 | 
				
			||||
/** Configuration define. Define this token to true to case the bootloader to reject all memory commands
 | 
				
			||||
 *  until a memory erase has been performed. When used in conjunction with the lockbits of the AVR, this
 | 
				
			||||
 *  can protect the AVR's firmware from being dumped from a secured AVR. When false, memory operations are
 | 
				
			||||
 *  allowed at any time.
 | 
				
			||||
 */
 | 
				
			||||
#define SECURE_MODE           false
 | 
				
			||||
 | 
				
			||||
#define  INCLUDE_FROM_BOOTLOADER_C
 | 
				
			||||
#include "BootloaderDFU.h"
 | 
				
			||||
 | 
				
			||||
/** Flag to indicate if the bootloader is currently running in secure mode, disallowing memory operations
 | 
				
			||||
 *  other than erase. This is initially set to the value set by SECURE_MODE, and cleared by the bootloader
 | 
				
			||||
 *  once a memory erase has completed.
 | 
				
			||||
 */
 | 
				
			||||
bool IsSecure      = SECURE_MODE;
 | 
				
			||||
 | 
				
			||||
/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
 | 
				
			||||
 *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
 | 
				
			||||
 *  jumped to via an indirect jump to location 0x0000 (or other location specified by the host).
 | 
				
			||||
 */
 | 
				
			||||
bool RunBootloader = true;
 | 
				
			||||
 | 
				
			||||
/** Flag to indicate if the bootloader is waiting to exit. When the host requests the bootloader to exit and
 | 
				
			||||
 *  jump to the application address it specifies, it sends two sequential commands which must be properly
 | 
				
			||||
 *  acknowedged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set,
 | 
				
			||||
 *  causing the bootloader to wait for the final exit command before shutting down.
 | 
				
			||||
 */
 | 
				
			||||
bool WaitForExit = false;
 | 
				
			||||
 | 
				
			||||
/** Current DFU state machine state, one of the values in the DFU_State_t enum. */
 | 
				
			||||
uint8_t DFU_State = dfuIDLE;
 | 
				
			||||
 | 
				
			||||
/** Status code of the last executed DFU command. This is set to one of the values in the DFU_Status_t enum after
 | 
				
			||||
 *  each operation, and returned to the host when a Get Status DFU request is issued.
 | 
				
			||||
 */
 | 
				
			||||
uint8_t DFU_Status = OK;
 | 
				
			||||
 | 
				
			||||
/** Data containing the DFU command sent from the host. */
 | 
				
			||||
DFU_Command_t SentCommand;
 | 
				
			||||
 | 
				
			||||
/** Response to the last issued Read Data DFU command. Unlike other DFU commands, the read command
 | 
				
			||||
 *  requires a single byte response from the bootloader containing the read data when the next DFU_UPLOAD command
 | 
				
			||||
 *  is issued by the host.
 | 
				
			||||
 */
 | 
				
			||||
uint8_t ResponseByte;
 | 
				
			||||
 | 
				
			||||
/** Pointer to the start of the user application. By default this is 0x0000 (the reset vector), however the host
 | 
				
			||||
 *  may specify an alternate address when issuing the application soft-start command.
 | 
				
			||||
 */
 | 
				
			||||
AppPtr_t AppStartPtr = (AppPtr_t)0x0000;
 | 
				
			||||
 | 
				
			||||
/** 64-bit flash page number. This is concatenated with the current 16-bit address on USB AVRs containing more than
 | 
				
			||||
 *  64KB of flash memory.
 | 
				
			||||
 */
 | 
				
			||||
uint8_t Flash64KBPage = 0;
 | 
				
			||||
 | 
				
			||||
/** Memory start address, indicating the current address in the memory being addressed (either FLASH or EEPROM
 | 
				
			||||
 *  depending on the issued command from the host).
 | 
				
			||||
 */
 | 
				
			||||
uint16_t StartAddr = 0x0000;
 | 
				
			||||
 | 
				
			||||
/** Memory end address, indicating the end address to read to/write from in the memory being addressed (either FLASH
 | 
				
			||||
 *  of EEPROM depending on the issued command from the host).
 | 
				
			||||
 */
 | 
				
			||||
uint16_t EndAddr = 0x0000;
 | 
				
			||||
 | 
				
			||||
/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously 
 | 
				
			||||
 *  runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start
 | 
				
			||||
 *  the loaded application code.
 | 
				
			||||
 */
 | 
				
			||||
int main (void)
 | 
				
			||||
{
 | 
				
			||||
	/* Disable watchdog if enabled by bootloader/fuses */
 | 
				
			||||
	MCUSR &= ~(1 << WDRF);
 | 
				
			||||
	wdt_disable();
 | 
				
			||||
 | 
				
			||||
	/* Disable Clock Division */
 | 
				
			||||
	SetSystemClockPrescaler(0);
 | 
				
			||||
	
 | 
				
			||||
	/* Relocate the interrupt vector table to the bootloader section */
 | 
				
			||||
	MCUCR = (1 << IVCE);
 | 
				
			||||
	MCUCR = (1 << IVSEL);
 | 
				
			||||
 | 
				
			||||
	/* Initialize the USB subsystem */
 | 
				
			||||
	USB_Init();
 | 
				
			||||
 | 
				
			||||
	/* Run the USB management task while the bootloader is supposed to be running */
 | 
				
			||||
	while (RunBootloader || WaitForExit)
 | 
				
			||||
	  USB_USBTask();
 | 
				
			||||
	
 | 
				
			||||
	/* Shut down the USB subsystem */
 | 
				
			||||
	USB_ShutDown();
 | 
				
			||||
	
 | 
				
			||||
	/* Relocate the interrupt vector table back to the application section */
 | 
				
			||||
	MCUCR = (1 << IVCE);
 | 
				
			||||
	MCUCR = 0;
 | 
				
			||||
 | 
				
			||||
	/* Reset any used hardware ports back to their defaults */
 | 
				
			||||
	PORTD = 0;
 | 
				
			||||
	DDRD  = 0;
 | 
				
			||||
	
 | 
				
			||||
	#if defined(PORTE)
 | 
				
			||||
	PORTE = 0;
 | 
				
			||||
	DDRE  = 0;
 | 
				
			||||
	#endif
 | 
				
			||||
	
 | 
				
			||||
	/* Start the user application */
 | 
				
			||||
	AppStartPtr();
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Event handler for the USB_Disconnect event. This indicates that the bootloader should exit and the user
 | 
				
			||||
 *  application started.
 | 
				
			||||
 */
 | 
				
			||||
EVENT_HANDLER(USB_Disconnect)
 | 
				
			||||
{
 | 
				
			||||
	/* Upon disconnection, run user application */
 | 
				
			||||
	RunBootloader = false;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific
 | 
				
			||||
 *  control requests that are not handled internally by the USB library (including the DFU commands, which are
 | 
				
			||||
 *  all issued via the control endpoint), so that they can be handled appropriately for the application.
 | 
				
			||||
 */
 | 
				
			||||
EVENT_HANDLER(USB_UnhandledControlPacket)
 | 
				
			||||
{
 | 
				
			||||
	/* Discard unused wIndex value */
 | 
				
			||||
	Endpoint_Discard_Word();
 | 
				
			||||
	
 | 
				
			||||
	/* Discard unused wValue value */
 | 
				
			||||
	Endpoint_Discard_Word();
 | 
				
			||||
 | 
				
			||||
	/* Get the size of the command and data from the wLength value */
 | 
				
			||||
	SentCommand.DataSize = Endpoint_Read_Word_LE();
 | 
				
			||||
 | 
				
			||||
	switch (bRequest)
 | 
				
			||||
	{
 | 
				
			||||
		case DFU_DNLOAD:
 | 
				
			||||
			Endpoint_ClearSetupReceived();
 | 
				
			||||
			
 | 
				
			||||
			/* Check if bootloader is waiting to terminate */
 | 
				
			||||
			if (WaitForExit)
 | 
				
			||||
			{
 | 
				
			||||
				/* Bootloader is terminating - process last received command */
 | 
				
			||||
				ProcessBootloaderCommand();
 | 
				
			||||
				
 | 
				
			||||
				/* Indicate that the last command has now been processed - free to exit bootloader */
 | 
				
			||||
				WaitForExit = false;
 | 
				
			||||
			}
 | 
				
			||||
			  
 | 
				
			||||
			/* If the request has a data stage, load it into the command struct */
 | 
				
			||||
			if (SentCommand.DataSize)
 | 
				
			||||
			{
 | 
				
			||||
				while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
 | 
				
			||||
				/* First byte of the data stage is the DNLOAD request's command */
 | 
				
			||||
				SentCommand.Command = Endpoint_Read_Byte();
 | 
				
			||||
					
 | 
				
			||||
				/* One byte of the data stage is the command, so subtract it from the total data bytes */
 | 
				
			||||
				SentCommand.DataSize--;
 | 
				
			||||
				
 | 
				
			||||
				/* Load in the rest of the data stage as command parameters */
 | 
				
			||||
				for (uint8_t DataByte = 0; (DataByte < sizeof(SentCommand.Data)) &&
 | 
				
			||||
				     Endpoint_BytesInEndpoint(); DataByte++)
 | 
				
			||||
				{
 | 
				
			||||
					SentCommand.Data[DataByte] = Endpoint_Read_Byte();
 | 
				
			||||
					SentCommand.DataSize--;
 | 
				
			||||
				}
 | 
				
			||||
				
 | 
				
			||||
				/* Process the command */
 | 
				
			||||
				ProcessBootloaderCommand();
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			/* Check if currently downloading firmware */
 | 
				
			||||
			if (DFU_State == dfuDNLOAD_IDLE)
 | 
				
			||||
			{									
 | 
				
			||||
				if (!(SentCommand.DataSize))
 | 
				
			||||
				{
 | 
				
			||||
					DFU_State = dfuIDLE;
 | 
				
			||||
				}
 | 
				
			||||
				else
 | 
				
			||||
				{
 | 
				
			||||
					/* Throw away the filler bytes before the start of the firmware */
 | 
				
			||||
					DiscardFillerBytes(DFU_FILLER_BYTES_SIZE);
 | 
				
			||||
 | 
				
			||||
					/* Throw away the page alignment filler bytes before the start of the firmware */
 | 
				
			||||
					DiscardFillerBytes(StartAddr % SPM_PAGESIZE);
 | 
				
			||||
					
 | 
				
			||||
					/* Calculate the number of bytes remaining to be written */
 | 
				
			||||
					uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1);
 | 
				
			||||
					
 | 
				
			||||
					if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00))        // Write flash
 | 
				
			||||
					{
 | 
				
			||||
						/* Calculate the number of words to be written from the number of bytes to be written */
 | 
				
			||||
						uint16_t WordsRemaining = (BytesRemaining >> 1);
 | 
				
			||||
					
 | 
				
			||||
						union
 | 
				
			||||
						{
 | 
				
			||||
							uint16_t Words[2];
 | 
				
			||||
							uint32_t Long;
 | 
				
			||||
						} CurrFlashAddress                 = {Words: {StartAddr, Flash64KBPage}};
 | 
				
			||||
						
 | 
				
			||||
						uint32_t CurrFlashPageStartAddress = CurrFlashAddress.Long;
 | 
				
			||||
						uint8_t  WordsInFlashPage          = 0;
 | 
				
			||||
 | 
				
			||||
						while (WordsRemaining--)
 | 
				
			||||
						{
 | 
				
			||||
							/* Check if endpoint is empty - if so clear it and wait until ready for next packet */
 | 
				
			||||
							if (!(Endpoint_BytesInEndpoint()))
 | 
				
			||||
							{
 | 
				
			||||
								Endpoint_ClearSetupOUT();
 | 
				
			||||
								while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
							}
 | 
				
			||||
 | 
				
			||||
							/* Write the next word into the current flash page */
 | 
				
			||||
							boot_page_fill(CurrFlashAddress.Long, Endpoint_Read_Word_LE());
 | 
				
			||||
 | 
				
			||||
							/* Adjust counters */
 | 
				
			||||
							WordsInFlashPage      += 1;
 | 
				
			||||
							CurrFlashAddress.Long += 2;
 | 
				
			||||
 | 
				
			||||
							/* See if an entire page has been written to the flash page buffer */
 | 
				
			||||
							if ((WordsInFlashPage == (SPM_PAGESIZE >> 1)) || !(WordsRemaining))
 | 
				
			||||
							{
 | 
				
			||||
								/* Commit the flash page to memory */
 | 
				
			||||
								boot_page_write(CurrFlashPageStartAddress);
 | 
				
			||||
								boot_spm_busy_wait();
 | 
				
			||||
								
 | 
				
			||||
								/* Check if programming incomplete */
 | 
				
			||||
								if (WordsRemaining)
 | 
				
			||||
								{
 | 
				
			||||
									CurrFlashPageStartAddress = CurrFlashAddress.Long;
 | 
				
			||||
									WordsInFlashPage          = 0;
 | 
				
			||||
 | 
				
			||||
									/* Erase next page's temp buffer */
 | 
				
			||||
									boot_page_erase(CurrFlashAddress.Long);
 | 
				
			||||
									boot_spm_busy_wait();
 | 
				
			||||
								}
 | 
				
			||||
							}
 | 
				
			||||
						}
 | 
				
			||||
					
 | 
				
			||||
						/* Once programming complete, start address equals the end address */
 | 
				
			||||
						StartAddr = EndAddr;
 | 
				
			||||
					
 | 
				
			||||
						/* Re-enable the RWW section of flash */
 | 
				
			||||
						boot_rww_enable();
 | 
				
			||||
					}
 | 
				
			||||
					else                                                   // Write EEPROM
 | 
				
			||||
					{
 | 
				
			||||
						while (BytesRemaining--)
 | 
				
			||||
						{
 | 
				
			||||
							/* Check if endpoint is empty - if so clear it and wait until ready for next packet */
 | 
				
			||||
							if (!(Endpoint_BytesInEndpoint()))
 | 
				
			||||
							{
 | 
				
			||||
								Endpoint_ClearSetupOUT();
 | 
				
			||||
								while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
							}
 | 
				
			||||
 | 
				
			||||
							/* Read the byte from the USB interface and write to to the EEPROM */
 | 
				
			||||
							eeprom_write_byte((uint8_t*)StartAddr, Endpoint_Read_Byte());
 | 
				
			||||
							
 | 
				
			||||
							/* Adjust counters */
 | 
				
			||||
							StartAddr++;
 | 
				
			||||
						}
 | 
				
			||||
					}
 | 
				
			||||
					
 | 
				
			||||
					/* Throw away the currently unused DFU file suffix */
 | 
				
			||||
					DiscardFillerBytes(DFU_FILE_SUFFIX_SIZE);
 | 
				
			||||
				}
 | 
				
			||||
			}
 | 
				
			||||
 | 
				
			||||
			Endpoint_ClearSetupOUT();
 | 
				
			||||
 | 
				
			||||
			/* Send ZLP to the host to acknowedge the request */
 | 
				
			||||
			Endpoint_ClearSetupIN();
 | 
				
			||||
				
 | 
				
			||||
			break;
 | 
				
			||||
		case DFU_UPLOAD:
 | 
				
			||||
			Endpoint_ClearSetupReceived();
 | 
				
			||||
 | 
				
			||||
			while (!(Endpoint_IsSetupINReady()));
 | 
				
			||||
 | 
				
			||||
			if (DFU_State != dfuUPLOAD_IDLE)
 | 
				
			||||
			{
 | 
				
			||||
				if ((DFU_State == dfuERROR) && IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))       // Blank Check
 | 
				
			||||
				{
 | 
				
			||||
					/* Blank checking is performed in the DFU_DNLOAD request - if we get here we've told the host
 | 
				
			||||
					   that the memory isn't blank, and the host is requesting the first non-blank address */
 | 
				
			||||
					Endpoint_Write_Word_LE(StartAddr);
 | 
				
			||||
				}
 | 
				
			||||
				else
 | 
				
			||||
				{
 | 
				
			||||
					/* Idle state upload - send response to last issued command */
 | 
				
			||||
					Endpoint_Write_Byte(ResponseByte);
 | 
				
			||||
				}
 | 
				
			||||
			}
 | 
				
			||||
			else
 | 
				
			||||
			{
 | 
				
			||||
				/* Determine the number of bytes remaining in the current block */
 | 
				
			||||
				uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1);
 | 
				
			||||
 | 
				
			||||
				if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00))            // Read FLASH
 | 
				
			||||
				{
 | 
				
			||||
					/* Calculate the number of words to be written from the number of bytes to be written */
 | 
				
			||||
					uint16_t WordsRemaining = (BytesRemaining >> 1);
 | 
				
			||||
 | 
				
			||||
					union
 | 
				
			||||
					{
 | 
				
			||||
						uint16_t Words[2];
 | 
				
			||||
						uint32_t Long;
 | 
				
			||||
					} CurrFlashAddress = {Words: {StartAddr, Flash64KBPage}};
 | 
				
			||||
 | 
				
			||||
					while (WordsRemaining--)
 | 
				
			||||
					{
 | 
				
			||||
						/* Check if endpoint is full - if so clear it and wait until ready for next packet */
 | 
				
			||||
						if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE)
 | 
				
			||||
						{
 | 
				
			||||
							Endpoint_ClearSetupIN();
 | 
				
			||||
							while (!(Endpoint_IsSetupINReady()));
 | 
				
			||||
						}
 | 
				
			||||
 | 
				
			||||
						/* Read the flash word and send it via USB to the host */
 | 
				
			||||
						#if defined(RAMPZ)
 | 
				
			||||
							Endpoint_Write_Word_LE(pgm_read_word_far(CurrFlashAddress.Long));
 | 
				
			||||
						#else
 | 
				
			||||
							Endpoint_Write_Word_LE(pgm_read_word(CurrFlashAddress.Long));							
 | 
				
			||||
						#endif
 | 
				
			||||
 | 
				
			||||
						/* Adjust counters */
 | 
				
			||||
						CurrFlashAddress.Long += 2;
 | 
				
			||||
					}
 | 
				
			||||
					
 | 
				
			||||
					/* Once reading is complete, start address equals the end address */
 | 
				
			||||
					StartAddr = EndAddr;
 | 
				
			||||
				}
 | 
				
			||||
				else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x02))       // Read EEPROM
 | 
				
			||||
				{
 | 
				
			||||
					while (BytesRemaining--)
 | 
				
			||||
					{
 | 
				
			||||
						/* Check if endpoint is full - if so clear it and wait until ready for next packet */
 | 
				
			||||
						if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE)
 | 
				
			||||
						{
 | 
				
			||||
							Endpoint_ClearSetupIN();
 | 
				
			||||
							while (!(Endpoint_IsSetupINReady()));
 | 
				
			||||
						}
 | 
				
			||||
 | 
				
			||||
						/* Read the EEPROM byte and send it via USB to the host */
 | 
				
			||||
						Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)StartAddr));
 | 
				
			||||
 | 
				
			||||
						/* Adjust counters */
 | 
				
			||||
						StartAddr++;
 | 
				
			||||
					}
 | 
				
			||||
				}
 | 
				
			||||
 | 
				
			||||
				/* Return to idle state */
 | 
				
			||||
				DFU_State = dfuIDLE;
 | 
				
			||||
			}
 | 
				
			||||
 | 
				
			||||
			Endpoint_ClearSetupIN();
 | 
				
			||||
 | 
				
			||||
			/* Send ZLP to the host to acknowedge the request */
 | 
				
			||||
			while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
			Endpoint_ClearSetupOUT();
 | 
				
			||||
 | 
				
			||||
			break;
 | 
				
			||||
		case DFU_GETSTATUS:
 | 
				
			||||
			Endpoint_ClearSetupReceived();
 | 
				
			||||
			
 | 
				
			||||
			/* Write 8-bit status value */
 | 
				
			||||
			Endpoint_Write_Byte(DFU_Status);
 | 
				
			||||
			
 | 
				
			||||
			/* Write 24-bit poll timeout value */
 | 
				
			||||
			Endpoint_Write_Byte(0);
 | 
				
			||||
			Endpoint_Write_Word_LE(0);
 | 
				
			||||
			
 | 
				
			||||
			/* Write 8-bit state value */
 | 
				
			||||
			Endpoint_Write_Byte(DFU_State);
 | 
				
			||||
 | 
				
			||||
			/* Write 8-bit state string ID number */
 | 
				
			||||
			Endpoint_Write_Byte(0);
 | 
				
			||||
 | 
				
			||||
			Endpoint_ClearSetupIN();
 | 
				
			||||
			
 | 
				
			||||
			while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
			Endpoint_ClearSetupOUT();
 | 
				
			||||
	
 | 
				
			||||
			break;		
 | 
				
			||||
		case DFU_CLRSTATUS:
 | 
				
			||||
			Endpoint_ClearSetupReceived();
 | 
				
			||||
			
 | 
				
			||||
			/* Reset the status value variable to the default OK status */
 | 
				
			||||
			DFU_Status = OK;
 | 
				
			||||
			
 | 
				
			||||
			Endpoint_ClearSetupIN();
 | 
				
			||||
 | 
				
			||||
			break;
 | 
				
			||||
		case DFU_GETSTATE:
 | 
				
			||||
			Endpoint_ClearSetupReceived();
 | 
				
			||||
			
 | 
				
			||||
			/* Write the current device state to the endpoint */
 | 
				
			||||
			Endpoint_Write_Byte(DFU_State);
 | 
				
			||||
		
 | 
				
			||||
			Endpoint_ClearSetupIN();
 | 
				
			||||
			
 | 
				
			||||
			while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
			Endpoint_ClearSetupOUT();
 | 
				
			||||
 | 
				
			||||
			break;
 | 
				
			||||
		case DFU_ABORT:
 | 
				
			||||
			Endpoint_ClearSetupReceived();
 | 
				
			||||
			
 | 
				
			||||
			/* Reset the current state variable to the default idle state */
 | 
				
			||||
			DFU_State = dfuIDLE;
 | 
				
			||||
			
 | 
				
			||||
			Endpoint_ClearSetupIN();
 | 
				
			||||
 | 
				
			||||
			break;
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Routine to discard the specified number of bytes from the control endpoint stream. This is used to
 | 
				
			||||
 *  discard unused bytes in the stream from the host, including the memory program block suffix.
 | 
				
			||||
 *
 | 
				
			||||
 *  \param NumberOfBytes  Number of bytes to discard from the host from the control endpoint
 | 
				
			||||
 */
 | 
				
			||||
static void DiscardFillerBytes(uint8_t NumberOfBytes)
 | 
				
			||||
{
 | 
				
			||||
	while (NumberOfBytes--)
 | 
				
			||||
	{
 | 
				
			||||
		if (!(Endpoint_BytesInEndpoint()))
 | 
				
			||||
		{
 | 
				
			||||
			Endpoint_ClearSetupOUT();
 | 
				
			||||
 | 
				
			||||
			/* Wait until next data packet received */
 | 
				
			||||
			while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
		}
 | 
				
			||||
 | 
				
			||||
		Endpoint_Discard_Byte();						
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Routine to process an issued command from the host, via a DFU_DNLOAD request wrapper. This routine ensures
 | 
				
			||||
 *  that the command is allowed based on the current secure mode flag value, and passes the command off to the
 | 
				
			||||
 *  appropriate handler function.
 | 
				
			||||
 */
 | 
				
			||||
static void ProcessBootloaderCommand(void)
 | 
				
			||||
{
 | 
				
			||||
	/* Check if device is in secure mode */
 | 
				
			||||
	if (IsSecure)
 | 
				
			||||
	{
 | 
				
			||||
		/* Don't process command unless it is a READ or chip erase command */
 | 
				
			||||
		if (!(((SentCommand.Command == COMMAND_WRITE)             &&
 | 
				
			||||
		        IS_TWOBYTE_COMMAND(SentCommand.Data, 0x00, 0xFF)) ||
 | 
				
			||||
			   (SentCommand.Command == COMMAND_READ)))
 | 
				
			||||
		{
 | 
				
			||||
			/* Set the state and status variables to indicate the error */
 | 
				
			||||
			DFU_State  = dfuERROR;
 | 
				
			||||
			DFU_Status = errWRITE;
 | 
				
			||||
			
 | 
				
			||||
			/* Stall command */
 | 
				
			||||
			Endpoint_StallTransaction();
 | 
				
			||||
			
 | 
				
			||||
			/* Don't process the command */
 | 
				
			||||
			return;
 | 
				
			||||
		}
 | 
				
			||||
	}
 | 
				
			||||
 | 
				
			||||
	/* Dispatch the required command processing routine based on the command type */
 | 
				
			||||
	switch (SentCommand.Command)
 | 
				
			||||
	{
 | 
				
			||||
		case COMMAND_PROG_START:
 | 
				
			||||
			ProcessMemProgCommand();
 | 
				
			||||
			break;
 | 
				
			||||
		case COMMAND_DISP_DATA:
 | 
				
			||||
			ProcessMemReadCommand();
 | 
				
			||||
			break;
 | 
				
			||||
		case COMMAND_WRITE:
 | 
				
			||||
			ProcessWriteCommand();
 | 
				
			||||
			break;
 | 
				
			||||
		case COMMAND_READ:
 | 
				
			||||
			ProcessReadCommand();
 | 
				
			||||
			break;
 | 
				
			||||
		case COMMAND_CHANGE_BASE_ADDR:
 | 
				
			||||
			if (IS_TWOBYTE_COMMAND(SentCommand.Data, 0x03, 0x00))              // Set 64KB flash page command
 | 
				
			||||
			  Flash64KBPage = SentCommand.Data[2];
 | 
				
			||||
 | 
				
			||||
			break;
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Routine to concatenate the given pair of 16-bit memory start and end addresses from the host, and store them
 | 
				
			||||
 *  in the StartAddr and EndAddr global variables.
 | 
				
			||||
 */
 | 
				
			||||
static void LoadStartEndAddresses(void)
 | 
				
			||||
{
 | 
				
			||||
	union
 | 
				
			||||
	{
 | 
				
			||||
		uint8_t  Bytes[2];
 | 
				
			||||
		uint16_t Word;
 | 
				
			||||
	} Address[2] = {{Bytes: {SentCommand.Data[2], SentCommand.Data[1]}},
 | 
				
			||||
	                {Bytes: {SentCommand.Data[4], SentCommand.Data[3]}}};
 | 
				
			||||
		
 | 
				
			||||
	/* Load in the start and ending read addresses from the sent data packet */
 | 
				
			||||
	StartAddr = Address[0].Word;
 | 
				
			||||
	EndAddr   = Address[1].Word;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Handler for a Memory Program command issued by the host. This routine handles the preperations needed
 | 
				
			||||
 *  to write subsequent data from the host into the specified memory.
 | 
				
			||||
 */
 | 
				
			||||
static void ProcessMemProgCommand(void)
 | 
				
			||||
{
 | 
				
			||||
	if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00) ||                          // Write FLASH command
 | 
				
			||||
	    IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))                            // Write EEPROM command
 | 
				
			||||
	{
 | 
				
			||||
		/* Load in the start and ending read addresses */
 | 
				
			||||
		LoadStartEndAddresses();
 | 
				
			||||
		
 | 
				
			||||
		/* If FLASH is being written to, we need to pre-erase the first page to write to */
 | 
				
			||||
		if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00))
 | 
				
			||||
		{
 | 
				
			||||
			union
 | 
				
			||||
			{
 | 
				
			||||
				uint16_t Words[2];
 | 
				
			||||
				uint32_t Long;
 | 
				
			||||
			} CurrFlashAddress = {Words: {StartAddr, Flash64KBPage}};
 | 
				
			||||
			
 | 
				
			||||
			/* Erase the current page's temp buffer */
 | 
				
			||||
			boot_page_erase(CurrFlashAddress.Long);
 | 
				
			||||
			boot_spm_busy_wait();
 | 
				
			||||
		}
 | 
				
			||||
		
 | 
				
			||||
		/* Set the state so that the next DNLOAD requests reads in the firmware */
 | 
				
			||||
		DFU_State = dfuDNLOAD_IDLE;
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Handler for a Memory Read command issued by the host. This routine handles the preperations needed
 | 
				
			||||
 *  to read subsequent data from the specified memory out to the host, as well as implementing the memory
 | 
				
			||||
 *  blank check command.
 | 
				
			||||
 */
 | 
				
			||||
static void ProcessMemReadCommand(void)
 | 
				
			||||
{
 | 
				
			||||
	if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00) ||                          // Read FLASH command
 | 
				
			||||
        IS_ONEBYTE_COMMAND(SentCommand.Data, 0x02))                            // Read EEPROM command
 | 
				
			||||
	{
 | 
				
			||||
		/* Load in the start and ending read addresses */
 | 
				
			||||
		LoadStartEndAddresses();
 | 
				
			||||
 | 
				
			||||
		/* Set the state so that the next UPLOAD requests read out the firmware */
 | 
				
			||||
		DFU_State = dfuUPLOAD_IDLE;
 | 
				
			||||
	}
 | 
				
			||||
	else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))                       // Blank check FLASH command
 | 
				
			||||
	{
 | 
				
			||||
		uint32_t CurrFlashAddress = 0;
 | 
				
			||||
 | 
				
			||||
		while (CurrFlashAddress < BOOT_START_ADDR)
 | 
				
			||||
		{
 | 
				
			||||
			/* Check if the current byte is not blank */
 | 
				
			||||
			#if defined(RAMPZ)
 | 
				
			||||
			if (pgm_read_byte_far(CurrFlashAddress) != 0xFF)
 | 
				
			||||
			#else
 | 
				
			||||
			if (pgm_read_byte(CurrFlashAddress) != 0xFF)
 | 
				
			||||
			#endif
 | 
				
			||||
			{
 | 
				
			||||
				/* Save the location of the first non-blank byte for response back to the host */
 | 
				
			||||
				Flash64KBPage = (CurrFlashAddress >> 16);
 | 
				
			||||
				StartAddr     = CurrFlashAddress;
 | 
				
			||||
			
 | 
				
			||||
				/* Set state and status variables to the appropriate error values */
 | 
				
			||||
				DFU_State  = dfuERROR;
 | 
				
			||||
				DFU_Status = errCHECK_ERASED;
 | 
				
			||||
 | 
				
			||||
				break;
 | 
				
			||||
			}
 | 
				
			||||
 | 
				
			||||
			CurrFlashAddress++;
 | 
				
			||||
		}
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Handler for a Data Write command issued by the host. This routine handles non-programming commands such as
 | 
				
			||||
 *  bootloader exit (both via software jumps and hardware watchdog resets) and flash memory erasure.
 | 
				
			||||
 */
 | 
				
			||||
static void ProcessWriteCommand(void)
 | 
				
			||||
{
 | 
				
			||||
	if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x03))                            // Start application
 | 
				
			||||
	{
 | 
				
			||||
		/* Indicate that the bootloader is terminating */
 | 
				
			||||
		WaitForExit = true;
 | 
				
			||||
 | 
				
			||||
		/* Check if empty request data array - an empty request after a filled request retains the
 | 
				
			||||
		   previous valid request data, but initializes the reset */
 | 
				
			||||
		if (!(SentCommand.DataSize))
 | 
				
			||||
		{
 | 
				
			||||
			if (SentCommand.Data[1] == 0x00)                                   // Start via watchdog
 | 
				
			||||
			{
 | 
				
			||||
				/* Start the watchdog to reset the AVR once the communications are finalized */
 | 
				
			||||
				wdt_enable(WDTO_250MS);
 | 
				
			||||
			}
 | 
				
			||||
			else                                                               // Start via jump
 | 
				
			||||
			{
 | 
				
			||||
				/* Load in the jump address into the application start address pointer */
 | 
				
			||||
				union
 | 
				
			||||
				{
 | 
				
			||||
					uint8_t  Bytes[2];
 | 
				
			||||
					AppPtr_t FuncPtr;
 | 
				
			||||
				} Address = {Bytes: {SentCommand.Data[4], SentCommand.Data[3]}};
 | 
				
			||||
 | 
				
			||||
				AppStartPtr = Address.FuncPtr;
 | 
				
			||||
				
 | 
				
			||||
				/* Set the flag to terminate the bootloader at next opportunity */
 | 
				
			||||
				RunBootloader = false;
 | 
				
			||||
			}
 | 
				
			||||
		}
 | 
				
			||||
	}
 | 
				
			||||
	else if (IS_TWOBYTE_COMMAND(SentCommand.Data, 0x00, 0xFF))                 // Erase flash
 | 
				
			||||
	{
 | 
				
			||||
		uint32_t CurrFlashAddress = 0;
 | 
				
			||||
 | 
				
			||||
		/* Clear the application section of flash */
 | 
				
			||||
		while (CurrFlashAddress < BOOT_START_ADDR)
 | 
				
			||||
		{
 | 
				
			||||
			boot_page_erase(CurrFlashAddress);
 | 
				
			||||
			boot_spm_busy_wait();
 | 
				
			||||
			boot_page_write(CurrFlashAddress);
 | 
				
			||||
			boot_spm_busy_wait();
 | 
				
			||||
 | 
				
			||||
			CurrFlashAddress += SPM_PAGESIZE;
 | 
				
			||||
		}
 | 
				
			||||
 | 
				
			||||
		/* Re-enable the RWW section of flash as writing to the flash locks it out */
 | 
				
			||||
		boot_rww_enable();
 | 
				
			||||
					
 | 
				
			||||
		/* Memory has been erased, reset the security bit so that programming/reading is allowed */
 | 
				
			||||
		IsSecure = false;
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Handler for a Data Read command issued by the host. This routine handles bootloader information retrieval
 | 
				
			||||
 *  commands such as device signature and bootloader version retrieval.
 | 
				
			||||
 */
 | 
				
			||||
static void ProcessReadCommand(void)
 | 
				
			||||
{
 | 
				
			||||
	const uint8_t BootloaderInfo[3] = {BOOTLOADER_VERSION, BOOTLOADER_ID_BYTE1, BOOTLOADER_ID_BYTE2};
 | 
				
			||||
	const uint8_t SignatureInfo[3]  = {SIGNATURE_BYTE_1, SIGNATURE_BYTE_2, SIGNATURE_BYTE_3};
 | 
				
			||||
 | 
				
			||||
	uint8_t DataIndexToRead = SentCommand.Data[1];
 | 
				
			||||
 | 
				
			||||
	if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00))                         // Read bootloader info
 | 
				
			||||
	{
 | 
				
			||||
		ResponseByte = BootloaderInfo[DataIndexToRead];
 | 
				
			||||
	}
 | 
				
			||||
	else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))                    // Read signature byte
 | 
				
			||||
	{
 | 
				
			||||
		ResponseByte = SignatureInfo[DataIndexToRead - 0x30];
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,199 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Header file for BootloaderDFU.c.
 | 
				
			||||
 */
 | 
				
			||||
 | 
				
			||||
#ifndef _BOOTLOADER_H_
 | 
				
			||||
#define _BOOTLOADER_H_
 | 
				
			||||
 | 
				
			||||
	/* Includes: */
 | 
				
			||||
		#include <avr/io.h>
 | 
				
			||||
		#include <avr/wdt.h>
 | 
				
			||||
		#include <avr/boot.h>
 | 
				
			||||
		#include <avr/eeprom.h>
 | 
				
			||||
		#include <stdbool.h>
 | 
				
			||||
	
 | 
				
			||||
		#include "Descriptors.h"
 | 
				
			||||
		
 | 
				
			||||
		#include <LUFA/Drivers/USB/USB.h>                // USB Functionality
 | 
				
			||||
		
 | 
				
			||||
	/* Macros: */
 | 
				
			||||
		/** Major bootloader version number. */
 | 
				
			||||
		#define BOOTLOADER_VERSION_MINOR 2
 | 
				
			||||
 | 
				
			||||
		/** Minor bootloader version number. */
 | 
				
			||||
		#define BOOTLOADER_VERSION_REV   0
 | 
				
			||||
 | 
				
			||||
		/** Complete bootloder version number expressed as a packed byte, constructed from the 
 | 
				
			||||
		 *  two individual bootloader version macros.
 | 
				
			||||
		 */
 | 
				
			||||
		#define BOOTLOADER_VERSION       ((BOOTLOADER_VERSION_MINOR << 4) | BOOTLOADER_VERSION_REV)
 | 
				
			||||
 | 
				
			||||
		/** First byte of the bootloader identification bytes, used to identify a device's bootloader. */
 | 
				
			||||
		#define BOOTLOADER_ID_BYTE1      0xDC
 | 
				
			||||
 | 
				
			||||
		/** Second byte of the bootloader identification bytes, used to identify a device's bootloader. */
 | 
				
			||||
		#define BOOTLOADER_ID_BYTE2      0xFB
 | 
				
			||||
		
 | 
				
			||||
		/** Convenience macro, used to determine if the issued command is the given one-byte long command.
 | 
				
			||||
		 *
 | 
				
			||||
		 *  \param dataarr  Command byte array to check against
 | 
				
			||||
		 *  \param cb1      First command byte to check
 | 
				
			||||
		 */
 | 
				
			||||
		#define IS_ONEBYTE_COMMAND(dataarr, cb1)       (dataarr[0] == cb1)
 | 
				
			||||
 | 
				
			||||
		/** Convenience macro, used to determine if the issued command is the given two-byte long command.
 | 
				
			||||
		 *
 | 
				
			||||
		 *  \param dataarr  Command byte array to check against
 | 
				
			||||
		 *  \param cb1      First command byte to check
 | 
				
			||||
		 *  \param cb2      Second command byte to check
 | 
				
			||||
		 */
 | 
				
			||||
		#define IS_TWOBYTE_COMMAND(dataarr, cb1, cb2) ((dataarr[0] == cb1) && (dataarr[1] == cb2))
 | 
				
			||||
	
 | 
				
			||||
		/** Length of the DFU file suffix block, appended to the end of each complete memory write command.
 | 
				
			||||
		 *  The DFU file suffix is currently unused (but is designed to give extra file information, such as
 | 
				
			||||
		 *  a CRC of the complete firmware for error checking) and so is discarded.
 | 
				
			||||
		 */
 | 
				
			||||
		#define DFU_FILE_SUFFIX_SIZE     16
 | 
				
			||||
 | 
				
			||||
		/** Length of the DFU file filler block, appended to the start of each complete memory write command.
 | 
				
			||||
		 *  Filler bytes are added to the start of each complete memory write command, and must be discarded.
 | 
				
			||||
		 */
 | 
				
			||||
		#define DFU_FILLER_BYTES_SIZE    26
 | 
				
			||||
	
 | 
				
			||||
		/** DFU class command request to detatch from the host. */
 | 
				
			||||
		#define DFU_DETATCH              0x00
 | 
				
			||||
 | 
				
			||||
		/** DFU class command request to send data from the host to the bootloader. */
 | 
				
			||||
		#define DFU_DNLOAD               0x01
 | 
				
			||||
 | 
				
			||||
		/** DFU class command request to send data from the bootloader to the host. */
 | 
				
			||||
		#define DFU_UPLOAD               0x02
 | 
				
			||||
 | 
				
			||||
		/** DFU class command request to get the current DFU status and state from the bootloader. */
 | 
				
			||||
		#define DFU_GETSTATUS            0x03
 | 
				
			||||
 | 
				
			||||
		/** DFU class command request to reset the current DFU status and state variables to their defaults. */
 | 
				
			||||
		#define DFU_CLRSTATUS            0x04
 | 
				
			||||
 | 
				
			||||
		/** DFU class command request to get the current DFU state of the bootloader. */
 | 
				
			||||
		#define DFU_GETSTATE             0x05
 | 
				
			||||
 | 
				
			||||
		/** DFU class command request to abort the current multi-request transfer and return to the dfuIDLE state. */
 | 
				
			||||
		#define DFU_ABORT                0x06
 | 
				
			||||
 | 
				
			||||
		/** DFU command to begin programming the device's memory. */
 | 
				
			||||
		#define COMMAND_PROG_START       0x01
 | 
				
			||||
 | 
				
			||||
		/** DFU command to begin reading the device's memory. */
 | 
				
			||||
		#define COMMAND_DISP_DATA        0x03
 | 
				
			||||
 | 
				
			||||
		/** DFU command to issue a write command. */
 | 
				
			||||
		#define COMMAND_WRITE            0x04
 | 
				
			||||
 | 
				
			||||
		/** DFU command to issue a read command. */
 | 
				
			||||
		#define COMMAND_READ             0x05
 | 
				
			||||
 | 
				
			||||
		/** DFU command to issue a memory base address change command, to set the current 64KB flash page
 | 
				
			||||
		 *  that subsequent flash operations should use. */
 | 
				
			||||
		#define COMMAND_CHANGE_BASE_ADDR 0x06
 | 
				
			||||
 | 
				
			||||
	/* Type Defines: */
 | 
				
			||||
		/** Type define for a non-returning function pointer to the loaded application. */
 | 
				
			||||
		typedef void (*AppPtr_t)(void) ATTR_NO_RETURN;
 | 
				
			||||
		
 | 
				
			||||
		/** Type define for a strucuture containing a complete DFU command issued by the host. */
 | 
				
			||||
		typedef struct
 | 
				
			||||
		{
 | 
				
			||||
			uint8_t  Command; /**< Single byte command to perform, one of the COMMAND_* macro values */
 | 
				
			||||
			uint8_t  Data[5]; /**< Command parameters */
 | 
				
			||||
			uint16_t DataSize; /**< Size of the command parameters */
 | 
				
			||||
		} DFU_Command_t;
 | 
				
			||||
 | 
				
			||||
	/* Enums: */
 | 
				
			||||
		/** DFU bootloader states. Refer to the DFU class specification for information on each state. */
 | 
				
			||||
		enum DFU_State_t
 | 
				
			||||
		{
 | 
				
			||||
			appIDLE                      = 0,
 | 
				
			||||
			appDETACH                    = 1,
 | 
				
			||||
			dfuIDLE                      = 2,
 | 
				
			||||
			dfuDNLOAD_SYNC               = 3,
 | 
				
			||||
			dfuDNBUSY                    = 4,
 | 
				
			||||
			dfuDNLOAD_IDLE               = 5,
 | 
				
			||||
			dfuMANIFEST_SYNC             = 6,
 | 
				
			||||
			dfuMANIFEST                  = 7,
 | 
				
			||||
			dfuMANIFEST_WAIT_RESET       = 8,
 | 
				
			||||
			dfuUPLOAD_IDLE               = 9,
 | 
				
			||||
			dfuERROR	                 = 10
 | 
				
			||||
		};
 | 
				
			||||
 | 
				
			||||
		/** DFU command status error codes. Refer to the DFU class specification for information on each error code. */
 | 
				
			||||
		enum DFU_Status_t
 | 
				
			||||
		{
 | 
				
			||||
			OK                           = 0,
 | 
				
			||||
			errTARGET                    = 1,
 | 
				
			||||
			errFILE                      = 2,
 | 
				
			||||
			errWRITE                     = 3,
 | 
				
			||||
			errERASE                     = 4,
 | 
				
			||||
			errCHECK_ERASED              = 5,
 | 
				
			||||
			errPROG                      = 6,
 | 
				
			||||
			errVERIFY                    = 7,
 | 
				
			||||
			errADDRESS                   = 8,
 | 
				
			||||
			errNOTDONE                   = 9,
 | 
				
			||||
			errFIRMWARE                  = 10,
 | 
				
			||||
			errVENDOR                    = 11,
 | 
				
			||||
			errUSBR                      = 12,
 | 
				
			||||
			errPOR                       = 13,
 | 
				
			||||
			errUNKNOWN                   = 14,
 | 
				
			||||
			errSTALLEDPKT	             = 15
 | 
				
			||||
		};
 | 
				
			||||
		
 | 
				
			||||
	/* Event Handlers: */
 | 
				
			||||
		/** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */
 | 
				
			||||
		HANDLES_EVENT(USB_Disconnect);
 | 
				
			||||
 | 
				
			||||
		/** Indicates that this module will catch the USB_UnhandledControlPacket event when thrown by the library. */
 | 
				
			||||
		HANDLES_EVENT(USB_UnhandledControlPacket);
 | 
				
			||||
		
 | 
				
			||||
	/* Function Prototypes: */
 | 
				
			||||
		#if defined(INCLUDE_FROM_BOOTLOADER_C)
 | 
				
			||||
			static void DiscardFillerBytes(uint8_t NumberOfBytes);
 | 
				
			||||
			static void ProcessBootloaderCommand(void);
 | 
				
			||||
			static void LoadStartEndAddresses(void);
 | 
				
			||||
			static void ProcessMemProgCommand(void);
 | 
				
			||||
			static void ProcessMemReadCommand(void);
 | 
				
			||||
			static void ProcessWriteCommand(void);
 | 
				
			||||
			static void ProcessReadCommand(void);
 | 
				
			||||
		#endif
 | 
				
			||||
		
 | 
				
			||||
#endif
 | 
				
			||||
@ -0,0 +1,52 @@
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
				
			||||
 *  documentation pages. It is not a project source file.
 | 
				
			||||
 */
 | 
				
			||||
 
 | 
				
			||||
/** \mainpage DFU Class USB AVR Bootloader
 | 
				
			||||
 *  
 | 
				
			||||
 *  This bootloader enumerates to the host as a DFU Class device, allowing for DFU-compatible programming
 | 
				
			||||
 *  software to load firmware onto the AVR.
 | 
				
			||||
 *  
 | 
				
			||||
 *  This bootloader is compatible with Atmel's FLIP application. However, it requires the use of Atmel's
 | 
				
			||||
 *  DFU drivers. You will need to install Atmel's DFU drivers prior to using this bootloader.
 | 
				
			||||
 *  
 | 
				
			||||
 *  As an open-source option, this bootloader is also compatible with the Linux Atmel USB DFU Programmer
 | 
				
			||||
 *  software, available for download at http://sourceforge.net/projects/dfu-programmer/.
 | 
				
			||||
 *  
 | 
				
			||||
 *  If SECURE_MODE is defined as true, upon startup the bootloader will be locked, with only the chip erase
 | 
				
			||||
 *  function available (similar to Atmel's DFU bootloader). If SECURE_MODE is defined as false, all functions 
 | 
				
			||||
 *  are usable on startup without the prerequisite firmware erase.
 | 
				
			||||
 *  
 | 
				
			||||
 *  Out of the box this bootloader builds for the USB1287, and should fit into 4KB of bootloader space. If
 | 
				
			||||
 *  you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU
 | 
				
			||||
 *  values in the accompanying makefile.
 | 
				
			||||
 *  
 | 
				
			||||
 *  <b>NOTE:</b> This device spoofs Atmel's DFU Bootloader USB VID and PID so that the Atmel DFU bootloader
 | 
				
			||||
 *               drivers included with FLIP will work. If you do not wish to use Atmel's ID codes, please
 | 
				
			||||
 *               manually change them in Descriptors.c and alter your driver's INF file accordingly.
 | 
				
			||||
 *
 | 
				
			||||
 * <table>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>USB Mode:</b></td>
 | 
				
			||||
 *   <td>Device</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>USB Class:</b></td>
 | 
				
			||||
 *   <td>Device Firmware Update Class (DFU)</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr> 
 | 
				
			||||
 *   <td><b>USB Subclass:</b></td>
 | 
				
			||||
 *   <td>None</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>Relevant Standards:</b></td>
 | 
				
			||||
 *   <td>USBIF DFU Class Standard, Atmel USB Bootloader Datasheet</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>Usable Speeds:</b></td>
 | 
				
			||||
 *   <td>Full Speed Mode</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 * </table>
 | 
				
			||||
 */
 | 
				
			||||
@ -0,0 +1,181 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
				
			||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
				
			||||
 *  the device's capabilities and functions.  
 | 
				
			||||
 */
 | 
				
			||||
 | 
				
			||||
#include "Descriptors.h"
 | 
				
			||||
 | 
				
			||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
 | 
				
			||||
 *  device characteristics, including the supported USB version, control endpoint size and the
 | 
				
			||||
 *  number of device configurations. The descriptor is read out by the USB host when the enumeration
 | 
				
			||||
 *  process begins.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_Device_t DeviceDescriptor =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: sizeof(USB_Descriptor_Device_t), Type: DTYPE_Device},
 | 
				
			||||
		
 | 
				
			||||
	USBSpecification:       VERSION_BCD(01.10),
 | 
				
			||||
	Class:                  0x00,
 | 
				
			||||
	SubClass:               0x00,
 | 
				
			||||
	Protocol:               0x00,
 | 
				
			||||
				
 | 
				
			||||
	Endpoint0Size:          FIXED_CONTROL_ENDPOINT_SIZE,
 | 
				
			||||
		
 | 
				
			||||
	VendorID:               0x03EB,
 | 
				
			||||
	ProductID:              PRODUCT_ID_CODE,
 | 
				
			||||
	ReleaseNumber:          0x0000,
 | 
				
			||||
		
 | 
				
			||||
	ManufacturerStrIndex:   NO_DESCRIPTOR,
 | 
				
			||||
	ProductStrIndex:        0x01,
 | 
				
			||||
	SerialNumStrIndex:      NO_DESCRIPTOR,
 | 
				
			||||
		
 | 
				
			||||
	NumberOfConfigurations: 1
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
 | 
				
			||||
 *  of the device in one of its supported configurations, including information about any device interfaces
 | 
				
			||||
 *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
 | 
				
			||||
 *  a configuration so that the host may correctly communicate with the USB device.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_Configuration_t ConfigurationDescriptor =
 | 
				
			||||
{
 | 
				
			||||
	Config:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                   {Size: sizeof(USB_Descriptor_Configuration_Header_t), Type: DTYPE_Configuration},
 | 
				
			||||
 | 
				
			||||
			TotalConfigurationSize:   sizeof(USB_Descriptor_Configuration_t),
 | 
				
			||||
			TotalInterfaces:          1,
 | 
				
			||||
 | 
				
			||||
			ConfigurationNumber:      1,
 | 
				
			||||
			ConfigurationStrIndex:    NO_DESCRIPTOR,
 | 
				
			||||
				
 | 
				
			||||
			ConfigAttributes:         (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
				
			||||
			
 | 
				
			||||
			MaxPowerConsumption:      USB_CONFIG_POWER_MA(100)
 | 
				
			||||
		},
 | 
				
			||||
		
 | 
				
			||||
	DFUInterface:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Interface_t), Type: DTYPE_Interface},
 | 
				
			||||
 | 
				
			||||
			InterfaceNumber:        0,
 | 
				
			||||
			AlternateSetting:       0,
 | 
				
			||||
			
 | 
				
			||||
			TotalEndpoints:         0,
 | 
				
			||||
				
 | 
				
			||||
			Class:                  0xFE,
 | 
				
			||||
			SubClass:               0x01,
 | 
				
			||||
			Protocol:               0x02,
 | 
				
			||||
 | 
				
			||||
			InterfaceStrIndex:      NO_DESCRIPTOR
 | 
				
			||||
		},
 | 
				
			||||
		
 | 
				
			||||
	DFUFunctional:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_DFU_Functional_Descriptor_t), Type: DTYPE_DFUFunctional},
 | 
				
			||||
			
 | 
				
			||||
			Attributes:             (ATTR_CAN_UPLOAD | ATTR_CAN_DOWNLOAD),
 | 
				
			||||
 | 
				
			||||
			DetatchTimeout:         0x0000,
 | 
				
			||||
			TransferSize:           0x0c00,
 | 
				
			||||
		
 | 
				
			||||
			DFUSpecification:       VERSION_BCD(01.01)
 | 
				
			||||
		}
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
 | 
				
			||||
 *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
 | 
				
			||||
 *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
 | 
				
			||||
 */ 
 | 
				
			||||
USB_Descriptor_String_t LanguageString =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: USB_STRING_LEN(1), Type: DTYPE_String},
 | 
				
			||||
		
 | 
				
			||||
	UnicodeString:          {LANGUAGE_ID_ENG}
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
 | 
				
			||||
 *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
 | 
				
			||||
 *  Descriptor.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_String_t ProductString =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: USB_STRING_LEN(18), Type: DTYPE_String},
 | 
				
			||||
		
 | 
				
			||||
	UnicodeString:          L"AVR DFU Bootloader"
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** This function is called by the library when in device mode, and must be overridden (see StdDescriptors.h
 | 
				
			||||
 *  documentation) by the application code so that the address and size of a requested descriptor can be given
 | 
				
			||||
 *  to the USB library. When the device recieves a Get Descriptor request on the control endpoint, this function
 | 
				
			||||
 *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
 | 
				
			||||
 *  USB host.
 | 
				
			||||
 */
 | 
				
			||||
uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
				
			||||
{
 | 
				
			||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
				
			||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
				
			||||
 | 
				
			||||
	void*    Address = NULL;
 | 
				
			||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
				
			||||
 | 
				
			||||
	switch (DescriptorType)
 | 
				
			||||
	{
 | 
				
			||||
		case DTYPE_Device:
 | 
				
			||||
			Address = DESCRIPTOR_ADDRESS(DeviceDescriptor);
 | 
				
			||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
				
			||||
			break;
 | 
				
			||||
		case DTYPE_Configuration:
 | 
				
			||||
			Address = DESCRIPTOR_ADDRESS(ConfigurationDescriptor);
 | 
				
			||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
				
			||||
			break;
 | 
				
			||||
		case DTYPE_String:
 | 
				
			||||
			if (!(DescriptorNumber))
 | 
				
			||||
			{
 | 
				
			||||
				Address = DESCRIPTOR_ADDRESS(LanguageString);
 | 
				
			||||
				Size    = LanguageString.Header.Size;
 | 
				
			||||
			}
 | 
				
			||||
			else
 | 
				
			||||
			{
 | 
				
			||||
				Address = DESCRIPTOR_ADDRESS(ProductString);
 | 
				
			||||
				Size    = ProductString.Header.Size;
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			break;
 | 
				
			||||
	}
 | 
				
			||||
	
 | 
				
			||||
	*DescriptorAddress = Address;
 | 
				
			||||
	return Size;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,166 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Header file for Descriptors.c.
 | 
				
			||||
 */
 | 
				
			||||
 | 
				
			||||
#ifndef _DESCRIPTORS_H_
 | 
				
			||||
#define _DESCRIPTORS_H_
 | 
				
			||||
 | 
				
			||||
	/* Includes: */
 | 
				
			||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
				
			||||
 | 
				
			||||
	/* Macros: */
 | 
				
			||||
		/** Descriptor type value for a DFU class functional descriptor. */
 | 
				
			||||
		#define DTYPE_DFUFunctional               0x21
 | 
				
			||||
		
 | 
				
			||||
		/** DFU attribute mask, indicating that the DFU device will detach and re-attach when a DFU_DETACH
 | 
				
			||||
		 *  command is issued, rather than the host issing a USB Reset.
 | 
				
			||||
		 */
 | 
				
			||||
		#define ATTR_WILL_DETATCH                 (1 << 3)
 | 
				
			||||
 | 
				
			||||
		/** DFU attribute mask, indicating that the DFU device can communicate during the manefestation phase
 | 
				
			||||
		 *  (memory programming phase).
 | 
				
			||||
		 */
 | 
				
			||||
		#define ATTR_MANEFESTATION_TOLLERANT      (1 << 2)
 | 
				
			||||
		
 | 
				
			||||
		/** DFU attribute mask, indicating that the DFU device can accept DFU_UPLOAD requests to send data from
 | 
				
			||||
		 *  the device to the host.
 | 
				
			||||
		 */		
 | 
				
			||||
		#define ATTR_CAN_UPLOAD                   (1 << 1)
 | 
				
			||||
 | 
				
			||||
		/** DFU attribute mask, indicating that the DFU device can accept DFU_DNLOAD requests to send data from
 | 
				
			||||
		 *  the host to the device.
 | 
				
			||||
		 */		
 | 
				
			||||
		#define ATTR_CAN_DOWNLOAD                 (1 << 0)
 | 
				
			||||
 | 
				
			||||
		#if defined(__AVR_AT90USB1286__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FFB
 | 
				
			||||
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x97
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x82
 | 
				
			||||
		#elif defined(__AVR_AT90USB1287__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FFB
 | 
				
			||||
			
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x97
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x82
 | 
				
			||||
		#elif defined(__AVR_AT90USB646__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FF9
 | 
				
			||||
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x96
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x82
 | 
				
			||||
		#elif defined(__AVR_AT90USB647__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FF9
 | 
				
			||||
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x96
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x82
 | 
				
			||||
		#elif defined(__AVR_AT90USB162__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FFA
 | 
				
			||||
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x94
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x82
 | 
				
			||||
		#elif defined(__AVR_AT90USB82__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FF7
 | 
				
			||||
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x94
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x82
 | 
				
			||||
		#elif defined(__AVR_ATmega32U6__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FFB
 | 
				
			||||
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x95
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x88
 | 
				
			||||
		#elif defined(__AVR_ATmega32U4__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FF4
 | 
				
			||||
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x95
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x87	
 | 
				
			||||
		#elif defined(__AVR_ATmega16U4__)
 | 
				
			||||
			#define PRODUCT_ID_CODE               0x2FF3
 | 
				
			||||
 | 
				
			||||
			#define SIGNATURE_BYTE_1              0x1E
 | 
				
			||||
			#define SIGNATURE_BYTE_2              0x94
 | 
				
			||||
			#define SIGNATURE_BYTE_3              0x88
 | 
				
			||||
		#else
 | 
				
			||||
			#error The selected AVR part is not currently supported by this bootloader.
 | 
				
			||||
		#endif
 | 
				
			||||
		
 | 
				
			||||
		#if !defined(PRODUCT_ID_CODE)
 | 
				
			||||
			#error Current AVR model is not supported by this bootloader.
 | 
				
			||||
		#endif
 | 
				
			||||
	
 | 
				
			||||
	/* Type Defines: */
 | 
				
			||||
		/** Type define for a DFU class function descriptor. This descriptor gives DFU class information
 | 
				
			||||
		 *  to the host when read, indicating the DFU device's capabilities.
 | 
				
			||||
		 */
 | 
				
			||||
		typedef struct
 | 
				
			||||
		{
 | 
				
			||||
			USB_Descriptor_Header_t               Header; /**< Standard descriptor header structure */
 | 
				
			||||
			
 | 
				
			||||
			uint8_t                               Attributes; /**< DFU device attributes, a mask comprising of the
 | 
				
			||||
			                                                    *  ATTR_* macros listed in this source file
 | 
				
			||||
			                                                    */
 | 
				
			||||
			uint16_t                              DetatchTimeout; /**< Timeout in milliseconds between a USB_DETACH
 | 
				
			||||
			                                                        *  command being issued and the device detaching
 | 
				
			||||
			                                                        *  from the USB bus
 | 
				
			||||
			                                                        */																	
 | 
				
			||||
			uint16_t                              TransferSize; /**< Maximum number of bytes the DFU device can accept
 | 
				
			||||
			                                                      *  from the host in a transaction
 | 
				
			||||
			                                                      */			
 | 
				
			||||
			uint16_t                              DFUSpecification;	/**< BCD packed DFU specification number this DFU
 | 
				
			||||
			                                                          *  device complies with
 | 
				
			||||
			                                                          */
 | 
				
			||||
		} USB_DFU_Functional_Descriptor_t;
 | 
				
			||||
	
 | 
				
			||||
		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
				
			||||
		 *  application code, as the configuration descriptor contains several sub-descriptors which
 | 
				
			||||
		 *  vary between devices, and which describe the device's usage to the host.
 | 
				
			||||
		 */
 | 
				
			||||
		typedef struct
 | 
				
			||||
		{
 | 
				
			||||
			USB_Descriptor_Configuration_Header_t Config;
 | 
				
			||||
			USB_Descriptor_Interface_t            DFUInterface;
 | 
				
			||||
			USB_DFU_Functional_Descriptor_t       DFUFunctional;
 | 
				
			||||
		} USB_Descriptor_Configuration_t;
 | 
				
			||||
		
 | 
				
			||||
	/* Function Prototypes: */
 | 
				
			||||
		uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
				
			||||
		                           ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
				
			||||
 | 
				
			||||
#endif
 | 
				
			||||
@ -0,0 +1,1485 @@
 | 
				
			||||
# Doxyfile 1.5.7.1
 | 
				
			||||
 | 
				
			||||
# This file describes the settings to be used by the documentation system
 | 
				
			||||
# doxygen (www.doxygen.org) for a project
 | 
				
			||||
#
 | 
				
			||||
# All text after a hash (#) is considered a comment and will be ignored
 | 
				
			||||
# The format is:
 | 
				
			||||
#       TAG = value [value, ...]
 | 
				
			||||
# For lists items can also be appended using:
 | 
				
			||||
#       TAG += value [value, ...]
 | 
				
			||||
# Values that contain spaces should be placed between quotes (" ")
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Project related configuration options
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# This tag specifies the encoding used for all characters in the config file 
 | 
				
			||||
# that follow. The default is UTF-8 which is also the encoding used for all 
 | 
				
			||||
# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
 | 
				
			||||
# iconv built into libc) for the transcoding. See 
 | 
				
			||||
# http://www.gnu.org/software/libiconv for the list of possible encodings.
 | 
				
			||||
 | 
				
			||||
DOXYFILE_ENCODING      = UTF-8
 | 
				
			||||
 | 
				
			||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
 | 
				
			||||
# by quotes) that should identify the project.
 | 
				
			||||
 | 
				
			||||
PROJECT_NAME           = "LUFA Library - DFU Class Bootloader"
 | 
				
			||||
 | 
				
			||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
 | 
				
			||||
# This could be handy for archiving the generated documentation or 
 | 
				
			||||
# if some version control system is used.
 | 
				
			||||
 | 
				
			||||
PROJECT_NUMBER         = 0.0.0
 | 
				
			||||
 | 
				
			||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 | 
				
			||||
# base path where the generated documentation will be put. 
 | 
				
			||||
# If a relative path is entered, it will be relative to the location 
 | 
				
			||||
# where doxygen was started. If left blank the current directory will be used.
 | 
				
			||||
 | 
				
			||||
OUTPUT_DIRECTORY       = ./Documentation/
 | 
				
			||||
 | 
				
			||||
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
 | 
				
			||||
# 4096 sub-directories (in 2 levels) under the output directory of each output 
 | 
				
			||||
# format and will distribute the generated files over these directories. 
 | 
				
			||||
# Enabling this option can be useful when feeding doxygen a huge amount of 
 | 
				
			||||
# source files, where putting all generated files in the same directory would 
 | 
				
			||||
# otherwise cause performance problems for the file system.
 | 
				
			||||
 | 
				
			||||
CREATE_SUBDIRS         = YES
 | 
				
			||||
 | 
				
			||||
# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
 | 
				
			||||
# documentation generated by doxygen is written. Doxygen will use this 
 | 
				
			||||
# information to generate all constant output in the proper language. 
 | 
				
			||||
# The default language is English, other supported languages are: 
 | 
				
			||||
# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
 | 
				
			||||
# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
 | 
				
			||||
# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
 | 
				
			||||
# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
 | 
				
			||||
# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
 | 
				
			||||
# Spanish, Swedish, and Ukrainian.
 | 
				
			||||
 | 
				
			||||
OUTPUT_LANGUAGE        = English
 | 
				
			||||
 | 
				
			||||
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# include brief member descriptions after the members that are listed in 
 | 
				
			||||
# the file and class documentation (similar to JavaDoc). 
 | 
				
			||||
# Set to NO to disable this.
 | 
				
			||||
 | 
				
			||||
BRIEF_MEMBER_DESC      = YES
 | 
				
			||||
 | 
				
			||||
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
 | 
				
			||||
# the brief description of a member or function before the detailed description. 
 | 
				
			||||
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
 | 
				
			||||
# brief descriptions will be completely suppressed.
 | 
				
			||||
 | 
				
			||||
REPEAT_BRIEF           = YES
 | 
				
			||||
 | 
				
			||||
# This tag implements a quasi-intelligent brief description abbreviator 
 | 
				
			||||
# that is used to form the text in various listings. Each string 
 | 
				
			||||
# in this list, if found as the leading text of the brief description, will be 
 | 
				
			||||
# stripped from the text and the result after processing the whole list, is 
 | 
				
			||||
# used as the annotated text. Otherwise, the brief description is used as-is. 
 | 
				
			||||
# If left blank, the following values are used ("$name" is automatically 
 | 
				
			||||
# replaced with the name of the entity): "The $name class" "The $name widget" 
 | 
				
			||||
# "The $name file" "is" "provides" "specifies" "contains" 
 | 
				
			||||
# "represents" "a" "an" "the"
 | 
				
			||||
 | 
				
			||||
ABBREVIATE_BRIEF       = "The $name class" \
 | 
				
			||||
                         "The $name widget" \
 | 
				
			||||
                         "The $name file" \
 | 
				
			||||
                         is \
 | 
				
			||||
                         provides \
 | 
				
			||||
                         specifies \
 | 
				
			||||
                         contains \
 | 
				
			||||
                         represents \
 | 
				
			||||
                         a \
 | 
				
			||||
                         an \
 | 
				
			||||
                         the
 | 
				
			||||
 | 
				
			||||
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
 | 
				
			||||
# Doxygen will generate a detailed section even if there is only a brief 
 | 
				
			||||
# description.
 | 
				
			||||
 | 
				
			||||
ALWAYS_DETAILED_SEC    = NO
 | 
				
			||||
 | 
				
			||||
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
 | 
				
			||||
# inherited members of a class in the documentation of that class as if those 
 | 
				
			||||
# members were ordinary class members. Constructors, destructors and assignment 
 | 
				
			||||
# operators of the base classes will not be shown.
 | 
				
			||||
 | 
				
			||||
INLINE_INHERITED_MEMB  = NO
 | 
				
			||||
 | 
				
			||||
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
 | 
				
			||||
# path before files name in the file list and in the header files. If set 
 | 
				
			||||
# to NO the shortest path that makes the file name unique will be used.
 | 
				
			||||
 | 
				
			||||
FULL_PATH_NAMES        = YES
 | 
				
			||||
 | 
				
			||||
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
 | 
				
			||||
# can be used to strip a user-defined part of the path. Stripping is 
 | 
				
			||||
# only done if one of the specified strings matches the left-hand part of 
 | 
				
			||||
# the path. The tag can be used to show relative paths in the file list. 
 | 
				
			||||
# If left blank the directory from which doxygen is run is used as the 
 | 
				
			||||
# path to strip.
 | 
				
			||||
 | 
				
			||||
STRIP_FROM_PATH        = 
 | 
				
			||||
 | 
				
			||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
 | 
				
			||||
# the path mentioned in the documentation of a class, which tells 
 | 
				
			||||
# the reader which header file to include in order to use a class. 
 | 
				
			||||
# If left blank only the name of the header file containing the class 
 | 
				
			||||
# definition is used. Otherwise one should specify the include paths that 
 | 
				
			||||
# are normally passed to the compiler using the -I flag.
 | 
				
			||||
 | 
				
			||||
STRIP_FROM_INC_PATH    = 
 | 
				
			||||
 | 
				
			||||
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
 | 
				
			||||
# (but less readable) file names. This can be useful is your file systems 
 | 
				
			||||
# doesn't support long names like on DOS, Mac, or CD-ROM.
 | 
				
			||||
 | 
				
			||||
SHORT_NAMES            = YES
 | 
				
			||||
 | 
				
			||||
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
 | 
				
			||||
# will interpret the first line (until the first dot) of a JavaDoc-style 
 | 
				
			||||
# comment as the brief description. If set to NO, the JavaDoc 
 | 
				
			||||
# comments will behave just like regular Qt-style comments 
 | 
				
			||||
# (thus requiring an explicit @brief command for a brief description.)
 | 
				
			||||
 | 
				
			||||
JAVADOC_AUTOBRIEF      = NO
 | 
				
			||||
 | 
				
			||||
# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
 | 
				
			||||
# interpret the first line (until the first dot) of a Qt-style 
 | 
				
			||||
# comment as the brief description. If set to NO, the comments 
 | 
				
			||||
# will behave just like regular Qt-style comments (thus requiring 
 | 
				
			||||
# an explicit \brief command for a brief description.)
 | 
				
			||||
 | 
				
			||||
QT_AUTOBRIEF           = NO
 | 
				
			||||
 | 
				
			||||
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
 | 
				
			||||
# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
 | 
				
			||||
# comments) as a brief description. This used to be the default behaviour. 
 | 
				
			||||
# The new default is to treat a multi-line C++ comment block as a detailed 
 | 
				
			||||
# description. Set this tag to YES if you prefer the old behaviour instead.
 | 
				
			||||
 | 
				
			||||
MULTILINE_CPP_IS_BRIEF = NO
 | 
				
			||||
 | 
				
			||||
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
 | 
				
			||||
# member inherits the documentation from any documented member that it 
 | 
				
			||||
# re-implements.
 | 
				
			||||
 | 
				
			||||
INHERIT_DOCS           = YES
 | 
				
			||||
 | 
				
			||||
# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
 | 
				
			||||
# a new page for each member. If set to NO, the documentation of a member will 
 | 
				
			||||
# be part of the file/class/namespace that contains it.
 | 
				
			||||
 | 
				
			||||
SEPARATE_MEMBER_PAGES  = NO
 | 
				
			||||
 | 
				
			||||
# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
 | 
				
			||||
# Doxygen uses this value to replace tabs by spaces in code fragments.
 | 
				
			||||
 | 
				
			||||
TAB_SIZE               = 4
 | 
				
			||||
 | 
				
			||||
# This tag can be used to specify a number of aliases that acts 
 | 
				
			||||
# as commands in the documentation. An alias has the form "name=value". 
 | 
				
			||||
# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
 | 
				
			||||
# put the command \sideeffect (or @sideeffect) in the documentation, which 
 | 
				
			||||
# will result in a user-defined paragraph with heading "Side Effects:". 
 | 
				
			||||
# You can put \n's in the value part of an alias to insert newlines.
 | 
				
			||||
 | 
				
			||||
ALIASES                = 
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for C. 
 | 
				
			||||
# For instance, some of the names that are used will be different. The list 
 | 
				
			||||
# of all members will be omitted, etc.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_FOR_C  = YES
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for 
 | 
				
			||||
# Java. For instance, namespaces will be presented as packages, qualified 
 | 
				
			||||
# scopes will look different, etc.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_JAVA   = NO
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for 
 | 
				
			||||
# Fortran.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_FOR_FORTRAN   = NO
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
 | 
				
			||||
# sources. Doxygen will then generate output that is tailored for 
 | 
				
			||||
# VHDL.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_VHDL   = NO
 | 
				
			||||
 | 
				
			||||
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
 | 
				
			||||
# to include (a tag file for) the STL sources as input, then you should 
 | 
				
			||||
# set this tag to YES in order to let doxygen match functions declarations and 
 | 
				
			||||
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
 | 
				
			||||
# func(std::string) {}). This also make the inheritance and collaboration 
 | 
				
			||||
# diagrams that involve STL classes more complete and accurate.
 | 
				
			||||
 | 
				
			||||
BUILTIN_STL_SUPPORT    = NO
 | 
				
			||||
 | 
				
			||||
# If you use Microsoft's C++/CLI language, you should set this option to YES to
 | 
				
			||||
# enable parsing support.
 | 
				
			||||
 | 
				
			||||
CPP_CLI_SUPPORT        = NO
 | 
				
			||||
 | 
				
			||||
# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
 | 
				
			||||
# Doxygen will parse them like normal C++ but will assume all classes use public 
 | 
				
			||||
# instead of private inheritance when no explicit protection keyword is present.
 | 
				
			||||
 | 
				
			||||
SIP_SUPPORT            = NO
 | 
				
			||||
 | 
				
			||||
# For Microsoft's IDL there are propget and propput attributes to indicate getter 
 | 
				
			||||
# and setter methods for a property. Setting this option to YES (the default) 
 | 
				
			||||
# will make doxygen to replace the get and set methods by a property in the 
 | 
				
			||||
# documentation. This will only work if the methods are indeed getting or 
 | 
				
			||||
# setting a simple type. If this is not the case, or you want to show the 
 | 
				
			||||
# methods anyway, you should set this option to NO.
 | 
				
			||||
 | 
				
			||||
IDL_PROPERTY_SUPPORT   = YES
 | 
				
			||||
 | 
				
			||||
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
 | 
				
			||||
# tag is set to YES, then doxygen will reuse the documentation of the first 
 | 
				
			||||
# member in the group (if any) for the other members of the group. By default 
 | 
				
			||||
# all members of a group must be documented explicitly.
 | 
				
			||||
 | 
				
			||||
DISTRIBUTE_GROUP_DOC   = NO
 | 
				
			||||
 | 
				
			||||
# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
 | 
				
			||||
# the same type (for instance a group of public functions) to be put as a 
 | 
				
			||||
# subgroup of that type (e.g. under the Public Functions section). Set it to 
 | 
				
			||||
# NO to prevent subgrouping. Alternatively, this can be done per class using 
 | 
				
			||||
# the \nosubgrouping command.
 | 
				
			||||
 | 
				
			||||
SUBGROUPING            = YES
 | 
				
			||||
 | 
				
			||||
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
 | 
				
			||||
# is documented as struct, union, or enum with the name of the typedef. So 
 | 
				
			||||
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
 | 
				
			||||
# with name TypeT. When disabled the typedef will appear as a member of a file, 
 | 
				
			||||
# namespace, or class. And the struct will be named TypeS. This can typically 
 | 
				
			||||
# be useful for C code in case the coding convention dictates that all compound 
 | 
				
			||||
# types are typedef'ed and only the typedef is referenced, never the tag name.
 | 
				
			||||
 | 
				
			||||
TYPEDEF_HIDES_STRUCT   = NO
 | 
				
			||||
 | 
				
			||||
# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
 | 
				
			||||
# determine which symbols to keep in memory and which to flush to disk.
 | 
				
			||||
# When the cache is full, less often used symbols will be written to disk.
 | 
				
			||||
# For small to medium size projects (<1000 input files) the default value is 
 | 
				
			||||
# probably good enough. For larger projects a too small cache size can cause 
 | 
				
			||||
# doxygen to be busy swapping symbols to and from disk most of the time 
 | 
				
			||||
# causing a significant performance penality. 
 | 
				
			||||
# If the system has enough physical memory increasing the cache will improve the 
 | 
				
			||||
# performance by keeping more symbols in memory. Note that the value works on 
 | 
				
			||||
# a logarithmic scale so increasing the size by one will rougly double the 
 | 
				
			||||
# memory usage. The cache size is given by this formula: 
 | 
				
			||||
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
 | 
				
			||||
# corresponding to a cache size of 2^16 = 65536 symbols
 | 
				
			||||
 | 
				
			||||
SYMBOL_CACHE_SIZE      = 0
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Build related configuration options
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
 | 
				
			||||
# documentation are documented, even if no documentation was available. 
 | 
				
			||||
# Private class members and static file members will be hidden unless 
 | 
				
			||||
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 | 
				
			||||
 | 
				
			||||
EXTRACT_ALL            = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
 | 
				
			||||
# will be included in the documentation.
 | 
				
			||||
 | 
				
			||||
EXTRACT_PRIVATE        = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_STATIC tag is set to YES all static members of a file 
 | 
				
			||||
# will be included in the documentation.
 | 
				
			||||
 | 
				
			||||
EXTRACT_STATIC         = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
 | 
				
			||||
# defined locally in source files will be included in the documentation. 
 | 
				
			||||
# If set to NO only classes defined in header files are included.
 | 
				
			||||
 | 
				
			||||
EXTRACT_LOCAL_CLASSES  = YES
 | 
				
			||||
 | 
				
			||||
# This flag is only useful for Objective-C code. When set to YES local 
 | 
				
			||||
# methods, which are defined in the implementation section but not in 
 | 
				
			||||
# the interface are included in the documentation. 
 | 
				
			||||
# If set to NO (the default) only methods in the interface are included.
 | 
				
			||||
 | 
				
			||||
EXTRACT_LOCAL_METHODS  = NO
 | 
				
			||||
 | 
				
			||||
# If this flag is set to YES, the members of anonymous namespaces will be 
 | 
				
			||||
# extracted and appear in the documentation as a namespace called 
 | 
				
			||||
# 'anonymous_namespace{file}', where file will be replaced with the base 
 | 
				
			||||
# name of the file that contains the anonymous namespace. By default 
 | 
				
			||||
# anonymous namespace are hidden.
 | 
				
			||||
 | 
				
			||||
EXTRACT_ANON_NSPACES   = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# undocumented members of documented classes, files or namespaces. 
 | 
				
			||||
# If set to NO (the default) these members will be included in the 
 | 
				
			||||
# various overviews, but no documentation section is generated. 
 | 
				
			||||
# This option has no effect if EXTRACT_ALL is enabled.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_MEMBERS     = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# undocumented classes that are normally visible in the class hierarchy. 
 | 
				
			||||
# If set to NO (the default) these classes will be included in the various 
 | 
				
			||||
# overviews. This option has no effect if EXTRACT_ALL is enabled.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_CLASSES     = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# friend (class|struct|union) declarations. 
 | 
				
			||||
# If set to NO (the default) these declarations will be included in the 
 | 
				
			||||
# documentation.
 | 
				
			||||
 | 
				
			||||
HIDE_FRIEND_COMPOUNDS  = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
 | 
				
			||||
# documentation blocks found inside the body of a function. 
 | 
				
			||||
# If set to NO (the default) these blocks will be appended to the 
 | 
				
			||||
# function's detailed documentation block.
 | 
				
			||||
 | 
				
			||||
HIDE_IN_BODY_DOCS      = NO
 | 
				
			||||
 | 
				
			||||
# The INTERNAL_DOCS tag determines if documentation 
 | 
				
			||||
# that is typed after a \internal command is included. If the tag is set 
 | 
				
			||||
# to NO (the default) then the documentation will be excluded. 
 | 
				
			||||
# Set it to YES to include the internal documentation.
 | 
				
			||||
 | 
				
			||||
INTERNAL_DOCS          = NO
 | 
				
			||||
 | 
				
			||||
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
 | 
				
			||||
# file names in lower-case letters. If set to YES upper-case letters are also 
 | 
				
			||||
# allowed. This is useful if you have classes or files whose names only differ 
 | 
				
			||||
# in case and if your file system supports case sensitive file names. Windows 
 | 
				
			||||
# and Mac users are advised to set this option to NO.
 | 
				
			||||
 | 
				
			||||
CASE_SENSE_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
 | 
				
			||||
# will show members with their full class and namespace scopes in the 
 | 
				
			||||
# documentation. If set to YES the scope will be hidden.
 | 
				
			||||
 | 
				
			||||
HIDE_SCOPE_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
 | 
				
			||||
# will put a list of the files that are included by a file in the documentation 
 | 
				
			||||
# of that file.
 | 
				
			||||
 | 
				
			||||
SHOW_INCLUDE_FILES     = YES
 | 
				
			||||
 | 
				
			||||
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
 | 
				
			||||
# is inserted in the documentation for inline members.
 | 
				
			||||
 | 
				
			||||
INLINE_INFO            = YES
 | 
				
			||||
 | 
				
			||||
# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
 | 
				
			||||
# will sort the (detailed) documentation of file and class members 
 | 
				
			||||
# alphabetically by member name. If set to NO the members will appear in 
 | 
				
			||||
# declaration order.
 | 
				
			||||
 | 
				
			||||
SORT_MEMBER_DOCS       = YES
 | 
				
			||||
 | 
				
			||||
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
 | 
				
			||||
# brief documentation of file, namespace and class members alphabetically 
 | 
				
			||||
# by member name. If set to NO (the default) the members will appear in 
 | 
				
			||||
# declaration order.
 | 
				
			||||
 | 
				
			||||
SORT_BRIEF_DOCS        = NO
 | 
				
			||||
 | 
				
			||||
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
 | 
				
			||||
# hierarchy of group names into alphabetical order. If set to NO (the default) 
 | 
				
			||||
# the group names will appear in their defined order.
 | 
				
			||||
 | 
				
			||||
SORT_GROUP_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
 | 
				
			||||
# sorted by fully-qualified names, including namespaces. If set to 
 | 
				
			||||
# NO (the default), the class list will be sorted only by class name, 
 | 
				
			||||
# not including the namespace part. 
 | 
				
			||||
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
 | 
				
			||||
# Note: This option applies only to the class list, not to the 
 | 
				
			||||
# alphabetical list.
 | 
				
			||||
 | 
				
			||||
SORT_BY_SCOPE_NAME     = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TODOLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the todo list. This list is created by putting \todo 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_TODOLIST      = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TESTLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the test list. This list is created by putting \test 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_TESTLIST      = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_BUGLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the bug list. This list is created by putting \bug 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_BUGLIST       = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the deprecated list. This list is created by putting 
 | 
				
			||||
# \deprecated commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_DEPRECATEDLIST= YES
 | 
				
			||||
 | 
				
			||||
# The ENABLED_SECTIONS tag can be used to enable conditional 
 | 
				
			||||
# documentation sections, marked by \if sectionname ... \endif.
 | 
				
			||||
 | 
				
			||||
ENABLED_SECTIONS       = 
 | 
				
			||||
 | 
				
			||||
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
 | 
				
			||||
# the initial value of a variable or define consists of for it to appear in 
 | 
				
			||||
# the documentation. If the initializer consists of more lines than specified 
 | 
				
			||||
# here it will be hidden. Use a value of 0 to hide initializers completely. 
 | 
				
			||||
# The appearance of the initializer of individual variables and defines in the 
 | 
				
			||||
# documentation can be controlled using \showinitializer or \hideinitializer 
 | 
				
			||||
# command in the documentation regardless of this setting.
 | 
				
			||||
 | 
				
			||||
MAX_INITIALIZER_LINES  = 30
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
 | 
				
			||||
# at the bottom of the documentation of classes and structs. If set to YES the 
 | 
				
			||||
# list will mention the files that were used to generate the documentation.
 | 
				
			||||
 | 
				
			||||
SHOW_USED_FILES        = YES
 | 
				
			||||
 | 
				
			||||
# If the sources in your project are distributed over multiple directories 
 | 
				
			||||
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
 | 
				
			||||
# in the documentation. The default is NO.
 | 
				
			||||
 | 
				
			||||
SHOW_DIRECTORIES       = YES
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
 | 
				
			||||
# This will remove the Files entry from the Quick Index and from the 
 | 
				
			||||
# Folder Tree View (if specified). The default is YES.
 | 
				
			||||
 | 
				
			||||
SHOW_FILES             = YES
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
 | 
				
			||||
# Namespaces page.  This will remove the Namespaces entry from the Quick Index
 | 
				
			||||
# and from the Folder Tree View (if specified). The default is YES.
 | 
				
			||||
 | 
				
			||||
SHOW_NAMESPACES        = YES
 | 
				
			||||
 | 
				
			||||
# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
 | 
				
			||||
# doxygen should invoke to get the current version for each file (typically from 
 | 
				
			||||
# the version control system). Doxygen will invoke the program by executing (via 
 | 
				
			||||
# popen()) the command <command> <input-file>, where <command> is the value of 
 | 
				
			||||
# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
 | 
				
			||||
# provided by doxygen. Whatever the program writes to standard output 
 | 
				
			||||
# is used as the file version. See the manual for examples.
 | 
				
			||||
 | 
				
			||||
FILE_VERSION_FILTER    = 
 | 
				
			||||
 | 
				
			||||
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
 | 
				
			||||
# doxygen. The layout file controls the global structure of the generated output files 
 | 
				
			||||
# in an output format independent way. The create the layout file that represents 
 | 
				
			||||
# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
 | 
				
			||||
# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
 | 
				
			||||
# of the layout file.
 | 
				
			||||
 | 
				
			||||
LAYOUT_FILE            = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to warning and progress messages
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The QUIET tag can be used to turn on/off the messages that are generated 
 | 
				
			||||
# by doxygen. Possible values are YES and NO. If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
QUIET                  = YES
 | 
				
			||||
 | 
				
			||||
# The WARNINGS tag can be used to turn on/off the warning messages that are 
 | 
				
			||||
# generated by doxygen. Possible values are YES and NO. If left blank 
 | 
				
			||||
# NO is used.
 | 
				
			||||
 | 
				
			||||
WARNINGS               = YES
 | 
				
			||||
 | 
				
			||||
# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
 | 
				
			||||
# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
 | 
				
			||||
# automatically be disabled.
 | 
				
			||||
 | 
				
			||||
WARN_IF_UNDOCUMENTED   = YES
 | 
				
			||||
 | 
				
			||||
# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
 | 
				
			||||
# potential errors in the documentation, such as not documenting some 
 | 
				
			||||
# parameters in a documented function, or documenting parameters that 
 | 
				
			||||
# don't exist or using markup commands wrongly.
 | 
				
			||||
 | 
				
			||||
WARN_IF_DOC_ERROR      = YES
 | 
				
			||||
 | 
				
			||||
# This WARN_NO_PARAMDOC option can be abled to get warnings for 
 | 
				
			||||
# functions that are documented, but have no documentation for their parameters 
 | 
				
			||||
# or return value. If set to NO (the default) doxygen will only warn about 
 | 
				
			||||
# wrong or incomplete parameter documentation, but not about the absence of 
 | 
				
			||||
# documentation.
 | 
				
			||||
 | 
				
			||||
WARN_NO_PARAMDOC       = YES
 | 
				
			||||
 | 
				
			||||
# The WARN_FORMAT tag determines the format of the warning messages that 
 | 
				
			||||
# doxygen can produce. The string should contain the $file, $line, and $text 
 | 
				
			||||
# tags, which will be replaced by the file and line number from which the 
 | 
				
			||||
# warning originated and the warning text. Optionally the format may contain 
 | 
				
			||||
# $version, which will be replaced by the version of the file (if it could 
 | 
				
			||||
# be obtained via FILE_VERSION_FILTER)
 | 
				
			||||
 | 
				
			||||
WARN_FORMAT            = "$file:$line: $text"
 | 
				
			||||
 | 
				
			||||
# The WARN_LOGFILE tag can be used to specify a file to which warning 
 | 
				
			||||
# and error messages should be written. If left blank the output is written 
 | 
				
			||||
# to stderr.
 | 
				
			||||
 | 
				
			||||
WARN_LOGFILE           = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the input files
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The INPUT tag can be used to specify the files and/or directories that contain 
 | 
				
			||||
# documented source files. You may enter file names like "myfile.cpp" or 
 | 
				
			||||
# directories like "/usr/src/myproject". Separate the files or directories 
 | 
				
			||||
# with spaces.
 | 
				
			||||
 | 
				
			||||
INPUT                  = ./
 | 
				
			||||
 | 
				
			||||
# This tag can be used to specify the character encoding of the source files 
 | 
				
			||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
 | 
				
			||||
# also the default input encoding. Doxygen uses libiconv (or the iconv built 
 | 
				
			||||
# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
 | 
				
			||||
# the list of possible encodings.
 | 
				
			||||
 | 
				
			||||
INPUT_ENCODING         = UTF-8
 | 
				
			||||
 | 
				
			||||
# If the value of the INPUT tag contains directories, you can use the 
 | 
				
			||||
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 | 
				
			||||
# and *.h) to filter out the source-files in the directories. If left 
 | 
				
			||||
# blank the following patterns are tested: 
 | 
				
			||||
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
 | 
				
			||||
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 | 
				
			||||
 | 
				
			||||
FILE_PATTERNS          = *.h \
 | 
				
			||||
                         *.c \
 | 
				
			||||
						 *.txt
 | 
				
			||||
 | 
				
			||||
# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 | 
				
			||||
# should be searched for input files as well. Possible values are YES and NO. 
 | 
				
			||||
# If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
RECURSIVE              = YES
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE tag can be used to specify files and/or directories that should 
 | 
				
			||||
# excluded from the INPUT source files. This way you can easily exclude a 
 | 
				
			||||
# subdirectory from a directory tree whose root is specified with the INPUT tag.
 | 
				
			||||
 | 
				
			||||
EXCLUDE                = 
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
 | 
				
			||||
# directories that are symbolic links (a Unix filesystem feature) are excluded 
 | 
				
			||||
# from the input.
 | 
				
			||||
 | 
				
			||||
EXCLUDE_SYMLINKS       = NO
 | 
				
			||||
 | 
				
			||||
# If the value of the INPUT tag contains directories, you can use the 
 | 
				
			||||
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
 | 
				
			||||
# certain files from those directories. Note that the wildcards are matched 
 | 
				
			||||
# against the file with absolute path, so to exclude all test directories 
 | 
				
			||||
# for example use the pattern */test/*
 | 
				
			||||
 | 
				
			||||
EXCLUDE_PATTERNS       = */LowLevel/USBMode.h
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
 | 
				
			||||
# (namespaces, classes, functions, etc.) that should be excluded from the 
 | 
				
			||||
# output. The symbol name can be a fully qualified name, a word, or if the 
 | 
				
			||||
# wildcard * is used, a substring. Examples: ANamespace, AClass, 
 | 
				
			||||
# AClass::ANamespace, ANamespace::*Test
 | 
				
			||||
 | 
				
			||||
EXCLUDE_SYMBOLS        = __*
 | 
				
			||||
 | 
				
			||||
# The EXAMPLE_PATH tag can be used to specify one or more files or 
 | 
				
			||||
# directories that contain example code fragments that are included (see 
 | 
				
			||||
# the \include command).
 | 
				
			||||
 | 
				
			||||
EXAMPLE_PATH           = 
 | 
				
			||||
 | 
				
			||||
# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
 | 
				
			||||
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 | 
				
			||||
# and *.h) to filter out the source-files in the directories. If left 
 | 
				
			||||
# blank all files are included.
 | 
				
			||||
 | 
				
			||||
EXAMPLE_PATTERNS       = *
 | 
				
			||||
 | 
				
			||||
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
 | 
				
			||||
# searched for input files to be used with the \include or \dontinclude 
 | 
				
			||||
# commands irrespective of the value of the RECURSIVE tag. 
 | 
				
			||||
# Possible values are YES and NO. If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
EXAMPLE_RECURSIVE      = NO
 | 
				
			||||
 | 
				
			||||
# The IMAGE_PATH tag can be used to specify one or more files or 
 | 
				
			||||
# directories that contain image that are included in the documentation (see 
 | 
				
			||||
# the \image command).
 | 
				
			||||
 | 
				
			||||
IMAGE_PATH             = 
 | 
				
			||||
 | 
				
			||||
# The INPUT_FILTER tag can be used to specify a program that doxygen should 
 | 
				
			||||
# invoke to filter for each input file. Doxygen will invoke the filter program 
 | 
				
			||||
# by executing (via popen()) the command <filter> <input-file>, where <filter> 
 | 
				
			||||
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
 | 
				
			||||
# input file. Doxygen will then use the output that the filter program writes 
 | 
				
			||||
# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
 | 
				
			||||
# ignored.
 | 
				
			||||
 | 
				
			||||
INPUT_FILTER           = 
 | 
				
			||||
 | 
				
			||||
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
 | 
				
			||||
# basis.  Doxygen will compare the file name with each pattern and apply the 
 | 
				
			||||
# filter if there is a match.  The filters are a list of the form: 
 | 
				
			||||
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
 | 
				
			||||
# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
 | 
				
			||||
# is applied to all files.
 | 
				
			||||
 | 
				
			||||
FILTER_PATTERNS        = 
 | 
				
			||||
 | 
				
			||||
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
 | 
				
			||||
# INPUT_FILTER) will be used to filter the input files when producing source 
 | 
				
			||||
# files to browse (i.e. when SOURCE_BROWSER is set to YES).
 | 
				
			||||
 | 
				
			||||
FILTER_SOURCE_FILES    = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to source browsing
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
 | 
				
			||||
# be generated. Documented entities will be cross-referenced with these sources. 
 | 
				
			||||
# Note: To get rid of all source code in the generated output, make sure also 
 | 
				
			||||
# VERBATIM_HEADERS is set to NO.
 | 
				
			||||
 | 
				
			||||
SOURCE_BROWSER         = NO
 | 
				
			||||
 | 
				
			||||
# Setting the INLINE_SOURCES tag to YES will include the body 
 | 
				
			||||
# of functions and classes directly in the documentation.
 | 
				
			||||
 | 
				
			||||
INLINE_SOURCES         = NO
 | 
				
			||||
 | 
				
			||||
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
 | 
				
			||||
# doxygen to hide any special comment blocks from generated source code 
 | 
				
			||||
# fragments. Normal C and C++ comments will always remain visible.
 | 
				
			||||
 | 
				
			||||
STRIP_CODE_COMMENTS    = YES
 | 
				
			||||
 | 
				
			||||
# If the REFERENCED_BY_RELATION tag is set to YES 
 | 
				
			||||
# then for each documented function all documented 
 | 
				
			||||
# functions referencing it will be listed.
 | 
				
			||||
 | 
				
			||||
REFERENCED_BY_RELATION = NO
 | 
				
			||||
 | 
				
			||||
# If the REFERENCES_RELATION tag is set to YES 
 | 
				
			||||
# then for each documented function all documented entities 
 | 
				
			||||
# called/used by that function will be listed.
 | 
				
			||||
 | 
				
			||||
REFERENCES_RELATION    = NO
 | 
				
			||||
 | 
				
			||||
# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
 | 
				
			||||
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
 | 
				
			||||
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
 | 
				
			||||
# link to the source code.  Otherwise they will link to the documentstion.
 | 
				
			||||
 | 
				
			||||
REFERENCES_LINK_SOURCE = NO
 | 
				
			||||
 | 
				
			||||
# If the USE_HTAGS tag is set to YES then the references to source code 
 | 
				
			||||
# will point to the HTML generated by the htags(1) tool instead of doxygen 
 | 
				
			||||
# built-in source browser. The htags tool is part of GNU's global source 
 | 
				
			||||
# tagging system (see http://www.gnu.org/software/global/global.html). You 
 | 
				
			||||
# will need version 4.8.6 or higher.
 | 
				
			||||
 | 
				
			||||
USE_HTAGS              = NO
 | 
				
			||||
 | 
				
			||||
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
 | 
				
			||||
# will generate a verbatim copy of the header file for each class for 
 | 
				
			||||
# which an include is specified. Set to NO to disable this.
 | 
				
			||||
 | 
				
			||||
VERBATIM_HEADERS       = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the alphabetical class index
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
 | 
				
			||||
# of all compounds will be generated. Enable this if the project 
 | 
				
			||||
# contains a lot of classes, structs, unions or interfaces.
 | 
				
			||||
 | 
				
			||||
ALPHABETICAL_INDEX     = YES
 | 
				
			||||
 | 
				
			||||
# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
 | 
				
			||||
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
 | 
				
			||||
# in which this list will be split (can be a number in the range [1..20])
 | 
				
			||||
 | 
				
			||||
COLS_IN_ALPHA_INDEX    = 5
 | 
				
			||||
 | 
				
			||||
# In case all classes in a project start with a common prefix, all 
 | 
				
			||||
# classes will be put under the same header in the alphabetical index. 
 | 
				
			||||
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
 | 
				
			||||
# should be ignored while generating the index headers.
 | 
				
			||||
 | 
				
			||||
IGNORE_PREFIX          = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the HTML output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate HTML output.
 | 
				
			||||
 | 
				
			||||
GENERATE_HTML          = YES
 | 
				
			||||
 | 
				
			||||
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `html' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
HTML_OUTPUT            = html
 | 
				
			||||
 | 
				
			||||
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
 | 
				
			||||
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
 | 
				
			||||
# doxygen will generate files with .html extension.
 | 
				
			||||
 | 
				
			||||
HTML_FILE_EXTENSION    = .html
 | 
				
			||||
 | 
				
			||||
# The HTML_HEADER tag can be used to specify a personal HTML header for 
 | 
				
			||||
# each generated HTML page. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard header.
 | 
				
			||||
 | 
				
			||||
HTML_HEADER            = 
 | 
				
			||||
 | 
				
			||||
# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
 | 
				
			||||
# each generated HTML page. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard footer.
 | 
				
			||||
 | 
				
			||||
HTML_FOOTER            = 
 | 
				
			||||
 | 
				
			||||
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
 | 
				
			||||
# style sheet that is used by each HTML page. It can be used to 
 | 
				
			||||
# fine-tune the look of the HTML output. If the tag is left blank doxygen 
 | 
				
			||||
# will generate a default style sheet. Note that doxygen will try to copy 
 | 
				
			||||
# the style sheet file to the HTML output directory, so don't put your own 
 | 
				
			||||
# stylesheet in the HTML output directory as well, or it will be erased!
 | 
				
			||||
 | 
				
			||||
HTML_STYLESHEET        = 
 | 
				
			||||
 | 
				
			||||
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
 | 
				
			||||
# files or namespaces will be aligned in HTML using tables. If set to 
 | 
				
			||||
# NO a bullet list will be used.
 | 
				
			||||
 | 
				
			||||
HTML_ALIGN_MEMBERS     = YES
 | 
				
			||||
 | 
				
			||||
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
 | 
				
			||||
# documentation will contain sections that can be hidden and shown after the 
 | 
				
			||||
# page has loaded. For this to work a browser that supports 
 | 
				
			||||
# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
 | 
				
			||||
# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
 | 
				
			||||
 | 
				
			||||
HTML_DYNAMIC_SECTIONS  = YES
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_DOCSET tag is set to YES, additional index files 
 | 
				
			||||
# will be generated that can be used as input for Apple's Xcode 3 
 | 
				
			||||
# integrated development environment, introduced with OSX 10.5 (Leopard). 
 | 
				
			||||
# To create a documentation set, doxygen will generate a Makefile in the 
 | 
				
			||||
# HTML output directory. Running make will produce the docset in that 
 | 
				
			||||
# directory and running "make install" will install the docset in 
 | 
				
			||||
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
 | 
				
			||||
# it at startup. 
 | 
				
			||||
# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
 | 
				
			||||
 | 
				
			||||
GENERATE_DOCSET        = NO
 | 
				
			||||
 | 
				
			||||
# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
 | 
				
			||||
# feed. A documentation feed provides an umbrella under which multiple 
 | 
				
			||||
# documentation sets from a single provider (such as a company or product suite) 
 | 
				
			||||
# can be grouped.
 | 
				
			||||
 | 
				
			||||
DOCSET_FEEDNAME        = "Doxygen generated docs"
 | 
				
			||||
 | 
				
			||||
# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
 | 
				
			||||
# should uniquely identify the documentation set bundle. This should be a 
 | 
				
			||||
# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
 | 
				
			||||
# will append .docset to the name.
 | 
				
			||||
 | 
				
			||||
DOCSET_BUNDLE_ID       = org.doxygen.Project
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
 | 
				
			||||
# will be generated that can be used as input for tools like the 
 | 
				
			||||
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
 | 
				
			||||
# of the generated HTML documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_HTMLHELP      = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
 | 
				
			||||
# be used to specify the file name of the resulting .chm file. You 
 | 
				
			||||
# can add a path in front of the file if the result should not be 
 | 
				
			||||
# written to the html output directory.
 | 
				
			||||
 | 
				
			||||
CHM_FILE               = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
 | 
				
			||||
# be used to specify the location (absolute path including file name) of 
 | 
				
			||||
# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
 | 
				
			||||
# the HTML help compiler on the generated index.hhp.
 | 
				
			||||
 | 
				
			||||
HHC_LOCATION           = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
 | 
				
			||||
# controls if a separate .chi index file is generated (YES) or that 
 | 
				
			||||
# it should be included in the master .chm file (NO).
 | 
				
			||||
 | 
				
			||||
GENERATE_CHI           = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
 | 
				
			||||
# is used to encode HtmlHelp index (hhk), content (hhc) and project file
 | 
				
			||||
# content.
 | 
				
			||||
 | 
				
			||||
CHM_INDEX_ENCODING     = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
 | 
				
			||||
# controls whether a binary table of contents is generated (YES) or a 
 | 
				
			||||
# normal table of contents (NO) in the .chm file.
 | 
				
			||||
 | 
				
			||||
BINARY_TOC             = NO
 | 
				
			||||
 | 
				
			||||
# The TOC_EXPAND flag can be set to YES to add extra items for group members 
 | 
				
			||||
# to the contents of the HTML help documentation and to the tree view.
 | 
				
			||||
 | 
				
			||||
TOC_EXPAND             = YES
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
 | 
				
			||||
# are set, an additional index file will be generated that can be used as input for 
 | 
				
			||||
# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
 | 
				
			||||
# HTML documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_QHP           = NO
 | 
				
			||||
 | 
				
			||||
# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
 | 
				
			||||
# be used to specify the file name of the resulting .qch file. 
 | 
				
			||||
# The path specified is relative to the HTML output folder.
 | 
				
			||||
 | 
				
			||||
QCH_FILE               = 
 | 
				
			||||
 | 
				
			||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating 
 | 
				
			||||
# Qt Help Project output. For more information please see 
 | 
				
			||||
# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.
 | 
				
			||||
 | 
				
			||||
QHP_NAMESPACE          = org.doxygen.Project
 | 
				
			||||
 | 
				
			||||
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
 | 
				
			||||
# Qt Help Project output. For more information please see 
 | 
				
			||||
# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.
 | 
				
			||||
 | 
				
			||||
QHP_VIRTUAL_FOLDER     = doc
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
 | 
				
			||||
# be used to specify the location of Qt's qhelpgenerator. 
 | 
				
			||||
# If non-empty doxygen will try to run qhelpgenerator on the generated 
 | 
				
			||||
# .qhp file .
 | 
				
			||||
 | 
				
			||||
QHG_LOCATION           = 
 | 
				
			||||
 | 
				
			||||
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
 | 
				
			||||
# top of each HTML page. The value NO (the default) enables the index and 
 | 
				
			||||
# the value YES disables it.
 | 
				
			||||
 | 
				
			||||
DISABLE_INDEX          = NO
 | 
				
			||||
 | 
				
			||||
# This tag can be used to set the number of enum values (range [1..20]) 
 | 
				
			||||
# that doxygen will group on one line in the generated HTML documentation.
 | 
				
			||||
 | 
				
			||||
ENUM_VALUES_PER_LINE   = 1
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
 | 
				
			||||
# structure should be generated to display hierarchical information.
 | 
				
			||||
# If the tag value is set to FRAME, a side panel will be generated
 | 
				
			||||
# containing a tree-like index structure (just like the one that 
 | 
				
			||||
# is generated for HTML Help). For this to work a browser that supports 
 | 
				
			||||
# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
 | 
				
			||||
# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
 | 
				
			||||
# probably better off using the HTML help feature. Other possible values 
 | 
				
			||||
# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
 | 
				
			||||
# and Class Hierarchy pages using a tree view instead of an ordered list;
 | 
				
			||||
# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
 | 
				
			||||
# disables this behavior completely. For backwards compatibility with previous
 | 
				
			||||
# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
 | 
				
			||||
# respectively.
 | 
				
			||||
 | 
				
			||||
GENERATE_TREEVIEW      = YES
 | 
				
			||||
 | 
				
			||||
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
 | 
				
			||||
# used to set the initial width (in pixels) of the frame in which the tree 
 | 
				
			||||
# is shown.
 | 
				
			||||
 | 
				
			||||
TREEVIEW_WIDTH         = 250
 | 
				
			||||
 | 
				
			||||
# Use this tag to change the font size of Latex formulas included 
 | 
				
			||||
# as images in the HTML documentation. The default is 10. Note that 
 | 
				
			||||
# when you change the font size after a successful doxygen run you need 
 | 
				
			||||
# to manually remove any form_*.png images from the HTML output directory 
 | 
				
			||||
# to force them to be regenerated.
 | 
				
			||||
 | 
				
			||||
FORMULA_FONTSIZE       = 10
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the LaTeX output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate Latex output.
 | 
				
			||||
 | 
				
			||||
GENERATE_LATEX         = NO
 | 
				
			||||
 | 
				
			||||
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `latex' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
LATEX_OUTPUT           = latex
 | 
				
			||||
 | 
				
			||||
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
 | 
				
			||||
# invoked. If left blank `latex' will be used as the default command name.
 | 
				
			||||
 | 
				
			||||
LATEX_CMD_NAME         = latex
 | 
				
			||||
 | 
				
			||||
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
 | 
				
			||||
# generate index for LaTeX. If left blank `makeindex' will be used as the 
 | 
				
			||||
# default command name.
 | 
				
			||||
 | 
				
			||||
MAKEINDEX_CMD_NAME     = makeindex
 | 
				
			||||
 | 
				
			||||
# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
 | 
				
			||||
# LaTeX documents. This may be useful for small projects and may help to 
 | 
				
			||||
# save some trees in general.
 | 
				
			||||
 | 
				
			||||
COMPACT_LATEX          = NO
 | 
				
			||||
 | 
				
			||||
# The PAPER_TYPE tag can be used to set the paper type that is used 
 | 
				
			||||
# by the printer. Possible values are: a4, a4wide, letter, legal and 
 | 
				
			||||
# executive. If left blank a4wide will be used.
 | 
				
			||||
 | 
				
			||||
PAPER_TYPE             = a4wide
 | 
				
			||||
 | 
				
			||||
# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
 | 
				
			||||
# packages that should be included in the LaTeX output.
 | 
				
			||||
 | 
				
			||||
EXTRA_PACKAGES         = 
 | 
				
			||||
 | 
				
			||||
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
 | 
				
			||||
# the generated latex document. The header should contain everything until 
 | 
				
			||||
# the first chapter. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard header. Notice: only use this tag if you know what you are doing!
 | 
				
			||||
 | 
				
			||||
LATEX_HEADER           = 
 | 
				
			||||
 | 
				
			||||
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
 | 
				
			||||
# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
 | 
				
			||||
# contain links (just like the HTML output) instead of page references 
 | 
				
			||||
# This makes the output suitable for online browsing using a pdf viewer.
 | 
				
			||||
 | 
				
			||||
PDF_HYPERLINKS         = YES
 | 
				
			||||
 | 
				
			||||
# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
 | 
				
			||||
# plain latex in the generated Makefile. Set this option to YES to get a 
 | 
				
			||||
# higher quality PDF documentation.
 | 
				
			||||
 | 
				
			||||
USE_PDFLATEX           = YES
 | 
				
			||||
 | 
				
			||||
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
 | 
				
			||||
# command to the generated LaTeX files. This will instruct LaTeX to keep 
 | 
				
			||||
# running if errors occur, instead of asking the user for help. 
 | 
				
			||||
# This option is also used when generating formulas in HTML.
 | 
				
			||||
 | 
				
			||||
LATEX_BATCHMODE        = NO
 | 
				
			||||
 | 
				
			||||
# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
 | 
				
			||||
# include the index chapters (such as File Index, Compound Index, etc.) 
 | 
				
			||||
# in the output.
 | 
				
			||||
 | 
				
			||||
LATEX_HIDE_INDICES     = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the RTF output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
 | 
				
			||||
# The RTF output is optimized for Word 97 and may not look very pretty with 
 | 
				
			||||
# other RTF readers or editors.
 | 
				
			||||
 | 
				
			||||
GENERATE_RTF           = NO
 | 
				
			||||
 | 
				
			||||
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `rtf' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
RTF_OUTPUT             = rtf
 | 
				
			||||
 | 
				
			||||
# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
 | 
				
			||||
# RTF documents. This may be useful for small projects and may help to 
 | 
				
			||||
# save some trees in general.
 | 
				
			||||
 | 
				
			||||
COMPACT_RTF            = NO
 | 
				
			||||
 | 
				
			||||
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
 | 
				
			||||
# will contain hyperlink fields. The RTF file will 
 | 
				
			||||
# contain links (just like the HTML output) instead of page references. 
 | 
				
			||||
# This makes the output suitable for online browsing using WORD or other 
 | 
				
			||||
# programs which support those fields. 
 | 
				
			||||
# Note: wordpad (write) and others do not support links.
 | 
				
			||||
 | 
				
			||||
RTF_HYPERLINKS         = NO
 | 
				
			||||
 | 
				
			||||
# Load stylesheet definitions from file. Syntax is similar to doxygen's 
 | 
				
			||||
# config file, i.e. a series of assignments. You only have to provide 
 | 
				
			||||
# replacements, missing definitions are set to their default value.
 | 
				
			||||
 | 
				
			||||
RTF_STYLESHEET_FILE    = 
 | 
				
			||||
 | 
				
			||||
# Set optional variables used in the generation of an rtf document. 
 | 
				
			||||
# Syntax is similar to doxygen's config file.
 | 
				
			||||
 | 
				
			||||
RTF_EXTENSIONS_FILE    = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the man page output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate man pages
 | 
				
			||||
 | 
				
			||||
GENERATE_MAN           = NO
 | 
				
			||||
 | 
				
			||||
# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `man' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
MAN_OUTPUT             = man
 | 
				
			||||
 | 
				
			||||
# The MAN_EXTENSION tag determines the extension that is added to 
 | 
				
			||||
# the generated man pages (default is the subroutine's section .3)
 | 
				
			||||
 | 
				
			||||
MAN_EXTENSION          = .3
 | 
				
			||||
 | 
				
			||||
# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
 | 
				
			||||
# then it will generate one additional man file for each entity 
 | 
				
			||||
# documented in the real man page(s). These additional files 
 | 
				
			||||
# only source the real man page, but without them the man command 
 | 
				
			||||
# would be unable to find the correct page. The default is NO.
 | 
				
			||||
 | 
				
			||||
MAN_LINKS              = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the XML output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_XML tag is set to YES Doxygen will 
 | 
				
			||||
# generate an XML file that captures the structure of 
 | 
				
			||||
# the code including all documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_XML           = NO
 | 
				
			||||
 | 
				
			||||
# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `xml' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
XML_OUTPUT             = xml
 | 
				
			||||
 | 
				
			||||
# The XML_SCHEMA tag can be used to specify an XML schema, 
 | 
				
			||||
# which can be used by a validating XML parser to check the 
 | 
				
			||||
# syntax of the XML files.
 | 
				
			||||
 | 
				
			||||
XML_SCHEMA             = 
 | 
				
			||||
 | 
				
			||||
# The XML_DTD tag can be used to specify an XML DTD, 
 | 
				
			||||
# which can be used by a validating XML parser to check the 
 | 
				
			||||
# syntax of the XML files.
 | 
				
			||||
 | 
				
			||||
XML_DTD                = 
 | 
				
			||||
 | 
				
			||||
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
 | 
				
			||||
# dump the program listings (including syntax highlighting 
 | 
				
			||||
# and cross-referencing information) to the XML output. Note that 
 | 
				
			||||
# enabling this will significantly increase the size of the XML output.
 | 
				
			||||
 | 
				
			||||
XML_PROGRAMLISTING     = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options for the AutoGen Definitions output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
 | 
				
			||||
# generate an AutoGen Definitions (see autogen.sf.net) file 
 | 
				
			||||
# that captures the structure of the code including all 
 | 
				
			||||
# documentation. Note that this feature is still experimental 
 | 
				
			||||
# and incomplete at the moment.
 | 
				
			||||
 | 
				
			||||
GENERATE_AUTOGEN_DEF   = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the Perl module output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
 | 
				
			||||
# generate a Perl module file that captures the structure of 
 | 
				
			||||
# the code including all documentation. Note that this 
 | 
				
			||||
# feature is still experimental and incomplete at the 
 | 
				
			||||
# moment.
 | 
				
			||||
 | 
				
			||||
GENERATE_PERLMOD       = NO
 | 
				
			||||
 | 
				
			||||
# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
 | 
				
			||||
# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
 | 
				
			||||
# to generate PDF and DVI output from the Perl module output.
 | 
				
			||||
 | 
				
			||||
PERLMOD_LATEX          = NO
 | 
				
			||||
 | 
				
			||||
# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
 | 
				
			||||
# nicely formatted so it can be parsed by a human reader.  This is useful 
 | 
				
			||||
# if you want to understand what is going on.  On the other hand, if this 
 | 
				
			||||
# tag is set to NO the size of the Perl module output will be much smaller 
 | 
				
			||||
# and Perl will parse it just the same.
 | 
				
			||||
 | 
				
			||||
PERLMOD_PRETTY         = YES
 | 
				
			||||
 | 
				
			||||
# The names of the make variables in the generated doxyrules.make file 
 | 
				
			||||
# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
 | 
				
			||||
# This is useful so different doxyrules.make files included by the same 
 | 
				
			||||
# Makefile don't overwrite each other's variables.
 | 
				
			||||
 | 
				
			||||
PERLMOD_MAKEVAR_PREFIX = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration options related to the preprocessor   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# evaluate all C-preprocessor directives found in the sources and include 
 | 
				
			||||
# files.
 | 
				
			||||
 | 
				
			||||
ENABLE_PREPROCESSING   = YES
 | 
				
			||||
 | 
				
			||||
# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
 | 
				
			||||
# names in the source code. If set to NO (the default) only conditional 
 | 
				
			||||
# compilation will be performed. Macro expansion can be done in a controlled 
 | 
				
			||||
# way by setting EXPAND_ONLY_PREDEF to YES.
 | 
				
			||||
 | 
				
			||||
MACRO_EXPANSION        = YES
 | 
				
			||||
 | 
				
			||||
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
 | 
				
			||||
# then the macro expansion is limited to the macros specified with the 
 | 
				
			||||
# PREDEFINED and EXPAND_AS_DEFINED tags.
 | 
				
			||||
 | 
				
			||||
EXPAND_ONLY_PREDEF     = YES
 | 
				
			||||
 | 
				
			||||
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
 | 
				
			||||
# in the INCLUDE_PATH (see below) will be search if a #include is found.
 | 
				
			||||
 | 
				
			||||
SEARCH_INCLUDES        = YES
 | 
				
			||||
 | 
				
			||||
# The INCLUDE_PATH tag can be used to specify one or more directories that 
 | 
				
			||||
# contain include files that are not input files but should be processed by 
 | 
				
			||||
# the preprocessor.
 | 
				
			||||
 | 
				
			||||
INCLUDE_PATH           = 
 | 
				
			||||
 | 
				
			||||
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
 | 
				
			||||
# patterns (like *.h and *.hpp) to filter out the header-files in the 
 | 
				
			||||
# directories. If left blank, the patterns specified with FILE_PATTERNS will 
 | 
				
			||||
# be used.
 | 
				
			||||
 | 
				
			||||
INCLUDE_FILE_PATTERNS  = 
 | 
				
			||||
 | 
				
			||||
# The PREDEFINED tag can be used to specify one or more macro names that 
 | 
				
			||||
# are defined before the preprocessor is started (similar to the -D option of 
 | 
				
			||||
# gcc). The argument of the tag is a list of macros of the form: name 
 | 
				
			||||
# or name=definition (no spaces). If the definition and the = are 
 | 
				
			||||
# omitted =1 is assumed. To prevent a macro definition from being 
 | 
				
			||||
# undefined via #undef or recursively expanded use the := operator 
 | 
				
			||||
# instead of the = operator.
 | 
				
			||||
 | 
				
			||||
PREDEFINED             = __DOXYGEN__
 | 
				
			||||
 | 
				
			||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
 | 
				
			||||
# this tag can be used to specify a list of macro names that should be expanded. 
 | 
				
			||||
# The macro definition that is found in the sources will be used. 
 | 
				
			||||
# Use the PREDEFINED tag if you want to use a different macro definition.
 | 
				
			||||
 | 
				
			||||
EXPAND_AS_DEFINED      = BUTTLOADTAG
 | 
				
			||||
 | 
				
			||||
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
 | 
				
			||||
# doxygen's preprocessor will remove all function-like macros that are alone 
 | 
				
			||||
# on a line, have an all uppercase name, and do not end with a semicolon. Such 
 | 
				
			||||
# function macros are typically used for boiler-plate code, and will confuse 
 | 
				
			||||
# the parser if not removed.
 | 
				
			||||
 | 
				
			||||
SKIP_FUNCTION_MACROS   = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration::additions related to external references   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The TAGFILES option can be used to specify one or more tagfiles. 
 | 
				
			||||
# Optionally an initial location of the external documentation 
 | 
				
			||||
# can be added for each tagfile. The format of a tag file without 
 | 
				
			||||
# this location is as follows: 
 | 
				
			||||
#   TAGFILES = file1 file2 ... 
 | 
				
			||||
# Adding location for the tag files is done as follows: 
 | 
				
			||||
#   TAGFILES = file1=loc1 "file2 = loc2" ... 
 | 
				
			||||
# where "loc1" and "loc2" can be relative or absolute paths or 
 | 
				
			||||
# URLs. If a location is present for each tag, the installdox tool 
 | 
				
			||||
# does not have to be run to correct the links.
 | 
				
			||||
# Note that each tag file must have a unique name
 | 
				
			||||
# (where the name does NOT include the path)
 | 
				
			||||
# If a tag file is not located in the directory in which doxygen 
 | 
				
			||||
# is run, you must also specify the path to the tagfile here.
 | 
				
			||||
 | 
				
			||||
TAGFILES               = 
 | 
				
			||||
 | 
				
			||||
# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
 | 
				
			||||
# a tag file that is based on the input files it reads.
 | 
				
			||||
 | 
				
			||||
GENERATE_TAGFILE       = 
 | 
				
			||||
 | 
				
			||||
# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
 | 
				
			||||
# in the class index. If set to NO only the inherited external classes 
 | 
				
			||||
# will be listed.
 | 
				
			||||
 | 
				
			||||
ALLEXTERNALS           = NO
 | 
				
			||||
 | 
				
			||||
# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
 | 
				
			||||
# in the modules index. If set to NO, only the current project's groups will 
 | 
				
			||||
# be listed.
 | 
				
			||||
 | 
				
			||||
EXTERNAL_GROUPS        = YES
 | 
				
			||||
 | 
				
			||||
# The PERL_PATH should be the absolute path and name of the perl script 
 | 
				
			||||
# interpreter (i.e. the result of `which perl').
 | 
				
			||||
 | 
				
			||||
PERL_PATH              = /usr/bin/perl
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration options related to the dot tool   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
 | 
				
			||||
# or super classes. Setting the tag to NO turns the diagrams off. Note that 
 | 
				
			||||
# this option is superseded by the HAVE_DOT option below. This is only a 
 | 
				
			||||
# fallback. It is recommended to install and use dot, since it yields more 
 | 
				
			||||
# powerful graphs.
 | 
				
			||||
 | 
				
			||||
CLASS_DIAGRAMS         = NO
 | 
				
			||||
 | 
				
			||||
# You can define message sequence charts within doxygen comments using the \msc 
 | 
				
			||||
# command. Doxygen will then run the mscgen tool (see 
 | 
				
			||||
# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
 | 
				
			||||
# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
 | 
				
			||||
# the mscgen tool resides. If left empty the tool is assumed to be found in the 
 | 
				
			||||
# default search path.
 | 
				
			||||
 | 
				
			||||
MSCGEN_PATH            = 
 | 
				
			||||
 | 
				
			||||
# If set to YES, the inheritance and collaboration graphs will hide 
 | 
				
			||||
# inheritance and usage relations if the target is undocumented 
 | 
				
			||||
# or is not a class.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_RELATIONS   = YES
 | 
				
			||||
 | 
				
			||||
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
 | 
				
			||||
# available from the path. This tool is part of Graphviz, a graph visualization 
 | 
				
			||||
# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
 | 
				
			||||
# have no effect if this option is set to NO (the default)
 | 
				
			||||
 | 
				
			||||
HAVE_DOT               = NO
 | 
				
			||||
 | 
				
			||||
# By default doxygen will write a font called FreeSans.ttf to the output 
 | 
				
			||||
# directory and reference it in all dot files that doxygen generates. This 
 | 
				
			||||
# font does not include all possible unicode characters however, so when you need 
 | 
				
			||||
# these (or just want a differently looking font) you can specify the font name 
 | 
				
			||||
# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
 | 
				
			||||
# which can be done by putting it in a standard location or by setting the 
 | 
				
			||||
# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
 | 
				
			||||
# containing the font.
 | 
				
			||||
 | 
				
			||||
DOT_FONTNAME           = FreeSans
 | 
				
			||||
 | 
				
			||||
# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
 | 
				
			||||
# The default size is 10pt.
 | 
				
			||||
 | 
				
			||||
DOT_FONTSIZE           = 10
 | 
				
			||||
 | 
				
			||||
# By default doxygen will tell dot to use the output directory to look for the 
 | 
				
			||||
# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
 | 
				
			||||
# different font using DOT_FONTNAME you can set the path where dot 
 | 
				
			||||
# can find it using this tag.
 | 
				
			||||
 | 
				
			||||
DOT_FONTPATH           = 
 | 
				
			||||
 | 
				
			||||
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for each documented class showing the direct and 
 | 
				
			||||
# indirect inheritance relations. Setting this tag to YES will force the 
 | 
				
			||||
# the CLASS_DIAGRAMS tag to NO.
 | 
				
			||||
 | 
				
			||||
CLASS_GRAPH            = NO
 | 
				
			||||
 | 
				
			||||
# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for each documented class showing the direct and 
 | 
				
			||||
# indirect implementation dependencies (inheritance, containment, and 
 | 
				
			||||
# class references variables) of the class with other documented classes.
 | 
				
			||||
 | 
				
			||||
COLLABORATION_GRAPH    = NO
 | 
				
			||||
 | 
				
			||||
# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for groups, showing the direct groups dependencies
 | 
				
			||||
 | 
				
			||||
GROUP_GRAPHS           = NO
 | 
				
			||||
 | 
				
			||||
# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
 | 
				
			||||
# collaboration diagrams in a style similar to the OMG's Unified Modeling 
 | 
				
			||||
# Language.
 | 
				
			||||
 | 
				
			||||
UML_LOOK               = NO
 | 
				
			||||
 | 
				
			||||
# If set to YES, the inheritance and collaboration graphs will show the 
 | 
				
			||||
# relations between templates and their instances.
 | 
				
			||||
 | 
				
			||||
TEMPLATE_RELATIONS     = NO
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
 | 
				
			||||
# tags are set to YES then doxygen will generate a graph for each documented 
 | 
				
			||||
# file showing the direct and indirect include dependencies of the file with 
 | 
				
			||||
# other documented files.
 | 
				
			||||
 | 
				
			||||
INCLUDE_GRAPH          = NO
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
 | 
				
			||||
# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
 | 
				
			||||
# documented header file showing the documented files that directly or 
 | 
				
			||||
# indirectly include this file.
 | 
				
			||||
 | 
				
			||||
INCLUDED_BY_GRAPH      = NO
 | 
				
			||||
 | 
				
			||||
# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
 | 
				
			||||
# doxygen will generate a call dependency graph for every global function 
 | 
				
			||||
# or class method. Note that enabling this option will significantly increase 
 | 
				
			||||
# the time of a run. So in most cases it will be better to enable call graphs 
 | 
				
			||||
# for selected functions only using the \callgraph command.
 | 
				
			||||
 | 
				
			||||
CALL_GRAPH             = NO
 | 
				
			||||
 | 
				
			||||
# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
 | 
				
			||||
# doxygen will generate a caller dependency graph for every global function 
 | 
				
			||||
# or class method. Note that enabling this option will significantly increase 
 | 
				
			||||
# the time of a run. So in most cases it will be better to enable caller 
 | 
				
			||||
# graphs for selected functions only using the \callergraph command.
 | 
				
			||||
 | 
				
			||||
CALLER_GRAPH           = NO
 | 
				
			||||
 | 
				
			||||
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will graphical hierarchy of all classes instead of a textual one.
 | 
				
			||||
 | 
				
			||||
GRAPHICAL_HIERARCHY    = NO
 | 
				
			||||
 | 
				
			||||
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
 | 
				
			||||
# then doxygen will show the dependencies a directory has on other directories 
 | 
				
			||||
# in a graphical way. The dependency relations are determined by the #include
 | 
				
			||||
# relations between the files in the directories.
 | 
				
			||||
 | 
				
			||||
DIRECTORY_GRAPH        = NO
 | 
				
			||||
 | 
				
			||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
 | 
				
			||||
# generated by dot. Possible values are png, jpg, or gif
 | 
				
			||||
# If left blank png will be used.
 | 
				
			||||
 | 
				
			||||
DOT_IMAGE_FORMAT       = png
 | 
				
			||||
 | 
				
			||||
# The tag DOT_PATH can be used to specify the path where the dot tool can be 
 | 
				
			||||
# found. If left blank, it is assumed the dot tool can be found in the path.
 | 
				
			||||
 | 
				
			||||
DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"
 | 
				
			||||
 | 
				
			||||
# The DOTFILE_DIRS tag can be used to specify one or more directories that 
 | 
				
			||||
# contain dot files that are included in the documentation (see the 
 | 
				
			||||
# \dotfile command).
 | 
				
			||||
 | 
				
			||||
DOTFILE_DIRS           = 
 | 
				
			||||
 | 
				
			||||
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
 | 
				
			||||
# nodes that will be shown in the graph. If the number of nodes in a graph 
 | 
				
			||||
# becomes larger than this value, doxygen will truncate the graph, which is 
 | 
				
			||||
# visualized by representing a node as a red box. Note that doxygen if the 
 | 
				
			||||
# number of direct children of the root node in a graph is already larger than 
 | 
				
			||||
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
 | 
				
			||||
# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 | 
				
			||||
 | 
				
			||||
DOT_GRAPH_MAX_NODES    = 15
 | 
				
			||||
 | 
				
			||||
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
 | 
				
			||||
# graphs generated by dot. A depth value of 3 means that only nodes reachable 
 | 
				
			||||
# from the root by following a path via at most 3 edges will be shown. Nodes 
 | 
				
			||||
# that lay further from the root node will be omitted. Note that setting this 
 | 
				
			||||
# option to 1 or 2 may greatly reduce the computation time needed for large 
 | 
				
			||||
# code bases. Also note that the size of a graph can be further restricted by 
 | 
				
			||||
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
 | 
				
			||||
 | 
				
			||||
MAX_DOT_GRAPH_DEPTH    = 2
 | 
				
			||||
 | 
				
			||||
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
 | 
				
			||||
# background. This is disabled by default, because dot on Windows does not 
 | 
				
			||||
# seem to support this out of the box. Warning: Depending on the platform used, 
 | 
				
			||||
# enabling this option may lead to badly anti-aliased labels on the edges of 
 | 
				
			||||
# a graph (i.e. they become hard to read).
 | 
				
			||||
 | 
				
			||||
DOT_TRANSPARENT        = YES
 | 
				
			||||
 | 
				
			||||
# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
 | 
				
			||||
# files in one run (i.e. multiple -o and -T options on the command line). This 
 | 
				
			||||
# makes dot run faster, but since only newer versions of dot (>1.8.10) 
 | 
				
			||||
# support this, this feature is disabled by default.
 | 
				
			||||
 | 
				
			||||
DOT_MULTI_TARGETS      = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate a legend page explaining the meaning of the various boxes and 
 | 
				
			||||
# arrows in the dot generated graphs.
 | 
				
			||||
 | 
				
			||||
GENERATE_LEGEND        = YES
 | 
				
			||||
 | 
				
			||||
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# remove the intermediate dot files that are used to generate 
 | 
				
			||||
# the various graphs.
 | 
				
			||||
 | 
				
			||||
DOT_CLEANUP            = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration::additions related to the search engine   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The SEARCHENGINE tag specifies whether or not a search engine should be 
 | 
				
			||||
# used. If set to NO the values of all tags below this one will be ignored.
 | 
				
			||||
 | 
				
			||||
SEARCHENGINE           = NO
 | 
				
			||||
@ -0,0 +1,714 @@
 | 
				
			||||
# Hey Emacs, this is a -*- makefile -*-
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
 | 
				
			||||
#  >> Modified for use with the LUFA project. <<
 | 
				
			||||
#
 | 
				
			||||
# Released to the Public Domain
 | 
				
			||||
#
 | 
				
			||||
# Additional material for this makefile was written by:
 | 
				
			||||
# Peter Fleury
 | 
				
			||||
# Tim Henigan
 | 
				
			||||
# Colin O'Flynn
 | 
				
			||||
# Reiner Patommel
 | 
				
			||||
# Markus Pfaff
 | 
				
			||||
# Sander Pool
 | 
				
			||||
# Frederik Rouleau
 | 
				
			||||
# Carlos Lamas
 | 
				
			||||
# Dean Camera
 | 
				
			||||
# Opendous Inc.
 | 
				
			||||
# Denver Gingerich
 | 
				
			||||
#
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
# On command line:
 | 
				
			||||
#
 | 
				
			||||
# make all = Make software.
 | 
				
			||||
#
 | 
				
			||||
# make clean = Clean out built project files.
 | 
				
			||||
#
 | 
				
			||||
# make coff = Convert ELF to AVR COFF.
 | 
				
			||||
#
 | 
				
			||||
# make extcoff = Convert ELF to AVR Extended COFF.
 | 
				
			||||
#
 | 
				
			||||
# make program = Download the hex file to the device, using avrdude.
 | 
				
			||||
#                Please customize the avrdude settings below first!
 | 
				
			||||
#
 | 
				
			||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
 | 
				
			||||
#            have dfu-programmer installed).
 | 
				
			||||
#
 | 
				
			||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
 | 
				
			||||
#             have Atmel FLIP installed).
 | 
				
			||||
#
 | 
				
			||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
 | 
				
			||||
#               (must have dfu-programmer installed).
 | 
				
			||||
#
 | 
				
			||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
 | 
				
			||||
#                (must have Atmel FLIP installed).
 | 
				
			||||
#
 | 
				
			||||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
				
			||||
#                DoxyGen installed)
 | 
				
			||||
#
 | 
				
			||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
				
			||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
				
			||||
#
 | 
				
			||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
				
			||||
#
 | 
				
			||||
# make filename.i = Create a preprocessed source file for use in submitting
 | 
				
			||||
#                   bug reports to the GCC project.
 | 
				
			||||
#
 | 
				
			||||
# To rebuild project do "make clean" then "make all".
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# MCU name
 | 
				
			||||
MCU = at90usb1287
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Target board (see library BoardTypes.h documentation, USER or blank for projects not requiring
 | 
				
			||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called 
 | 
				
			||||
# "Board" inside the application directory.
 | 
				
			||||
BOARD  = USBKEY
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Processor frequency.
 | 
				
			||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
				
			||||
#     processor frequency. You can then use this symbol in your source code to 
 | 
				
			||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
				
			||||
#     automatically to create a 32-bit value in your source code.
 | 
				
			||||
#     Typical values are:
 | 
				
			||||
#         F_CPU =  1000000
 | 
				
			||||
#         F_CPU =  1843200
 | 
				
			||||
#         F_CPU =  2000000
 | 
				
			||||
#         F_CPU =  3686400
 | 
				
			||||
#         F_CPU =  4000000
 | 
				
			||||
#         F_CPU =  7372800
 | 
				
			||||
#         F_CPU =  8000000
 | 
				
			||||
#         F_CPU = 11059200
 | 
				
			||||
#         F_CPU = 14745600
 | 
				
			||||
#         F_CPU = 16000000
 | 
				
			||||
#         F_CPU = 18432000
 | 
				
			||||
#         F_CPU = 20000000
 | 
				
			||||
F_CPU = 8000000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Output format. (can be srec, ihex, binary)
 | 
				
			||||
FORMAT = ihex
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Target file name (without extension).
 | 
				
			||||
TARGET = BootloaderDFU
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Object files directory
 | 
				
			||||
#     To put object files in current directory, use a dot (.), do NOT make
 | 
				
			||||
#     this an empty or blank macro!
 | 
				
			||||
OBJDIR = .
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List C source files here. (C dependencies are automatically generated.)
 | 
				
			||||
SRC = $(TARGET).c                                          \
 | 
				
			||||
	  Descriptors.c                                        \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
 | 
				
			||||
	  
 | 
				
			||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
				
			||||
CPPSRC = 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List Assembler source files here.
 | 
				
			||||
#     Make them always end in a capital .S.  Files ending in a lowercase .s
 | 
				
			||||
#     will not be considered source files but generated files (assembler
 | 
				
			||||
#     output from the compiler), and will be deleted upon "make clean"!
 | 
				
			||||
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
 | 
				
			||||
#     it will preserve the spelling of the filenames, and gcc itself does
 | 
				
			||||
#     care about how the name is spelled on its command-line.
 | 
				
			||||
ASRC = 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
				
			||||
#     0 = turn off optimization. s = optimize for size.
 | 
				
			||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
				
			||||
OPT = s
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Debugging format.
 | 
				
			||||
#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
 | 
				
			||||
#     AVR Studio 4.10 requires dwarf-2.
 | 
				
			||||
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
 | 
				
			||||
DEBUG = dwarf-2
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List any extra directories to look for include files here.
 | 
				
			||||
#     Each directory must be seperated by a space.
 | 
				
			||||
#     Use forward slashes for directory separators.
 | 
				
			||||
#     For a directory that has spaces, enclose it in quotes.
 | 
				
			||||
EXTRAINCDIRS = ../../
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compiler flag to set the C Standard level.
 | 
				
			||||
#     c89   = "ANSI" C
 | 
				
			||||
#     gnu89 = c89 plus GCC extensions
 | 
				
			||||
#     c99   = ISO C99 standard (not yet fully implemented)
 | 
				
			||||
#     gnu99 = c99 plus GCC extensions
 | 
				
			||||
CSTANDARD = -std=gnu99
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Starting byte address of the bootloader
 | 
				
			||||
BOOT_START = 0x1E000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for C sources
 | 
				
			||||
CDEFS  = -DF_CPU=$(F_CPU)UL -DBOARD=BOARD_$(BOARD) -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DSTATIC_ENDPOINT_CONFIGURATION
 | 
				
			||||
CDEFS += -DUSB_DEVICE_ONLY -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
 | 
				
			||||
CDEFS += -DUSE_RAM_DESCRIPTORS -DBOOT_START_ADDR=$(BOOT_START)UL -DFIXED_CONTROL_ENDPOINT_SIZE=32 -DUSE_SINGLE_DEVICE_CONFIGURATION
 | 
				
			||||
CDEFS += -DNO_CLEARSET_FEATURE_REQUEST
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for ASM sources
 | 
				
			||||
ADEFS = -DF_CPU=$(F_CPU)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for C++ sources
 | 
				
			||||
CPPDEFS = -DF_CPU=$(F_CPU)UL
 | 
				
			||||
#CPPDEFS += -D__STDC_LIMIT_MACROS
 | 
				
			||||
#CPPDEFS += -D__STDC_CONSTANT_MACROS
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Compiler Options C ----------------
 | 
				
			||||
#  -g*:          generate debugging information
 | 
				
			||||
#  -O*:          optimization level
 | 
				
			||||
#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
				
			||||
#  -Wall...:     warning level
 | 
				
			||||
#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
				
			||||
#    -adhlns...: create assembler listing
 | 
				
			||||
CFLAGS = -g$(DEBUG)
 | 
				
			||||
CFLAGS += $(CDEFS)
 | 
				
			||||
CFLAGS += -O$(OPT)
 | 
				
			||||
CFLAGS += -funsigned-char
 | 
				
			||||
CFLAGS += -funsigned-bitfields
 | 
				
			||||
CFLAGS += -ffunction-sections
 | 
				
			||||
CFLAGS += -fdata-sections
 | 
				
			||||
CFLAGS += -fpack-struct
 | 
				
			||||
CFLAGS += -fshort-enums
 | 
				
			||||
CFLAGS += -fno-inline-small-functions
 | 
				
			||||
CFLAGS += -fno-reorder-blocks
 | 
				
			||||
CFLAGS += -fno-reorder-blocks-and-partition
 | 
				
			||||
CFLAGS += -fno-reorder-functions
 | 
				
			||||
CFLAGS += -fno-toplevel-reorder
 | 
				
			||||
CFLAGS += -Wall
 | 
				
			||||
CFLAGS += -Wstrict-prototypes
 | 
				
			||||
CFLAGS += -Wundef
 | 
				
			||||
#CFLAGS += -fno-unit-at-a-time
 | 
				
			||||
#CFLAGS += -Wunreachable-code
 | 
				
			||||
#CFLAGS += -Wsign-compare
 | 
				
			||||
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
 | 
				
			||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
				
			||||
CFLAGS += $(CSTANDARD)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Compiler Options C++ ----------------
 | 
				
			||||
#  -g*:          generate debugging information
 | 
				
			||||
#  -O*:          optimization level
 | 
				
			||||
#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
				
			||||
#  -Wall...:     warning level
 | 
				
			||||
#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
				
			||||
#    -adhlns...: create assembler listing
 | 
				
			||||
CPPFLAGS = -g$(DEBUG)
 | 
				
			||||
CPPFLAGS += $(CPPDEFS)
 | 
				
			||||
CPPFLAGS += -O$(OPT)
 | 
				
			||||
CPPFLAGS += -funsigned-char
 | 
				
			||||
CPPFLAGS += -funsigned-bitfields
 | 
				
			||||
CPPFLAGS += -fpack-struct
 | 
				
			||||
CPPFLAGS += -fshort-enums
 | 
				
			||||
CPPFLAGS += -fno-exceptions
 | 
				
			||||
CPPFLAGS += -Wall
 | 
				
			||||
CFLAGS += -Wundef
 | 
				
			||||
#CPPFLAGS += -mshort-calls
 | 
				
			||||
#CPPFLAGS += -fno-unit-at-a-time
 | 
				
			||||
#CPPFLAGS += -Wstrict-prototypes
 | 
				
			||||
#CPPFLAGS += -Wunreachable-code
 | 
				
			||||
#CPPFLAGS += -Wsign-compare
 | 
				
			||||
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
 | 
				
			||||
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
				
			||||
#CPPFLAGS += $(CSTANDARD)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Assembler Options ----------------
 | 
				
			||||
#  -Wa,...:   tell GCC to pass this to the assembler.
 | 
				
			||||
#  -adhlns:   create listing
 | 
				
			||||
#  -gstabs:   have the assembler create line number information; note that
 | 
				
			||||
#             for use in COFF files, additional information about filenames
 | 
				
			||||
#             and function names needs to be present in the assembler source
 | 
				
			||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
				
			||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
				
			||||
#       dump that will be displayed for a given single line of source input.
 | 
				
			||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Library Options ----------------
 | 
				
			||||
# Minimalistic printf version
 | 
				
			||||
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
				
			||||
 | 
				
			||||
# Floating point printf version (requires MATH_LIB = -lm below)
 | 
				
			||||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
				
			||||
 | 
				
			||||
# If this is left blank, then it will use the Standard printf version.
 | 
				
			||||
PRINTF_LIB = 
 | 
				
			||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
				
			||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Minimalistic scanf version
 | 
				
			||||
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
				
			||||
 | 
				
			||||
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
 | 
				
			||||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
				
			||||
 | 
				
			||||
# If this is left blank, then it will use the Standard scanf version.
 | 
				
			||||
SCANF_LIB = 
 | 
				
			||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
				
			||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
MATH_LIB = -lm
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List any extra directories to look for libraries here.
 | 
				
			||||
#     Each directory must be seperated by a space.
 | 
				
			||||
#     Use forward slashes for directory separators.
 | 
				
			||||
#     For a directory that has spaces, enclose it in quotes.
 | 
				
			||||
EXTRALIBDIRS = 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- External Memory Options ----------------
 | 
				
			||||
 | 
				
			||||
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
				
			||||
# used for variables (.data/.bss) and heap (malloc()).
 | 
				
			||||
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
 | 
				
			||||
 | 
				
			||||
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
				
			||||
# only used for heap (malloc()).
 | 
				
			||||
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
 | 
				
			||||
 | 
				
			||||
EXTMEMOPTS =
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Linker Options ----------------
 | 
				
			||||
#  -Wl,...:     tell GCC to pass this to linker.
 | 
				
			||||
#    -Map:      create map file
 | 
				
			||||
#    --cref:    add cross reference to  map file
 | 
				
			||||
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 | 
				
			||||
LDFLAGS += -Wl,--relax
 | 
				
			||||
LDFLAGS += -Wl,--gc-sections
 | 
				
			||||
LDFLAGS += -Wl,--section-start=.text=$(BOOT_START)
 | 
				
			||||
LDFLAGS += $(EXTMEMOPTS)
 | 
				
			||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
				
			||||
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
 | 
				
			||||
#LDFLAGS += -T linker_script.x
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Programming Options (avrdude) ----------------
 | 
				
			||||
 | 
				
			||||
# Programming hardware: alf avr910 avrisp bascom bsd 
 | 
				
			||||
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
 | 
				
			||||
#
 | 
				
			||||
# Type: avrdude -c ?
 | 
				
			||||
# to get a full listing.
 | 
				
			||||
#
 | 
				
			||||
AVRDUDE_PROGRAMMER = jtagmkII
 | 
				
			||||
 | 
				
			||||
# com1 = serial port. Use lpt1 to connect to parallel port.
 | 
				
			||||
AVRDUDE_PORT = usb
 | 
				
			||||
 | 
				
			||||
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
				
			||||
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Uncomment the following if you want avrdude's erase cycle counter.
 | 
				
			||||
# Note that this counter needs to be initialized first using -Yn,
 | 
				
			||||
# see avrdude manual.
 | 
				
			||||
#AVRDUDE_ERASE_COUNTER = -y
 | 
				
			||||
 | 
				
			||||
# Uncomment the following if you do /not/ wish a verification to be
 | 
				
			||||
# performed after programming the device.
 | 
				
			||||
AVRDUDE_NO_VERIFY = -V
 | 
				
			||||
 | 
				
			||||
# Increase verbosity level.  Please use this when submitting bug
 | 
				
			||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
				
			||||
# to submit bug reports.
 | 
				
			||||
#AVRDUDE_VERBOSE = -v -v
 | 
				
			||||
 | 
				
			||||
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Debugging Options ----------------
 | 
				
			||||
 | 
				
			||||
# For simulavr only - target MCU frequency.
 | 
				
			||||
DEBUG_MFREQ = $(F_CPU)
 | 
				
			||||
 | 
				
			||||
# Set the DEBUG_UI to either gdb or insight.
 | 
				
			||||
# DEBUG_UI = gdb
 | 
				
			||||
DEBUG_UI = insight
 | 
				
			||||
 | 
				
			||||
# Set the debugging back-end to either avarice, simulavr.
 | 
				
			||||
DEBUG_BACKEND = avarice
 | 
				
			||||
#DEBUG_BACKEND = simulavr
 | 
				
			||||
 | 
				
			||||
# GDB Init Filename.
 | 
				
			||||
GDBINIT_FILE = __avr_gdbinit
 | 
				
			||||
 | 
				
			||||
# When using avarice settings for the JTAG
 | 
				
			||||
JTAG_DEV = /dev/com1
 | 
				
			||||
 | 
				
			||||
# Debugging port used to communicate between GDB / avarice / simulavr.
 | 
				
			||||
DEBUG_PORT = 4242
 | 
				
			||||
 | 
				
			||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
				
			||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
				
			||||
#     avarice is running on a different computer.
 | 
				
			||||
DEBUG_HOST = localhost
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#============================================================================
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Define programs and commands.
 | 
				
			||||
SHELL = sh
 | 
				
			||||
CC = avr-gcc
 | 
				
			||||
OBJCOPY = avr-objcopy
 | 
				
			||||
OBJDUMP = avr-objdump
 | 
				
			||||
SIZE = avr-size
 | 
				
			||||
AR = avr-ar rcs
 | 
				
			||||
NM = avr-nm
 | 
				
			||||
AVRDUDE = avrdude
 | 
				
			||||
REMOVE = rm -f
 | 
				
			||||
REMOVEDIR = rm -rf
 | 
				
			||||
COPY = cp
 | 
				
			||||
WINSHELL = cmd
 | 
				
			||||
 | 
				
			||||
# Define Messages
 | 
				
			||||
# English
 | 
				
			||||
MSG_ERRORS_NONE = Errors: none
 | 
				
			||||
MSG_BEGIN = -------- begin --------
 | 
				
			||||
MSG_END = --------  end  --------
 | 
				
			||||
MSG_SIZE_BEFORE = Size before: 
 | 
				
			||||
MSG_SIZE_AFTER = Size after:
 | 
				
			||||
MSG_COFF = Converting to AVR COFF:
 | 
				
			||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
				
			||||
MSG_FLASH = Creating load file for Flash:
 | 
				
			||||
MSG_EEPROM = Creating load file for EEPROM:
 | 
				
			||||
MSG_EXTENDED_LISTING = Creating Extended Listing:
 | 
				
			||||
MSG_SYMBOL_TABLE = Creating Symbol Table:
 | 
				
			||||
MSG_LINKING = Linking:
 | 
				
			||||
MSG_COMPILING = Compiling C:
 | 
				
			||||
MSG_COMPILING_CPP = Compiling C++:
 | 
				
			||||
MSG_ASSEMBLING = Assembling:
 | 
				
			||||
MSG_CLEANING = Cleaning project:
 | 
				
			||||
MSG_CREATING_LIBRARY = Creating library:
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Define all object files.
 | 
				
			||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
				
			||||
 | 
				
			||||
# Define all listing files.
 | 
				
			||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compiler flags to generate dependency files.
 | 
				
			||||
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Combine all necessary flags and optional flags.
 | 
				
			||||
# Add target processor to flags.
 | 
				
			||||
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
 | 
				
			||||
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
 | 
				
			||||
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Default target.
 | 
				
			||||
all: begin gccversion sizebefore build checkhooks checklibmode sizeafter end
 | 
				
			||||
 | 
				
			||||
# Change the build target to build a HEX file or a library.
 | 
				
			||||
build: elf hex eep lss sym
 | 
				
			||||
#build: lib
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
elf: $(TARGET).elf
 | 
				
			||||
hex: $(TARGET).hex
 | 
				
			||||
eep: $(TARGET).eep
 | 
				
			||||
lss: $(TARGET).lss
 | 
				
			||||
sym: $(TARGET).sym
 | 
				
			||||
LIBNAME=lib$(TARGET).a
 | 
				
			||||
lib: $(LIBNAME)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Eye candy.
 | 
				
			||||
# AVR Studio 3.x does not check make's exit code but relies on
 | 
				
			||||
# the following magic strings to be generated by the compile job.
 | 
				
			||||
begin:
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_BEGIN)
 | 
				
			||||
 | 
				
			||||
end:
 | 
				
			||||
	@echo $(MSG_END)
 | 
				
			||||
	@echo
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Display size of file.
 | 
				
			||||
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
 | 
				
			||||
ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf
 | 
				
			||||
MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )
 | 
				
			||||
FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )
 | 
				
			||||
 | 
				
			||||
sizebefore:
 | 
				
			||||
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
 | 
				
			||||
	2>/dev/null; echo; fi
 | 
				
			||||
 | 
				
			||||
sizeafter:
 | 
				
			||||
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
 | 
				
			||||
	2>/dev/null; echo; fi
 | 
				
			||||
 | 
				
			||||
checkhooks: build
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo ------- Unhooked LUFA Events -------
 | 
				
			||||
	@$(shell) (grep -s '^Event.*LUFA/.*\\.o' $(TARGET).map | \
 | 
				
			||||
	           cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \
 | 
				
			||||
			   echo "(None)"
 | 
				
			||||
	@echo ----- End Unhooked LUFA Events -----
 | 
				
			||||
	
 | 
				
			||||
checklibmode:
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo ----------- Library Mode -----------
 | 
				
			||||
	@$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \
 | 
				
			||||
	          | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \
 | 
				
			||||
	          || echo "No specific mode (both device and host mode allowable)."
 | 
				
			||||
	@echo ------------------------------------
 | 
				
			||||
 | 
				
			||||
# Display compiler version information.
 | 
				
			||||
gccversion : 
 | 
				
			||||
	@$(CC) --version
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Program the device.  
 | 
				
			||||
program: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
				
			||||
 | 
				
			||||
flip: $(TARGET).hex
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation erase f
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation start reset 0
 | 
				
			||||
 | 
				
			||||
dfu: $(TARGET).hex
 | 
				
			||||
	dfu-programmer $(MCU) erase
 | 
				
			||||
	dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex
 | 
				
			||||
	dfu-programmer $(MCU) reset
 | 
				
			||||
 | 
				
			||||
flip-ee: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	copy $(TARGET).eep $(TARGET)eep.hex
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation start reset 0
 | 
				
			||||
 | 
				
			||||
dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	dfu-programmer $(MCU) erase
 | 
				
			||||
	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
 | 
				
			||||
	dfu-programmer $(MCU) reset
 | 
				
			||||
 | 
				
			||||
# Generate avr-gdb config/init file which does the following:
 | 
				
			||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
				
			||||
#     a breakpoint at main().
 | 
				
			||||
gdb-config: 
 | 
				
			||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
				
			||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo end >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
 | 
				
			||||
ifeq ($(DEBUG_BACKEND),simulavr)
 | 
				
			||||
	@echo load  >> $(GDBINIT_FILE)
 | 
				
			||||
endif
 | 
				
			||||
	@echo break main >> $(GDBINIT_FILE)
 | 
				
			||||
 | 
				
			||||
debug: gdb-config $(TARGET).elf
 | 
				
			||||
ifeq ($(DEBUG_BACKEND), avarice)
 | 
				
			||||
	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
 | 
				
			||||
	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
 | 
				
			||||
	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
 | 
				
			||||
	@$(WINSHELL) /c pause
 | 
				
			||||
 | 
				
			||||
else
 | 
				
			||||
	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
 | 
				
			||||
	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
 | 
				
			||||
endif
 | 
				
			||||
	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
 | 
				
			||||
COFFCONVERT = $(OBJCOPY) --debugging
 | 
				
			||||
COFFCONVERT += --change-section-address .data-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .bss-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .noinit-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .eeprom-0x810000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
coff: $(TARGET).elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COFF) $(TARGET).cof
 | 
				
			||||
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
extcoff: $(TARGET).elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
 | 
				
			||||
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create final output files (.hex, .eep) from ELF output file.
 | 
				
			||||
%.hex: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_FLASH) $@
 | 
				
			||||
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 | 
				
			||||
 | 
				
			||||
%.eep: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EEPROM) $@
 | 
				
			||||
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
 | 
				
			||||
	--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
 | 
				
			||||
 | 
				
			||||
# Create extended listing file from ELF output file.
 | 
				
			||||
%.lss: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EXTENDED_LISTING) $@
 | 
				
			||||
	$(OBJDUMP) -h -z -S $< > $@
 | 
				
			||||
 | 
				
			||||
# Create a symbol table from ELF output file.
 | 
				
			||||
%.sym: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_SYMBOL_TABLE) $@
 | 
				
			||||
	$(NM) -n $< > $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create library from object files.
 | 
				
			||||
.SECONDARY : $(TARGET).a
 | 
				
			||||
.PRECIOUS : $(OBJ)
 | 
				
			||||
%.a: $(OBJ)
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_CREATING_LIBRARY) $@
 | 
				
			||||
	$(AR) $@ $(OBJ)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Link: create ELF output file from object files.
 | 
				
			||||
.SECONDARY : $(TARGET).elf
 | 
				
			||||
.PRECIOUS : $(OBJ)
 | 
				
			||||
%.elf: $(OBJ)
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_LINKING) $@
 | 
				
			||||
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create object files from C source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.c
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COMPILING) $<
 | 
				
			||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create object files from C++ source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.cpp
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
				
			||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create assembler files from C source files.
 | 
				
			||||
%.s : %.c
 | 
				
			||||
	$(CC) -S $(ALL_CFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create assembler files from C++ source files.
 | 
				
			||||
%.s : %.cpp
 | 
				
			||||
	$(CC) -S $(ALL_CPPFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Assemble: create object files from assembler source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.S
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_ASSEMBLING) $<
 | 
				
			||||
	$(CC) -c $(ALL_ASFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create preprocessed source for use in sending a bug report.
 | 
				
			||||
%.i : %.c
 | 
				
			||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
				
			||||
	
 | 
				
			||||
 | 
				
			||||
# Target: clean project.
 | 
				
			||||
clean: begin clean_list clean_binary end
 | 
				
			||||
 | 
				
			||||
clean_binary:
 | 
				
			||||
	$(REMOVE) $(TARGET).hex
 | 
				
			||||
 | 
				
			||||
clean_list:
 | 
				
			||||
	@echo $(MSG_CLEANING)
 | 
				
			||||
	$(REMOVE) $(TARGET).eep
 | 
				
			||||
	$(REMOVE) $(TARGET).cof
 | 
				
			||||
	$(REMOVE) $(TARGET).elf
 | 
				
			||||
	$(REMOVE) $(TARGET).map
 | 
				
			||||
	$(REMOVE) $(TARGET).sym
 | 
				
			||||
	$(REMOVE) $(TARGET).lss
 | 
				
			||||
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
 | 
				
			||||
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
 | 
				
			||||
	$(REMOVE) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
				
			||||
	$(REMOVE) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.s)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.d)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.i)
 | 
				
			||||
	$(REMOVEDIR) .dep
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
doxygen:
 | 
				
			||||
	@echo Generating Project Documentation...
 | 
				
			||||
	@doxygen Doxygen.conf
 | 
				
			||||
	@echo Documentation Generation Complete.
 | 
				
			||||
	
 | 
				
			||||
clean_doxygen:
 | 
				
			||||
	rm -rf Documentation
 | 
				
			||||
 | 
				
			||||
# Create object files directory
 | 
				
			||||
$(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Include the dependency files.
 | 
				
			||||
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Listing of phony targets.
 | 
				
			||||
.PHONY : all checkhooks checklibmode begin  \
 | 
				
			||||
finish end sizebefore sizeafter gccversion  \
 | 
				
			||||
build elf hex eep lss sym coff extcoff      \
 | 
				
			||||
clean clean_list clean_binary program debug \
 | 
				
			||||
gdb-config doxygen clean_doxygen
 | 
				
			||||
@ -0,0 +1,218 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
				
			||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
				
			||||
 *  the device's capabilities and functions.  
 | 
				
			||||
 */
 | 
				
			||||
 | 
				
			||||
#include "Descriptors.h"
 | 
				
			||||
 | 
				
			||||
/** HID class report descriptor. This is a special descriptor constructed with values from the
 | 
				
			||||
 *  USBIF HID class specification to describe the reports and capabilities of the HID device. This
 | 
				
			||||
 *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)
 | 
				
			||||
 *  the device will send, and what it may be sent back from the host. Refer to the HID specification for
 | 
				
			||||
 *  more details on HID report descriptors.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_HIDReport_Datatype_t HIDReport[] =
 | 
				
			||||
{
 | 
				
			||||
	0x06, 0x9c, 0xff,     /* Usage Page (Vendor Defined)                     */
 | 
				
			||||
	0x09, 0x19,           /* Usage (Vendor Defined)                          */
 | 
				
			||||
	0xa1, 0x01,           /* Collection (Vendor Defined)                     */
 | 
				
			||||
	0x0a, 0x19, 0x00,     /*   Usage (Vendor Defined)                        */
 | 
				
			||||
	0x75, 0x08,           /*   Report Size (8)                               */
 | 
				
			||||
	0x95, 0x82,           /*   Report Count (130)                            */
 | 
				
			||||
	0x15, 0x00,           /*   Logical Minimum (0)                           */
 | 
				
			||||
	0x25, 0xff,           /*   Logical Maximum (255)                         */
 | 
				
			||||
	0x91, 0x02,           /*   Output (Data, Variable, Absolute)             */
 | 
				
			||||
	0xc0                  /* End Collection                                  */
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
 | 
				
			||||
 *  device characteristics, including the supported USB version, control endpoint size and the
 | 
				
			||||
 *  number of device configurations. The descriptor is read out by the USB host when the enumeration
 | 
				
			||||
 *  process begins.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_Device_t DeviceDescriptor =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: sizeof(USB_Descriptor_Device_t), Type: DTYPE_Device},
 | 
				
			||||
		
 | 
				
			||||
	USBSpecification:       VERSION_BCD(01.10),
 | 
				
			||||
	Class:                  0x00,
 | 
				
			||||
	SubClass:               0x00,
 | 
				
			||||
	Protocol:               0x00,
 | 
				
			||||
				
 | 
				
			||||
	Endpoint0Size:          8,
 | 
				
			||||
		
 | 
				
			||||
	VendorID:               0x16C0,
 | 
				
			||||
	ProductID:              0x0478,
 | 
				
			||||
	ReleaseNumber:          0x0010,
 | 
				
			||||
		
 | 
				
			||||
	ManufacturerStrIndex:   NO_DESCRIPTOR,
 | 
				
			||||
	ProductStrIndex:        0x01,
 | 
				
			||||
	SerialNumStrIndex:      NO_DESCRIPTOR,
 | 
				
			||||
		
 | 
				
			||||
	NumberOfConfigurations: 1
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
 | 
				
			||||
 *  of the device in one of its supported configurations, including information about any device interfaces
 | 
				
			||||
 *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
 | 
				
			||||
 *  a configuration so that the host may correctly communicate with the USB device.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_Configuration_t ConfigurationDescriptor =
 | 
				
			||||
{
 | 
				
			||||
	Config:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Configuration_Header_t), Type: DTYPE_Configuration},
 | 
				
			||||
 | 
				
			||||
			TotalConfigurationSize: sizeof(USB_Descriptor_Configuration_t),
 | 
				
			||||
			TotalInterfaces:        1,
 | 
				
			||||
				
 | 
				
			||||
			ConfigurationNumber:    1,
 | 
				
			||||
			ConfigurationStrIndex:  NO_DESCRIPTOR,
 | 
				
			||||
				
 | 
				
			||||
			ConfigAttributes:       (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
				
			||||
			
 | 
				
			||||
			MaxPowerConsumption:    USB_CONFIG_POWER_MA(100)
 | 
				
			||||
		},
 | 
				
			||||
		
 | 
				
			||||
	Interface:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Interface_t), Type: DTYPE_Interface},
 | 
				
			||||
 | 
				
			||||
			InterfaceNumber:        0x00,
 | 
				
			||||
			AlternateSetting:       0x00,
 | 
				
			||||
			
 | 
				
			||||
			TotalEndpoints:         1,
 | 
				
			||||
				
 | 
				
			||||
			Class:                  0x03,
 | 
				
			||||
			SubClass:               0x00,
 | 
				
			||||
			Protocol:               0x00,
 | 
				
			||||
				
 | 
				
			||||
			InterfaceStrIndex:      NO_DESCRIPTOR
 | 
				
			||||
		},
 | 
				
			||||
 | 
				
			||||
	HIDDescriptor:
 | 
				
			||||
		{  
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_HID_t), Type: DTYPE_HID},
 | 
				
			||||
			
 | 
				
			||||
			HIDSpec:                VERSION_BCD(01.11),
 | 
				
			||||
			CountryCode:            0x00,
 | 
				
			||||
			TotalHIDReports:        0x01,
 | 
				
			||||
			HIDReportType:          DTYPE_Report,
 | 
				
			||||
			HIDReportLength:        sizeof(HIDReport)
 | 
				
			||||
		},
 | 
				
			||||
		
 | 
				
			||||
	HIDEndpoint:
 | 
				
			||||
		{
 | 
				
			||||
			Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},
 | 
				
			||||
 | 
				
			||||
			EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_IN | HID_EPNUM),
 | 
				
			||||
			Attributes:             EP_TYPE_INTERRUPT,
 | 
				
			||||
			EndpointSize:           HID_EPSIZE,
 | 
				
			||||
			PollingIntervalMS:      0x40
 | 
				
			||||
		},
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
 | 
				
			||||
 *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
 | 
				
			||||
 *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_String_t LanguageString =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: USB_STRING_LEN(1), Type: DTYPE_String},
 | 
				
			||||
		
 | 
				
			||||
	UnicodeString:          {LANGUAGE_ID_ENG}
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
 | 
				
			||||
 *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
 | 
				
			||||
 *  Descriptor.
 | 
				
			||||
 */
 | 
				
			||||
USB_Descriptor_String_t ProductString =
 | 
				
			||||
{
 | 
				
			||||
	Header:                 {Size: USB_STRING_LEN(21), Type: DTYPE_String},
 | 
				
			||||
		
 | 
				
			||||
	UnicodeString:          L"AVR Teensy Bootloader"
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
/** This function is called by the library when in device mode, and must be overridden (see StdDescriptors.h
 | 
				
			||||
 *  documentation) by the application code so that the address and size of a requested descriptor can be given
 | 
				
			||||
 *  to the USB library. When the device recieves a Get Descriptor request on the control endpoint, this function
 | 
				
			||||
 *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
 | 
				
			||||
 *  USB host.
 | 
				
			||||
 */
 | 
				
			||||
uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
				
			||||
{
 | 
				
			||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
				
			||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
				
			||||
 | 
				
			||||
	void*    Address = NULL;
 | 
				
			||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
				
			||||
 | 
				
			||||
	switch (DescriptorType)
 | 
				
			||||
	{
 | 
				
			||||
		case DTYPE_Device:
 | 
				
			||||
			Address = DESCRIPTOR_ADDRESS(DeviceDescriptor);
 | 
				
			||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
				
			||||
			break;
 | 
				
			||||
		case DTYPE_Configuration:
 | 
				
			||||
			Address = DESCRIPTOR_ADDRESS(ConfigurationDescriptor);
 | 
				
			||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
				
			||||
			break;
 | 
				
			||||
		case DTYPE_String:
 | 
				
			||||
			if (!(DescriptorNumber))
 | 
				
			||||
			{
 | 
				
			||||
				Address = DESCRIPTOR_ADDRESS(LanguageString);
 | 
				
			||||
				Size    = LanguageString.Header.Size;
 | 
				
			||||
			}
 | 
				
			||||
			else
 | 
				
			||||
			{
 | 
				
			||||
				Address = DESCRIPTOR_ADDRESS(ProductString);
 | 
				
			||||
				Size    = ProductString.Header.Size;
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			break;
 | 
				
			||||
		case DTYPE_HID:
 | 
				
			||||
			Address = DESCRIPTOR_ADDRESS(ConfigurationDescriptor.HIDDescriptor);
 | 
				
			||||
			Size    = sizeof(USB_Descriptor_HID_t);
 | 
				
			||||
			break;
 | 
				
			||||
		case DTYPE_Report:
 | 
				
			||||
			Address = DESCRIPTOR_ADDRESS(HIDReport);
 | 
				
			||||
			Size    = sizeof(HIDReport);
 | 
				
			||||
			break;
 | 
				
			||||
	}
 | 
				
			||||
	
 | 
				
			||||
	*DescriptorAddress = Address;
 | 
				
			||||
	return Size;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,91 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Header file for Descriptors.c.
 | 
				
			||||
 */
 | 
				
			||||
 | 
				
			||||
#ifndef _DESCRIPTORS_H_
 | 
				
			||||
#define _DESCRIPTORS_H_
 | 
				
			||||
 | 
				
			||||
	/* Includes: */
 | 
				
			||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
				
			||||
 | 
				
			||||
	/* Type Defines: */
 | 
				
			||||
		/** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID
 | 
				
			||||
		 *  specification for details on the structure elements.
 | 
				
			||||
		 */	
 | 
				
			||||
		typedef struct
 | 
				
			||||
		{
 | 
				
			||||
			USB_Descriptor_Header_t Header;
 | 
				
			||||
				
 | 
				
			||||
			uint16_t                HIDSpec;
 | 
				
			||||
			uint8_t                 CountryCode;
 | 
				
			||||
		
 | 
				
			||||
			uint8_t                 TotalHIDReports;
 | 
				
			||||
 | 
				
			||||
			uint8_t                 HIDReportType;
 | 
				
			||||
			uint16_t                HIDReportLength;
 | 
				
			||||
		} USB_Descriptor_HID_t;
 | 
				
			||||
		
 | 
				
			||||
		/** Type define for the data type used to store HID report descriptor elements. */
 | 
				
			||||
		typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;
 | 
				
			||||
 | 
				
			||||
		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
				
			||||
		 *  application code, as the configuration descriptor contains several sub-descriptors which
 | 
				
			||||
		 *  vary between devices, and which describe the device's usage to the host.
 | 
				
			||||
		 */
 | 
				
			||||
		typedef struct
 | 
				
			||||
		{
 | 
				
			||||
			USB_Descriptor_Configuration_Header_t Config;
 | 
				
			||||
			USB_Descriptor_Interface_t            Interface;
 | 
				
			||||
			USB_Descriptor_HID_t                  HIDDescriptor;
 | 
				
			||||
	        USB_Descriptor_Endpoint_t             HIDEndpoint;
 | 
				
			||||
		} USB_Descriptor_Configuration_t;
 | 
				
			||||
					
 | 
				
			||||
	/* Macros: */
 | 
				
			||||
		/** Endpoint number of the HID data IN endpoint. */
 | 
				
			||||
		#define HID_EPNUM                 1
 | 
				
			||||
 | 
				
			||||
		/** Size in bytes of the HID reporting IN endpoint. */		
 | 
				
			||||
		#define HID_EPSIZE                64
 | 
				
			||||
 | 
				
			||||
		/** Descriptor header type value, to indicate a HID class HID descriptor. */
 | 
				
			||||
		#define DTYPE_HID                 0x21
 | 
				
			||||
		
 | 
				
			||||
		/** Descriptor header type value, to indicate a HID class HID report descriptor. */
 | 
				
			||||
		#define DTYPE_Report              0x22
 | 
				
			||||
 | 
				
			||||
	/* Function Prototypes: */
 | 
				
			||||
		uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
				
			||||
		                           ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
				
			||||
 | 
				
			||||
#endif
 | 
				
			||||
@ -0,0 +1,1485 @@
 | 
				
			||||
# Doxyfile 1.5.7.1
 | 
				
			||||
 | 
				
			||||
# This file describes the settings to be used by the documentation system
 | 
				
			||||
# doxygen (www.doxygen.org) for a project
 | 
				
			||||
#
 | 
				
			||||
# All text after a hash (#) is considered a comment and will be ignored
 | 
				
			||||
# The format is:
 | 
				
			||||
#       TAG = value [value, ...]
 | 
				
			||||
# For lists items can also be appended using:
 | 
				
			||||
#       TAG += value [value, ...]
 | 
				
			||||
# Values that contain spaces should be placed between quotes (" ")
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Project related configuration options
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# This tag specifies the encoding used for all characters in the config file 
 | 
				
			||||
# that follow. The default is UTF-8 which is also the encoding used for all 
 | 
				
			||||
# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
 | 
				
			||||
# iconv built into libc) for the transcoding. See 
 | 
				
			||||
# http://www.gnu.org/software/libiconv for the list of possible encodings.
 | 
				
			||||
 | 
				
			||||
DOXYFILE_ENCODING      = UTF-8
 | 
				
			||||
 | 
				
			||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
 | 
				
			||||
# by quotes) that should identify the project.
 | 
				
			||||
 | 
				
			||||
PROJECT_NAME           = "LUFA Library - Teensy HID Bootloader"
 | 
				
			||||
 | 
				
			||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
 | 
				
			||||
# This could be handy for archiving the generated documentation or 
 | 
				
			||||
# if some version control system is used.
 | 
				
			||||
 | 
				
			||||
PROJECT_NUMBER         = 0.0.0
 | 
				
			||||
 | 
				
			||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 | 
				
			||||
# base path where the generated documentation will be put. 
 | 
				
			||||
# If a relative path is entered, it will be relative to the location 
 | 
				
			||||
# where doxygen was started. If left blank the current directory will be used.
 | 
				
			||||
 | 
				
			||||
OUTPUT_DIRECTORY       = ./Documentation/
 | 
				
			||||
 | 
				
			||||
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
 | 
				
			||||
# 4096 sub-directories (in 2 levels) under the output directory of each output 
 | 
				
			||||
# format and will distribute the generated files over these directories. 
 | 
				
			||||
# Enabling this option can be useful when feeding doxygen a huge amount of 
 | 
				
			||||
# source files, where putting all generated files in the same directory would 
 | 
				
			||||
# otherwise cause performance problems for the file system.
 | 
				
			||||
 | 
				
			||||
CREATE_SUBDIRS         = YES
 | 
				
			||||
 | 
				
			||||
# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
 | 
				
			||||
# documentation generated by doxygen is written. Doxygen will use this 
 | 
				
			||||
# information to generate all constant output in the proper language. 
 | 
				
			||||
# The default language is English, other supported languages are: 
 | 
				
			||||
# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
 | 
				
			||||
# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
 | 
				
			||||
# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
 | 
				
			||||
# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
 | 
				
			||||
# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
 | 
				
			||||
# Spanish, Swedish, and Ukrainian.
 | 
				
			||||
 | 
				
			||||
OUTPUT_LANGUAGE        = English
 | 
				
			||||
 | 
				
			||||
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# include brief member descriptions after the members that are listed in 
 | 
				
			||||
# the file and class documentation (similar to JavaDoc). 
 | 
				
			||||
# Set to NO to disable this.
 | 
				
			||||
 | 
				
			||||
BRIEF_MEMBER_DESC      = YES
 | 
				
			||||
 | 
				
			||||
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
 | 
				
			||||
# the brief description of a member or function before the detailed description. 
 | 
				
			||||
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
 | 
				
			||||
# brief descriptions will be completely suppressed.
 | 
				
			||||
 | 
				
			||||
REPEAT_BRIEF           = YES
 | 
				
			||||
 | 
				
			||||
# This tag implements a quasi-intelligent brief description abbreviator 
 | 
				
			||||
# that is used to form the text in various listings. Each string 
 | 
				
			||||
# in this list, if found as the leading text of the brief description, will be 
 | 
				
			||||
# stripped from the text and the result after processing the whole list, is 
 | 
				
			||||
# used as the annotated text. Otherwise, the brief description is used as-is. 
 | 
				
			||||
# If left blank, the following values are used ("$name" is automatically 
 | 
				
			||||
# replaced with the name of the entity): "The $name class" "The $name widget" 
 | 
				
			||||
# "The $name file" "is" "provides" "specifies" "contains" 
 | 
				
			||||
# "represents" "a" "an" "the"
 | 
				
			||||
 | 
				
			||||
ABBREVIATE_BRIEF       = "The $name class" \
 | 
				
			||||
                         "The $name widget" \
 | 
				
			||||
                         "The $name file" \
 | 
				
			||||
                         is \
 | 
				
			||||
                         provides \
 | 
				
			||||
                         specifies \
 | 
				
			||||
                         contains \
 | 
				
			||||
                         represents \
 | 
				
			||||
                         a \
 | 
				
			||||
                         an \
 | 
				
			||||
                         the
 | 
				
			||||
 | 
				
			||||
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
 | 
				
			||||
# Doxygen will generate a detailed section even if there is only a brief 
 | 
				
			||||
# description.
 | 
				
			||||
 | 
				
			||||
ALWAYS_DETAILED_SEC    = NO
 | 
				
			||||
 | 
				
			||||
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
 | 
				
			||||
# inherited members of a class in the documentation of that class as if those 
 | 
				
			||||
# members were ordinary class members. Constructors, destructors and assignment 
 | 
				
			||||
# operators of the base classes will not be shown.
 | 
				
			||||
 | 
				
			||||
INLINE_INHERITED_MEMB  = NO
 | 
				
			||||
 | 
				
			||||
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
 | 
				
			||||
# path before files name in the file list and in the header files. If set 
 | 
				
			||||
# to NO the shortest path that makes the file name unique will be used.
 | 
				
			||||
 | 
				
			||||
FULL_PATH_NAMES        = YES
 | 
				
			||||
 | 
				
			||||
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
 | 
				
			||||
# can be used to strip a user-defined part of the path. Stripping is 
 | 
				
			||||
# only done if one of the specified strings matches the left-hand part of 
 | 
				
			||||
# the path. The tag can be used to show relative paths in the file list. 
 | 
				
			||||
# If left blank the directory from which doxygen is run is used as the 
 | 
				
			||||
# path to strip.
 | 
				
			||||
 | 
				
			||||
STRIP_FROM_PATH        = 
 | 
				
			||||
 | 
				
			||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
 | 
				
			||||
# the path mentioned in the documentation of a class, which tells 
 | 
				
			||||
# the reader which header file to include in order to use a class. 
 | 
				
			||||
# If left blank only the name of the header file containing the class 
 | 
				
			||||
# definition is used. Otherwise one should specify the include paths that 
 | 
				
			||||
# are normally passed to the compiler using the -I flag.
 | 
				
			||||
 | 
				
			||||
STRIP_FROM_INC_PATH    = 
 | 
				
			||||
 | 
				
			||||
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
 | 
				
			||||
# (but less readable) file names. This can be useful is your file systems 
 | 
				
			||||
# doesn't support long names like on DOS, Mac, or CD-ROM.
 | 
				
			||||
 | 
				
			||||
SHORT_NAMES            = YES
 | 
				
			||||
 | 
				
			||||
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
 | 
				
			||||
# will interpret the first line (until the first dot) of a JavaDoc-style 
 | 
				
			||||
# comment as the brief description. If set to NO, the JavaDoc 
 | 
				
			||||
# comments will behave just like regular Qt-style comments 
 | 
				
			||||
# (thus requiring an explicit @brief command for a brief description.)
 | 
				
			||||
 | 
				
			||||
JAVADOC_AUTOBRIEF      = NO
 | 
				
			||||
 | 
				
			||||
# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
 | 
				
			||||
# interpret the first line (until the first dot) of a Qt-style 
 | 
				
			||||
# comment as the brief description. If set to NO, the comments 
 | 
				
			||||
# will behave just like regular Qt-style comments (thus requiring 
 | 
				
			||||
# an explicit \brief command for a brief description.)
 | 
				
			||||
 | 
				
			||||
QT_AUTOBRIEF           = NO
 | 
				
			||||
 | 
				
			||||
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
 | 
				
			||||
# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
 | 
				
			||||
# comments) as a brief description. This used to be the default behaviour. 
 | 
				
			||||
# The new default is to treat a multi-line C++ comment block as a detailed 
 | 
				
			||||
# description. Set this tag to YES if you prefer the old behaviour instead.
 | 
				
			||||
 | 
				
			||||
MULTILINE_CPP_IS_BRIEF = NO
 | 
				
			||||
 | 
				
			||||
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
 | 
				
			||||
# member inherits the documentation from any documented member that it 
 | 
				
			||||
# re-implements.
 | 
				
			||||
 | 
				
			||||
INHERIT_DOCS           = YES
 | 
				
			||||
 | 
				
			||||
# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
 | 
				
			||||
# a new page for each member. If set to NO, the documentation of a member will 
 | 
				
			||||
# be part of the file/class/namespace that contains it.
 | 
				
			||||
 | 
				
			||||
SEPARATE_MEMBER_PAGES  = NO
 | 
				
			||||
 | 
				
			||||
# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
 | 
				
			||||
# Doxygen uses this value to replace tabs by spaces in code fragments.
 | 
				
			||||
 | 
				
			||||
TAB_SIZE               = 4
 | 
				
			||||
 | 
				
			||||
# This tag can be used to specify a number of aliases that acts 
 | 
				
			||||
# as commands in the documentation. An alias has the form "name=value". 
 | 
				
			||||
# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
 | 
				
			||||
# put the command \sideeffect (or @sideeffect) in the documentation, which 
 | 
				
			||||
# will result in a user-defined paragraph with heading "Side Effects:". 
 | 
				
			||||
# You can put \n's in the value part of an alias to insert newlines.
 | 
				
			||||
 | 
				
			||||
ALIASES                = 
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for C. 
 | 
				
			||||
# For instance, some of the names that are used will be different. The list 
 | 
				
			||||
# of all members will be omitted, etc.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_FOR_C  = YES
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for 
 | 
				
			||||
# Java. For instance, namespaces will be presented as packages, qualified 
 | 
				
			||||
# scopes will look different, etc.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_JAVA   = NO
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
 | 
				
			||||
# sources only. Doxygen will then generate output that is more tailored for 
 | 
				
			||||
# Fortran.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_FOR_FORTRAN   = NO
 | 
				
			||||
 | 
				
			||||
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
 | 
				
			||||
# sources. Doxygen will then generate output that is tailored for 
 | 
				
			||||
# VHDL.
 | 
				
			||||
 | 
				
			||||
OPTIMIZE_OUTPUT_VHDL   = NO
 | 
				
			||||
 | 
				
			||||
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
 | 
				
			||||
# to include (a tag file for) the STL sources as input, then you should 
 | 
				
			||||
# set this tag to YES in order to let doxygen match functions declarations and 
 | 
				
			||||
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
 | 
				
			||||
# func(std::string) {}). This also make the inheritance and collaboration 
 | 
				
			||||
# diagrams that involve STL classes more complete and accurate.
 | 
				
			||||
 | 
				
			||||
BUILTIN_STL_SUPPORT    = NO
 | 
				
			||||
 | 
				
			||||
# If you use Microsoft's C++/CLI language, you should set this option to YES to
 | 
				
			||||
# enable parsing support.
 | 
				
			||||
 | 
				
			||||
CPP_CLI_SUPPORT        = NO
 | 
				
			||||
 | 
				
			||||
# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
 | 
				
			||||
# Doxygen will parse them like normal C++ but will assume all classes use public 
 | 
				
			||||
# instead of private inheritance when no explicit protection keyword is present.
 | 
				
			||||
 | 
				
			||||
SIP_SUPPORT            = NO
 | 
				
			||||
 | 
				
			||||
# For Microsoft's IDL there are propget and propput attributes to indicate getter 
 | 
				
			||||
# and setter methods for a property. Setting this option to YES (the default) 
 | 
				
			||||
# will make doxygen to replace the get and set methods by a property in the 
 | 
				
			||||
# documentation. This will only work if the methods are indeed getting or 
 | 
				
			||||
# setting a simple type. If this is not the case, or you want to show the 
 | 
				
			||||
# methods anyway, you should set this option to NO.
 | 
				
			||||
 | 
				
			||||
IDL_PROPERTY_SUPPORT   = YES
 | 
				
			||||
 | 
				
			||||
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
 | 
				
			||||
# tag is set to YES, then doxygen will reuse the documentation of the first 
 | 
				
			||||
# member in the group (if any) for the other members of the group. By default 
 | 
				
			||||
# all members of a group must be documented explicitly.
 | 
				
			||||
 | 
				
			||||
DISTRIBUTE_GROUP_DOC   = NO
 | 
				
			||||
 | 
				
			||||
# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
 | 
				
			||||
# the same type (for instance a group of public functions) to be put as a 
 | 
				
			||||
# subgroup of that type (e.g. under the Public Functions section). Set it to 
 | 
				
			||||
# NO to prevent subgrouping. Alternatively, this can be done per class using 
 | 
				
			||||
# the \nosubgrouping command.
 | 
				
			||||
 | 
				
			||||
SUBGROUPING            = YES
 | 
				
			||||
 | 
				
			||||
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
 | 
				
			||||
# is documented as struct, union, or enum with the name of the typedef. So 
 | 
				
			||||
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
 | 
				
			||||
# with name TypeT. When disabled the typedef will appear as a member of a file, 
 | 
				
			||||
# namespace, or class. And the struct will be named TypeS. This can typically 
 | 
				
			||||
# be useful for C code in case the coding convention dictates that all compound 
 | 
				
			||||
# types are typedef'ed and only the typedef is referenced, never the tag name.
 | 
				
			||||
 | 
				
			||||
TYPEDEF_HIDES_STRUCT   = NO
 | 
				
			||||
 | 
				
			||||
# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
 | 
				
			||||
# determine which symbols to keep in memory and which to flush to disk.
 | 
				
			||||
# When the cache is full, less often used symbols will be written to disk.
 | 
				
			||||
# For small to medium size projects (<1000 input files) the default value is 
 | 
				
			||||
# probably good enough. For larger projects a too small cache size can cause 
 | 
				
			||||
# doxygen to be busy swapping symbols to and from disk most of the time 
 | 
				
			||||
# causing a significant performance penality. 
 | 
				
			||||
# If the system has enough physical memory increasing the cache will improve the 
 | 
				
			||||
# performance by keeping more symbols in memory. Note that the value works on 
 | 
				
			||||
# a logarithmic scale so increasing the size by one will rougly double the 
 | 
				
			||||
# memory usage. The cache size is given by this formula: 
 | 
				
			||||
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
 | 
				
			||||
# corresponding to a cache size of 2^16 = 65536 symbols
 | 
				
			||||
 | 
				
			||||
SYMBOL_CACHE_SIZE      = 0
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Build related configuration options
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
 | 
				
			||||
# documentation are documented, even if no documentation was available. 
 | 
				
			||||
# Private class members and static file members will be hidden unless 
 | 
				
			||||
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 | 
				
			||||
 | 
				
			||||
EXTRACT_ALL            = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
 | 
				
			||||
# will be included in the documentation.
 | 
				
			||||
 | 
				
			||||
EXTRACT_PRIVATE        = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_STATIC tag is set to YES all static members of a file 
 | 
				
			||||
# will be included in the documentation.
 | 
				
			||||
 | 
				
			||||
EXTRACT_STATIC         = YES
 | 
				
			||||
 | 
				
			||||
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
 | 
				
			||||
# defined locally in source files will be included in the documentation. 
 | 
				
			||||
# If set to NO only classes defined in header files are included.
 | 
				
			||||
 | 
				
			||||
EXTRACT_LOCAL_CLASSES  = YES
 | 
				
			||||
 | 
				
			||||
# This flag is only useful for Objective-C code. When set to YES local 
 | 
				
			||||
# methods, which are defined in the implementation section but not in 
 | 
				
			||||
# the interface are included in the documentation. 
 | 
				
			||||
# If set to NO (the default) only methods in the interface are included.
 | 
				
			||||
 | 
				
			||||
EXTRACT_LOCAL_METHODS  = NO
 | 
				
			||||
 | 
				
			||||
# If this flag is set to YES, the members of anonymous namespaces will be 
 | 
				
			||||
# extracted and appear in the documentation as a namespace called 
 | 
				
			||||
# 'anonymous_namespace{file}', where file will be replaced with the base 
 | 
				
			||||
# name of the file that contains the anonymous namespace. By default 
 | 
				
			||||
# anonymous namespace are hidden.
 | 
				
			||||
 | 
				
			||||
EXTRACT_ANON_NSPACES   = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# undocumented members of documented classes, files or namespaces. 
 | 
				
			||||
# If set to NO (the default) these members will be included in the 
 | 
				
			||||
# various overviews, but no documentation section is generated. 
 | 
				
			||||
# This option has no effect if EXTRACT_ALL is enabled.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_MEMBERS     = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# undocumented classes that are normally visible in the class hierarchy. 
 | 
				
			||||
# If set to NO (the default) these classes will be included in the various 
 | 
				
			||||
# overviews. This option has no effect if EXTRACT_ALL is enabled.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_CLASSES     = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
 | 
				
			||||
# friend (class|struct|union) declarations. 
 | 
				
			||||
# If set to NO (the default) these declarations will be included in the 
 | 
				
			||||
# documentation.
 | 
				
			||||
 | 
				
			||||
HIDE_FRIEND_COMPOUNDS  = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
 | 
				
			||||
# documentation blocks found inside the body of a function. 
 | 
				
			||||
# If set to NO (the default) these blocks will be appended to the 
 | 
				
			||||
# function's detailed documentation block.
 | 
				
			||||
 | 
				
			||||
HIDE_IN_BODY_DOCS      = NO
 | 
				
			||||
 | 
				
			||||
# The INTERNAL_DOCS tag determines if documentation 
 | 
				
			||||
# that is typed after a \internal command is included. If the tag is set 
 | 
				
			||||
# to NO (the default) then the documentation will be excluded. 
 | 
				
			||||
# Set it to YES to include the internal documentation.
 | 
				
			||||
 | 
				
			||||
INTERNAL_DOCS          = NO
 | 
				
			||||
 | 
				
			||||
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
 | 
				
			||||
# file names in lower-case letters. If set to YES upper-case letters are also 
 | 
				
			||||
# allowed. This is useful if you have classes or files whose names only differ 
 | 
				
			||||
# in case and if your file system supports case sensitive file names. Windows 
 | 
				
			||||
# and Mac users are advised to set this option to NO.
 | 
				
			||||
 | 
				
			||||
CASE_SENSE_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
 | 
				
			||||
# will show members with their full class and namespace scopes in the 
 | 
				
			||||
# documentation. If set to YES the scope will be hidden.
 | 
				
			||||
 | 
				
			||||
HIDE_SCOPE_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
 | 
				
			||||
# will put a list of the files that are included by a file in the documentation 
 | 
				
			||||
# of that file.
 | 
				
			||||
 | 
				
			||||
SHOW_INCLUDE_FILES     = YES
 | 
				
			||||
 | 
				
			||||
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
 | 
				
			||||
# is inserted in the documentation for inline members.
 | 
				
			||||
 | 
				
			||||
INLINE_INFO            = YES
 | 
				
			||||
 | 
				
			||||
# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
 | 
				
			||||
# will sort the (detailed) documentation of file and class members 
 | 
				
			||||
# alphabetically by member name. If set to NO the members will appear in 
 | 
				
			||||
# declaration order.
 | 
				
			||||
 | 
				
			||||
SORT_MEMBER_DOCS       = YES
 | 
				
			||||
 | 
				
			||||
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
 | 
				
			||||
# brief documentation of file, namespace and class members alphabetically 
 | 
				
			||||
# by member name. If set to NO (the default) the members will appear in 
 | 
				
			||||
# declaration order.
 | 
				
			||||
 | 
				
			||||
SORT_BRIEF_DOCS        = NO
 | 
				
			||||
 | 
				
			||||
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
 | 
				
			||||
# hierarchy of group names into alphabetical order. If set to NO (the default) 
 | 
				
			||||
# the group names will appear in their defined order.
 | 
				
			||||
 | 
				
			||||
SORT_GROUP_NAMES       = NO
 | 
				
			||||
 | 
				
			||||
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
 | 
				
			||||
# sorted by fully-qualified names, including namespaces. If set to 
 | 
				
			||||
# NO (the default), the class list will be sorted only by class name, 
 | 
				
			||||
# not including the namespace part. 
 | 
				
			||||
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
 | 
				
			||||
# Note: This option applies only to the class list, not to the 
 | 
				
			||||
# alphabetical list.
 | 
				
			||||
 | 
				
			||||
SORT_BY_SCOPE_NAME     = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TODOLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the todo list. This list is created by putting \todo 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_TODOLIST      = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TESTLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the test list. This list is created by putting \test 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_TESTLIST      = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_BUGLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the bug list. This list is created by putting \bug 
 | 
				
			||||
# commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_BUGLIST       = NO
 | 
				
			||||
 | 
				
			||||
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
 | 
				
			||||
# disable (NO) the deprecated list. This list is created by putting 
 | 
				
			||||
# \deprecated commands in the documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_DEPRECATEDLIST= YES
 | 
				
			||||
 | 
				
			||||
# The ENABLED_SECTIONS tag can be used to enable conditional 
 | 
				
			||||
# documentation sections, marked by \if sectionname ... \endif.
 | 
				
			||||
 | 
				
			||||
ENABLED_SECTIONS       = 
 | 
				
			||||
 | 
				
			||||
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
 | 
				
			||||
# the initial value of a variable or define consists of for it to appear in 
 | 
				
			||||
# the documentation. If the initializer consists of more lines than specified 
 | 
				
			||||
# here it will be hidden. Use a value of 0 to hide initializers completely. 
 | 
				
			||||
# The appearance of the initializer of individual variables and defines in the 
 | 
				
			||||
# documentation can be controlled using \showinitializer or \hideinitializer 
 | 
				
			||||
# command in the documentation regardless of this setting.
 | 
				
			||||
 | 
				
			||||
MAX_INITIALIZER_LINES  = 30
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
 | 
				
			||||
# at the bottom of the documentation of classes and structs. If set to YES the 
 | 
				
			||||
# list will mention the files that were used to generate the documentation.
 | 
				
			||||
 | 
				
			||||
SHOW_USED_FILES        = YES
 | 
				
			||||
 | 
				
			||||
# If the sources in your project are distributed over multiple directories 
 | 
				
			||||
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
 | 
				
			||||
# in the documentation. The default is NO.
 | 
				
			||||
 | 
				
			||||
SHOW_DIRECTORIES       = YES
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
 | 
				
			||||
# This will remove the Files entry from the Quick Index and from the 
 | 
				
			||||
# Folder Tree View (if specified). The default is YES.
 | 
				
			||||
 | 
				
			||||
SHOW_FILES             = YES
 | 
				
			||||
 | 
				
			||||
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
 | 
				
			||||
# Namespaces page.  This will remove the Namespaces entry from the Quick Index
 | 
				
			||||
# and from the Folder Tree View (if specified). The default is YES.
 | 
				
			||||
 | 
				
			||||
SHOW_NAMESPACES        = YES
 | 
				
			||||
 | 
				
			||||
# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
 | 
				
			||||
# doxygen should invoke to get the current version for each file (typically from 
 | 
				
			||||
# the version control system). Doxygen will invoke the program by executing (via 
 | 
				
			||||
# popen()) the command <command> <input-file>, where <command> is the value of 
 | 
				
			||||
# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
 | 
				
			||||
# provided by doxygen. Whatever the program writes to standard output 
 | 
				
			||||
# is used as the file version. See the manual for examples.
 | 
				
			||||
 | 
				
			||||
FILE_VERSION_FILTER    = 
 | 
				
			||||
 | 
				
			||||
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
 | 
				
			||||
# doxygen. The layout file controls the global structure of the generated output files 
 | 
				
			||||
# in an output format independent way. The create the layout file that represents 
 | 
				
			||||
# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
 | 
				
			||||
# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
 | 
				
			||||
# of the layout file.
 | 
				
			||||
 | 
				
			||||
LAYOUT_FILE            = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to warning and progress messages
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The QUIET tag can be used to turn on/off the messages that are generated 
 | 
				
			||||
# by doxygen. Possible values are YES and NO. If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
QUIET                  = YES
 | 
				
			||||
 | 
				
			||||
# The WARNINGS tag can be used to turn on/off the warning messages that are 
 | 
				
			||||
# generated by doxygen. Possible values are YES and NO. If left blank 
 | 
				
			||||
# NO is used.
 | 
				
			||||
 | 
				
			||||
WARNINGS               = YES
 | 
				
			||||
 | 
				
			||||
# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
 | 
				
			||||
# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
 | 
				
			||||
# automatically be disabled.
 | 
				
			||||
 | 
				
			||||
WARN_IF_UNDOCUMENTED   = YES
 | 
				
			||||
 | 
				
			||||
# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
 | 
				
			||||
# potential errors in the documentation, such as not documenting some 
 | 
				
			||||
# parameters in a documented function, or documenting parameters that 
 | 
				
			||||
# don't exist or using markup commands wrongly.
 | 
				
			||||
 | 
				
			||||
WARN_IF_DOC_ERROR      = YES
 | 
				
			||||
 | 
				
			||||
# This WARN_NO_PARAMDOC option can be abled to get warnings for 
 | 
				
			||||
# functions that are documented, but have no documentation for their parameters 
 | 
				
			||||
# or return value. If set to NO (the default) doxygen will only warn about 
 | 
				
			||||
# wrong or incomplete parameter documentation, but not about the absence of 
 | 
				
			||||
# documentation.
 | 
				
			||||
 | 
				
			||||
WARN_NO_PARAMDOC       = YES
 | 
				
			||||
 | 
				
			||||
# The WARN_FORMAT tag determines the format of the warning messages that 
 | 
				
			||||
# doxygen can produce. The string should contain the $file, $line, and $text 
 | 
				
			||||
# tags, which will be replaced by the file and line number from which the 
 | 
				
			||||
# warning originated and the warning text. Optionally the format may contain 
 | 
				
			||||
# $version, which will be replaced by the version of the file (if it could 
 | 
				
			||||
# be obtained via FILE_VERSION_FILTER)
 | 
				
			||||
 | 
				
			||||
WARN_FORMAT            = "$file:$line: $text"
 | 
				
			||||
 | 
				
			||||
# The WARN_LOGFILE tag can be used to specify a file to which warning 
 | 
				
			||||
# and error messages should be written. If left blank the output is written 
 | 
				
			||||
# to stderr.
 | 
				
			||||
 | 
				
			||||
WARN_LOGFILE           = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the input files
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The INPUT tag can be used to specify the files and/or directories that contain 
 | 
				
			||||
# documented source files. You may enter file names like "myfile.cpp" or 
 | 
				
			||||
# directories like "/usr/src/myproject". Separate the files or directories 
 | 
				
			||||
# with spaces.
 | 
				
			||||
 | 
				
			||||
INPUT                  = ./
 | 
				
			||||
 | 
				
			||||
# This tag can be used to specify the character encoding of the source files 
 | 
				
			||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
 | 
				
			||||
# also the default input encoding. Doxygen uses libiconv (or the iconv built 
 | 
				
			||||
# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
 | 
				
			||||
# the list of possible encodings.
 | 
				
			||||
 | 
				
			||||
INPUT_ENCODING         = UTF-8
 | 
				
			||||
 | 
				
			||||
# If the value of the INPUT tag contains directories, you can use the 
 | 
				
			||||
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 | 
				
			||||
# and *.h) to filter out the source-files in the directories. If left 
 | 
				
			||||
# blank the following patterns are tested: 
 | 
				
			||||
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
 | 
				
			||||
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 | 
				
			||||
 | 
				
			||||
FILE_PATTERNS          = *.h \
 | 
				
			||||
                         *.c \
 | 
				
			||||
						 *.txt
 | 
				
			||||
 | 
				
			||||
# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 | 
				
			||||
# should be searched for input files as well. Possible values are YES and NO. 
 | 
				
			||||
# If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
RECURSIVE              = YES
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE tag can be used to specify files and/or directories that should 
 | 
				
			||||
# excluded from the INPUT source files. This way you can easily exclude a 
 | 
				
			||||
# subdirectory from a directory tree whose root is specified with the INPUT tag.
 | 
				
			||||
 | 
				
			||||
EXCLUDE                = 
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
 | 
				
			||||
# directories that are symbolic links (a Unix filesystem feature) are excluded 
 | 
				
			||||
# from the input.
 | 
				
			||||
 | 
				
			||||
EXCLUDE_SYMLINKS       = NO
 | 
				
			||||
 | 
				
			||||
# If the value of the INPUT tag contains directories, you can use the 
 | 
				
			||||
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
 | 
				
			||||
# certain files from those directories. Note that the wildcards are matched 
 | 
				
			||||
# against the file with absolute path, so to exclude all test directories 
 | 
				
			||||
# for example use the pattern */test/*
 | 
				
			||||
 | 
				
			||||
EXCLUDE_PATTERNS       = */LowLevel/USBMode.h
 | 
				
			||||
 | 
				
			||||
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
 | 
				
			||||
# (namespaces, classes, functions, etc.) that should be excluded from the 
 | 
				
			||||
# output. The symbol name can be a fully qualified name, a word, or if the 
 | 
				
			||||
# wildcard * is used, a substring. Examples: ANamespace, AClass, 
 | 
				
			||||
# AClass::ANamespace, ANamespace::*Test
 | 
				
			||||
 | 
				
			||||
EXCLUDE_SYMBOLS        = __*
 | 
				
			||||
 | 
				
			||||
# The EXAMPLE_PATH tag can be used to specify one or more files or 
 | 
				
			||||
# directories that contain example code fragments that are included (see 
 | 
				
			||||
# the \include command).
 | 
				
			||||
 | 
				
			||||
EXAMPLE_PATH           = 
 | 
				
			||||
 | 
				
			||||
# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
 | 
				
			||||
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 | 
				
			||||
# and *.h) to filter out the source-files in the directories. If left 
 | 
				
			||||
# blank all files are included.
 | 
				
			||||
 | 
				
			||||
EXAMPLE_PATTERNS       = *
 | 
				
			||||
 | 
				
			||||
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
 | 
				
			||||
# searched for input files to be used with the \include or \dontinclude 
 | 
				
			||||
# commands irrespective of the value of the RECURSIVE tag. 
 | 
				
			||||
# Possible values are YES and NO. If left blank NO is used.
 | 
				
			||||
 | 
				
			||||
EXAMPLE_RECURSIVE      = NO
 | 
				
			||||
 | 
				
			||||
# The IMAGE_PATH tag can be used to specify one or more files or 
 | 
				
			||||
# directories that contain image that are included in the documentation (see 
 | 
				
			||||
# the \image command).
 | 
				
			||||
 | 
				
			||||
IMAGE_PATH             = 
 | 
				
			||||
 | 
				
			||||
# The INPUT_FILTER tag can be used to specify a program that doxygen should 
 | 
				
			||||
# invoke to filter for each input file. Doxygen will invoke the filter program 
 | 
				
			||||
# by executing (via popen()) the command <filter> <input-file>, where <filter> 
 | 
				
			||||
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
 | 
				
			||||
# input file. Doxygen will then use the output that the filter program writes 
 | 
				
			||||
# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
 | 
				
			||||
# ignored.
 | 
				
			||||
 | 
				
			||||
INPUT_FILTER           = 
 | 
				
			||||
 | 
				
			||||
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
 | 
				
			||||
# basis.  Doxygen will compare the file name with each pattern and apply the 
 | 
				
			||||
# filter if there is a match.  The filters are a list of the form: 
 | 
				
			||||
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
 | 
				
			||||
# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
 | 
				
			||||
# is applied to all files.
 | 
				
			||||
 | 
				
			||||
FILTER_PATTERNS        = 
 | 
				
			||||
 | 
				
			||||
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
 | 
				
			||||
# INPUT_FILTER) will be used to filter the input files when producing source 
 | 
				
			||||
# files to browse (i.e. when SOURCE_BROWSER is set to YES).
 | 
				
			||||
 | 
				
			||||
FILTER_SOURCE_FILES    = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to source browsing
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
 | 
				
			||||
# be generated. Documented entities will be cross-referenced with these sources. 
 | 
				
			||||
# Note: To get rid of all source code in the generated output, make sure also 
 | 
				
			||||
# VERBATIM_HEADERS is set to NO.
 | 
				
			||||
 | 
				
			||||
SOURCE_BROWSER         = NO
 | 
				
			||||
 | 
				
			||||
# Setting the INLINE_SOURCES tag to YES will include the body 
 | 
				
			||||
# of functions and classes directly in the documentation.
 | 
				
			||||
 | 
				
			||||
INLINE_SOURCES         = NO
 | 
				
			||||
 | 
				
			||||
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
 | 
				
			||||
# doxygen to hide any special comment blocks from generated source code 
 | 
				
			||||
# fragments. Normal C and C++ comments will always remain visible.
 | 
				
			||||
 | 
				
			||||
STRIP_CODE_COMMENTS    = YES
 | 
				
			||||
 | 
				
			||||
# If the REFERENCED_BY_RELATION tag is set to YES 
 | 
				
			||||
# then for each documented function all documented 
 | 
				
			||||
# functions referencing it will be listed.
 | 
				
			||||
 | 
				
			||||
REFERENCED_BY_RELATION = NO
 | 
				
			||||
 | 
				
			||||
# If the REFERENCES_RELATION tag is set to YES 
 | 
				
			||||
# then for each documented function all documented entities 
 | 
				
			||||
# called/used by that function will be listed.
 | 
				
			||||
 | 
				
			||||
REFERENCES_RELATION    = NO
 | 
				
			||||
 | 
				
			||||
# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
 | 
				
			||||
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
 | 
				
			||||
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
 | 
				
			||||
# link to the source code.  Otherwise they will link to the documentstion.
 | 
				
			||||
 | 
				
			||||
REFERENCES_LINK_SOURCE = NO
 | 
				
			||||
 | 
				
			||||
# If the USE_HTAGS tag is set to YES then the references to source code 
 | 
				
			||||
# will point to the HTML generated by the htags(1) tool instead of doxygen 
 | 
				
			||||
# built-in source browser. The htags tool is part of GNU's global source 
 | 
				
			||||
# tagging system (see http://www.gnu.org/software/global/global.html). You 
 | 
				
			||||
# will need version 4.8.6 or higher.
 | 
				
			||||
 | 
				
			||||
USE_HTAGS              = NO
 | 
				
			||||
 | 
				
			||||
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
 | 
				
			||||
# will generate a verbatim copy of the header file for each class for 
 | 
				
			||||
# which an include is specified. Set to NO to disable this.
 | 
				
			||||
 | 
				
			||||
VERBATIM_HEADERS       = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the alphabetical class index
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
 | 
				
			||||
# of all compounds will be generated. Enable this if the project 
 | 
				
			||||
# contains a lot of classes, structs, unions or interfaces.
 | 
				
			||||
 | 
				
			||||
ALPHABETICAL_INDEX     = YES
 | 
				
			||||
 | 
				
			||||
# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
 | 
				
			||||
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
 | 
				
			||||
# in which this list will be split (can be a number in the range [1..20])
 | 
				
			||||
 | 
				
			||||
COLS_IN_ALPHA_INDEX    = 5
 | 
				
			||||
 | 
				
			||||
# In case all classes in a project start with a common prefix, all 
 | 
				
			||||
# classes will be put under the same header in the alphabetical index. 
 | 
				
			||||
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
 | 
				
			||||
# should be ignored while generating the index headers.
 | 
				
			||||
 | 
				
			||||
IGNORE_PREFIX          = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the HTML output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate HTML output.
 | 
				
			||||
 | 
				
			||||
GENERATE_HTML          = YES
 | 
				
			||||
 | 
				
			||||
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `html' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
HTML_OUTPUT            = html
 | 
				
			||||
 | 
				
			||||
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
 | 
				
			||||
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
 | 
				
			||||
# doxygen will generate files with .html extension.
 | 
				
			||||
 | 
				
			||||
HTML_FILE_EXTENSION    = .html
 | 
				
			||||
 | 
				
			||||
# The HTML_HEADER tag can be used to specify a personal HTML header for 
 | 
				
			||||
# each generated HTML page. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard header.
 | 
				
			||||
 | 
				
			||||
HTML_HEADER            = 
 | 
				
			||||
 | 
				
			||||
# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
 | 
				
			||||
# each generated HTML page. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard footer.
 | 
				
			||||
 | 
				
			||||
HTML_FOOTER            = 
 | 
				
			||||
 | 
				
			||||
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
 | 
				
			||||
# style sheet that is used by each HTML page. It can be used to 
 | 
				
			||||
# fine-tune the look of the HTML output. If the tag is left blank doxygen 
 | 
				
			||||
# will generate a default style sheet. Note that doxygen will try to copy 
 | 
				
			||||
# the style sheet file to the HTML output directory, so don't put your own 
 | 
				
			||||
# stylesheet in the HTML output directory as well, or it will be erased!
 | 
				
			||||
 | 
				
			||||
HTML_STYLESHEET        = 
 | 
				
			||||
 | 
				
			||||
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
 | 
				
			||||
# files or namespaces will be aligned in HTML using tables. If set to 
 | 
				
			||||
# NO a bullet list will be used.
 | 
				
			||||
 | 
				
			||||
HTML_ALIGN_MEMBERS     = YES
 | 
				
			||||
 | 
				
			||||
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
 | 
				
			||||
# documentation will contain sections that can be hidden and shown after the 
 | 
				
			||||
# page has loaded. For this to work a browser that supports 
 | 
				
			||||
# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
 | 
				
			||||
# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
 | 
				
			||||
 | 
				
			||||
HTML_DYNAMIC_SECTIONS  = YES
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_DOCSET tag is set to YES, additional index files 
 | 
				
			||||
# will be generated that can be used as input for Apple's Xcode 3 
 | 
				
			||||
# integrated development environment, introduced with OSX 10.5 (Leopard). 
 | 
				
			||||
# To create a documentation set, doxygen will generate a Makefile in the 
 | 
				
			||||
# HTML output directory. Running make will produce the docset in that 
 | 
				
			||||
# directory and running "make install" will install the docset in 
 | 
				
			||||
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
 | 
				
			||||
# it at startup. 
 | 
				
			||||
# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
 | 
				
			||||
 | 
				
			||||
GENERATE_DOCSET        = NO
 | 
				
			||||
 | 
				
			||||
# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
 | 
				
			||||
# feed. A documentation feed provides an umbrella under which multiple 
 | 
				
			||||
# documentation sets from a single provider (such as a company or product suite) 
 | 
				
			||||
# can be grouped.
 | 
				
			||||
 | 
				
			||||
DOCSET_FEEDNAME        = "Doxygen generated docs"
 | 
				
			||||
 | 
				
			||||
# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
 | 
				
			||||
# should uniquely identify the documentation set bundle. This should be a 
 | 
				
			||||
# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
 | 
				
			||||
# will append .docset to the name.
 | 
				
			||||
 | 
				
			||||
DOCSET_BUNDLE_ID       = org.doxygen.Project
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
 | 
				
			||||
# will be generated that can be used as input for tools like the 
 | 
				
			||||
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
 | 
				
			||||
# of the generated HTML documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_HTMLHELP      = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
 | 
				
			||||
# be used to specify the file name of the resulting .chm file. You 
 | 
				
			||||
# can add a path in front of the file if the result should not be 
 | 
				
			||||
# written to the html output directory.
 | 
				
			||||
 | 
				
			||||
CHM_FILE               = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
 | 
				
			||||
# be used to specify the location (absolute path including file name) of 
 | 
				
			||||
# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
 | 
				
			||||
# the HTML help compiler on the generated index.hhp.
 | 
				
			||||
 | 
				
			||||
HHC_LOCATION           = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
 | 
				
			||||
# controls if a separate .chi index file is generated (YES) or that 
 | 
				
			||||
# it should be included in the master .chm file (NO).
 | 
				
			||||
 | 
				
			||||
GENERATE_CHI           = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
 | 
				
			||||
# is used to encode HtmlHelp index (hhk), content (hhc) and project file
 | 
				
			||||
# content.
 | 
				
			||||
 | 
				
			||||
CHM_INDEX_ENCODING     = 
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
 | 
				
			||||
# controls whether a binary table of contents is generated (YES) or a 
 | 
				
			||||
# normal table of contents (NO) in the .chm file.
 | 
				
			||||
 | 
				
			||||
BINARY_TOC             = NO
 | 
				
			||||
 | 
				
			||||
# The TOC_EXPAND flag can be set to YES to add extra items for group members 
 | 
				
			||||
# to the contents of the HTML help documentation and to the tree view.
 | 
				
			||||
 | 
				
			||||
TOC_EXPAND             = YES
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
 | 
				
			||||
# are set, an additional index file will be generated that can be used as input for 
 | 
				
			||||
# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
 | 
				
			||||
# HTML documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_QHP           = NO
 | 
				
			||||
 | 
				
			||||
# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
 | 
				
			||||
# be used to specify the file name of the resulting .qch file. 
 | 
				
			||||
# The path specified is relative to the HTML output folder.
 | 
				
			||||
 | 
				
			||||
QCH_FILE               = 
 | 
				
			||||
 | 
				
			||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating 
 | 
				
			||||
# Qt Help Project output. For more information please see 
 | 
				
			||||
# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.
 | 
				
			||||
 | 
				
			||||
QHP_NAMESPACE          = org.doxygen.Project
 | 
				
			||||
 | 
				
			||||
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
 | 
				
			||||
# Qt Help Project output. For more information please see 
 | 
				
			||||
# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.
 | 
				
			||||
 | 
				
			||||
QHP_VIRTUAL_FOLDER     = doc
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
 | 
				
			||||
# be used to specify the location of Qt's qhelpgenerator. 
 | 
				
			||||
# If non-empty doxygen will try to run qhelpgenerator on the generated 
 | 
				
			||||
# .qhp file .
 | 
				
			||||
 | 
				
			||||
QHG_LOCATION           = 
 | 
				
			||||
 | 
				
			||||
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
 | 
				
			||||
# top of each HTML page. The value NO (the default) enables the index and 
 | 
				
			||||
# the value YES disables it.
 | 
				
			||||
 | 
				
			||||
DISABLE_INDEX          = NO
 | 
				
			||||
 | 
				
			||||
# This tag can be used to set the number of enum values (range [1..20]) 
 | 
				
			||||
# that doxygen will group on one line in the generated HTML documentation.
 | 
				
			||||
 | 
				
			||||
ENUM_VALUES_PER_LINE   = 1
 | 
				
			||||
 | 
				
			||||
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
 | 
				
			||||
# structure should be generated to display hierarchical information.
 | 
				
			||||
# If the tag value is set to FRAME, a side panel will be generated
 | 
				
			||||
# containing a tree-like index structure (just like the one that 
 | 
				
			||||
# is generated for HTML Help). For this to work a browser that supports 
 | 
				
			||||
# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
 | 
				
			||||
# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
 | 
				
			||||
# probably better off using the HTML help feature. Other possible values 
 | 
				
			||||
# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
 | 
				
			||||
# and Class Hierarchy pages using a tree view instead of an ordered list;
 | 
				
			||||
# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
 | 
				
			||||
# disables this behavior completely. For backwards compatibility with previous
 | 
				
			||||
# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
 | 
				
			||||
# respectively.
 | 
				
			||||
 | 
				
			||||
GENERATE_TREEVIEW      = YES
 | 
				
			||||
 | 
				
			||||
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
 | 
				
			||||
# used to set the initial width (in pixels) of the frame in which the tree 
 | 
				
			||||
# is shown.
 | 
				
			||||
 | 
				
			||||
TREEVIEW_WIDTH         = 250
 | 
				
			||||
 | 
				
			||||
# Use this tag to change the font size of Latex formulas included 
 | 
				
			||||
# as images in the HTML documentation. The default is 10. Note that 
 | 
				
			||||
# when you change the font size after a successful doxygen run you need 
 | 
				
			||||
# to manually remove any form_*.png images from the HTML output directory 
 | 
				
			||||
# to force them to be regenerated.
 | 
				
			||||
 | 
				
			||||
FORMULA_FONTSIZE       = 10
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the LaTeX output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate Latex output.
 | 
				
			||||
 | 
				
			||||
GENERATE_LATEX         = NO
 | 
				
			||||
 | 
				
			||||
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `latex' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
LATEX_OUTPUT           = latex
 | 
				
			||||
 | 
				
			||||
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
 | 
				
			||||
# invoked. If left blank `latex' will be used as the default command name.
 | 
				
			||||
 | 
				
			||||
LATEX_CMD_NAME         = latex
 | 
				
			||||
 | 
				
			||||
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
 | 
				
			||||
# generate index for LaTeX. If left blank `makeindex' will be used as the 
 | 
				
			||||
# default command name.
 | 
				
			||||
 | 
				
			||||
MAKEINDEX_CMD_NAME     = makeindex
 | 
				
			||||
 | 
				
			||||
# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
 | 
				
			||||
# LaTeX documents. This may be useful for small projects and may help to 
 | 
				
			||||
# save some trees in general.
 | 
				
			||||
 | 
				
			||||
COMPACT_LATEX          = NO
 | 
				
			||||
 | 
				
			||||
# The PAPER_TYPE tag can be used to set the paper type that is used 
 | 
				
			||||
# by the printer. Possible values are: a4, a4wide, letter, legal and 
 | 
				
			||||
# executive. If left blank a4wide will be used.
 | 
				
			||||
 | 
				
			||||
PAPER_TYPE             = a4wide
 | 
				
			||||
 | 
				
			||||
# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
 | 
				
			||||
# packages that should be included in the LaTeX output.
 | 
				
			||||
 | 
				
			||||
EXTRA_PACKAGES         = 
 | 
				
			||||
 | 
				
			||||
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
 | 
				
			||||
# the generated latex document. The header should contain everything until 
 | 
				
			||||
# the first chapter. If it is left blank doxygen will generate a 
 | 
				
			||||
# standard header. Notice: only use this tag if you know what you are doing!
 | 
				
			||||
 | 
				
			||||
LATEX_HEADER           = 
 | 
				
			||||
 | 
				
			||||
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
 | 
				
			||||
# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
 | 
				
			||||
# contain links (just like the HTML output) instead of page references 
 | 
				
			||||
# This makes the output suitable for online browsing using a pdf viewer.
 | 
				
			||||
 | 
				
			||||
PDF_HYPERLINKS         = YES
 | 
				
			||||
 | 
				
			||||
# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
 | 
				
			||||
# plain latex in the generated Makefile. Set this option to YES to get a 
 | 
				
			||||
# higher quality PDF documentation.
 | 
				
			||||
 | 
				
			||||
USE_PDFLATEX           = YES
 | 
				
			||||
 | 
				
			||||
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
 | 
				
			||||
# command to the generated LaTeX files. This will instruct LaTeX to keep 
 | 
				
			||||
# running if errors occur, instead of asking the user for help. 
 | 
				
			||||
# This option is also used when generating formulas in HTML.
 | 
				
			||||
 | 
				
			||||
LATEX_BATCHMODE        = NO
 | 
				
			||||
 | 
				
			||||
# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
 | 
				
			||||
# include the index chapters (such as File Index, Compound Index, etc.) 
 | 
				
			||||
# in the output.
 | 
				
			||||
 | 
				
			||||
LATEX_HIDE_INDICES     = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the RTF output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
 | 
				
			||||
# The RTF output is optimized for Word 97 and may not look very pretty with 
 | 
				
			||||
# other RTF readers or editors.
 | 
				
			||||
 | 
				
			||||
GENERATE_RTF           = NO
 | 
				
			||||
 | 
				
			||||
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `rtf' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
RTF_OUTPUT             = rtf
 | 
				
			||||
 | 
				
			||||
# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
 | 
				
			||||
# RTF documents. This may be useful for small projects and may help to 
 | 
				
			||||
# save some trees in general.
 | 
				
			||||
 | 
				
			||||
COMPACT_RTF            = NO
 | 
				
			||||
 | 
				
			||||
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
 | 
				
			||||
# will contain hyperlink fields. The RTF file will 
 | 
				
			||||
# contain links (just like the HTML output) instead of page references. 
 | 
				
			||||
# This makes the output suitable for online browsing using WORD or other 
 | 
				
			||||
# programs which support those fields. 
 | 
				
			||||
# Note: wordpad (write) and others do not support links.
 | 
				
			||||
 | 
				
			||||
RTF_HYPERLINKS         = NO
 | 
				
			||||
 | 
				
			||||
# Load stylesheet definitions from file. Syntax is similar to doxygen's 
 | 
				
			||||
# config file, i.e. a series of assignments. You only have to provide 
 | 
				
			||||
# replacements, missing definitions are set to their default value.
 | 
				
			||||
 | 
				
			||||
RTF_STYLESHEET_FILE    = 
 | 
				
			||||
 | 
				
			||||
# Set optional variables used in the generation of an rtf document. 
 | 
				
			||||
# Syntax is similar to doxygen's config file.
 | 
				
			||||
 | 
				
			||||
RTF_EXTENSIONS_FILE    = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the man page output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate man pages
 | 
				
			||||
 | 
				
			||||
GENERATE_MAN           = NO
 | 
				
			||||
 | 
				
			||||
# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `man' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
MAN_OUTPUT             = man
 | 
				
			||||
 | 
				
			||||
# The MAN_EXTENSION tag determines the extension that is added to 
 | 
				
			||||
# the generated man pages (default is the subroutine's section .3)
 | 
				
			||||
 | 
				
			||||
MAN_EXTENSION          = .3
 | 
				
			||||
 | 
				
			||||
# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
 | 
				
			||||
# then it will generate one additional man file for each entity 
 | 
				
			||||
# documented in the real man page(s). These additional files 
 | 
				
			||||
# only source the real man page, but without them the man command 
 | 
				
			||||
# would be unable to find the correct page. The default is NO.
 | 
				
			||||
 | 
				
			||||
MAN_LINKS              = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the XML output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_XML tag is set to YES Doxygen will 
 | 
				
			||||
# generate an XML file that captures the structure of 
 | 
				
			||||
# the code including all documentation.
 | 
				
			||||
 | 
				
			||||
GENERATE_XML           = NO
 | 
				
			||||
 | 
				
			||||
# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
 | 
				
			||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||
# put in front of it. If left blank `xml' will be used as the default path.
 | 
				
			||||
 | 
				
			||||
XML_OUTPUT             = xml
 | 
				
			||||
 | 
				
			||||
# The XML_SCHEMA tag can be used to specify an XML schema, 
 | 
				
			||||
# which can be used by a validating XML parser to check the 
 | 
				
			||||
# syntax of the XML files.
 | 
				
			||||
 | 
				
			||||
XML_SCHEMA             = 
 | 
				
			||||
 | 
				
			||||
# The XML_DTD tag can be used to specify an XML DTD, 
 | 
				
			||||
# which can be used by a validating XML parser to check the 
 | 
				
			||||
# syntax of the XML files.
 | 
				
			||||
 | 
				
			||||
XML_DTD                = 
 | 
				
			||||
 | 
				
			||||
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
 | 
				
			||||
# dump the program listings (including syntax highlighting 
 | 
				
			||||
# and cross-referencing information) to the XML output. Note that 
 | 
				
			||||
# enabling this will significantly increase the size of the XML output.
 | 
				
			||||
 | 
				
			||||
XML_PROGRAMLISTING     = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options for the AutoGen Definitions output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
 | 
				
			||||
# generate an AutoGen Definitions (see autogen.sf.net) file 
 | 
				
			||||
# that captures the structure of the code including all 
 | 
				
			||||
# documentation. Note that this feature is still experimental 
 | 
				
			||||
# and incomplete at the moment.
 | 
				
			||||
 | 
				
			||||
GENERATE_AUTOGEN_DEF   = NO
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# configuration options related to the Perl module output
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
 | 
				
			||||
# generate a Perl module file that captures the structure of 
 | 
				
			||||
# the code including all documentation. Note that this 
 | 
				
			||||
# feature is still experimental and incomplete at the 
 | 
				
			||||
# moment.
 | 
				
			||||
 | 
				
			||||
GENERATE_PERLMOD       = NO
 | 
				
			||||
 | 
				
			||||
# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
 | 
				
			||||
# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
 | 
				
			||||
# to generate PDF and DVI output from the Perl module output.
 | 
				
			||||
 | 
				
			||||
PERLMOD_LATEX          = NO
 | 
				
			||||
 | 
				
			||||
# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
 | 
				
			||||
# nicely formatted so it can be parsed by a human reader.  This is useful 
 | 
				
			||||
# if you want to understand what is going on.  On the other hand, if this 
 | 
				
			||||
# tag is set to NO the size of the Perl module output will be much smaller 
 | 
				
			||||
# and Perl will parse it just the same.
 | 
				
			||||
 | 
				
			||||
PERLMOD_PRETTY         = YES
 | 
				
			||||
 | 
				
			||||
# The names of the make variables in the generated doxyrules.make file 
 | 
				
			||||
# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
 | 
				
			||||
# This is useful so different doxyrules.make files included by the same 
 | 
				
			||||
# Makefile don't overwrite each other's variables.
 | 
				
			||||
 | 
				
			||||
PERLMOD_MAKEVAR_PREFIX = 
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration options related to the preprocessor   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# evaluate all C-preprocessor directives found in the sources and include 
 | 
				
			||||
# files.
 | 
				
			||||
 | 
				
			||||
ENABLE_PREPROCESSING   = YES
 | 
				
			||||
 | 
				
			||||
# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
 | 
				
			||||
# names in the source code. If set to NO (the default) only conditional 
 | 
				
			||||
# compilation will be performed. Macro expansion can be done in a controlled 
 | 
				
			||||
# way by setting EXPAND_ONLY_PREDEF to YES.
 | 
				
			||||
 | 
				
			||||
MACRO_EXPANSION        = YES
 | 
				
			||||
 | 
				
			||||
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
 | 
				
			||||
# then the macro expansion is limited to the macros specified with the 
 | 
				
			||||
# PREDEFINED and EXPAND_AS_DEFINED tags.
 | 
				
			||||
 | 
				
			||||
EXPAND_ONLY_PREDEF     = YES
 | 
				
			||||
 | 
				
			||||
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
 | 
				
			||||
# in the INCLUDE_PATH (see below) will be search if a #include is found.
 | 
				
			||||
 | 
				
			||||
SEARCH_INCLUDES        = YES
 | 
				
			||||
 | 
				
			||||
# The INCLUDE_PATH tag can be used to specify one or more directories that 
 | 
				
			||||
# contain include files that are not input files but should be processed by 
 | 
				
			||||
# the preprocessor.
 | 
				
			||||
 | 
				
			||||
INCLUDE_PATH           = 
 | 
				
			||||
 | 
				
			||||
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
 | 
				
			||||
# patterns (like *.h and *.hpp) to filter out the header-files in the 
 | 
				
			||||
# directories. If left blank, the patterns specified with FILE_PATTERNS will 
 | 
				
			||||
# be used.
 | 
				
			||||
 | 
				
			||||
INCLUDE_FILE_PATTERNS  = 
 | 
				
			||||
 | 
				
			||||
# The PREDEFINED tag can be used to specify one or more macro names that 
 | 
				
			||||
# are defined before the preprocessor is started (similar to the -D option of 
 | 
				
			||||
# gcc). The argument of the tag is a list of macros of the form: name 
 | 
				
			||||
# or name=definition (no spaces). If the definition and the = are 
 | 
				
			||||
# omitted =1 is assumed. To prevent a macro definition from being 
 | 
				
			||||
# undefined via #undef or recursively expanded use the := operator 
 | 
				
			||||
# instead of the = operator.
 | 
				
			||||
 | 
				
			||||
PREDEFINED             = __DOXYGEN__
 | 
				
			||||
 | 
				
			||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
 | 
				
			||||
# this tag can be used to specify a list of macro names that should be expanded. 
 | 
				
			||||
# The macro definition that is found in the sources will be used. 
 | 
				
			||||
# Use the PREDEFINED tag if you want to use a different macro definition.
 | 
				
			||||
 | 
				
			||||
EXPAND_AS_DEFINED      = BUTTLOADTAG
 | 
				
			||||
 | 
				
			||||
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
 | 
				
			||||
# doxygen's preprocessor will remove all function-like macros that are alone 
 | 
				
			||||
# on a line, have an all uppercase name, and do not end with a semicolon. Such 
 | 
				
			||||
# function macros are typically used for boiler-plate code, and will confuse 
 | 
				
			||||
# the parser if not removed.
 | 
				
			||||
 | 
				
			||||
SKIP_FUNCTION_MACROS   = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration::additions related to external references   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The TAGFILES option can be used to specify one or more tagfiles. 
 | 
				
			||||
# Optionally an initial location of the external documentation 
 | 
				
			||||
# can be added for each tagfile. The format of a tag file without 
 | 
				
			||||
# this location is as follows: 
 | 
				
			||||
#   TAGFILES = file1 file2 ... 
 | 
				
			||||
# Adding location for the tag files is done as follows: 
 | 
				
			||||
#   TAGFILES = file1=loc1 "file2 = loc2" ... 
 | 
				
			||||
# where "loc1" and "loc2" can be relative or absolute paths or 
 | 
				
			||||
# URLs. If a location is present for each tag, the installdox tool 
 | 
				
			||||
# does not have to be run to correct the links.
 | 
				
			||||
# Note that each tag file must have a unique name
 | 
				
			||||
# (where the name does NOT include the path)
 | 
				
			||||
# If a tag file is not located in the directory in which doxygen 
 | 
				
			||||
# is run, you must also specify the path to the tagfile here.
 | 
				
			||||
 | 
				
			||||
TAGFILES               = 
 | 
				
			||||
 | 
				
			||||
# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
 | 
				
			||||
# a tag file that is based on the input files it reads.
 | 
				
			||||
 | 
				
			||||
GENERATE_TAGFILE       = 
 | 
				
			||||
 | 
				
			||||
# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
 | 
				
			||||
# in the class index. If set to NO only the inherited external classes 
 | 
				
			||||
# will be listed.
 | 
				
			||||
 | 
				
			||||
ALLEXTERNALS           = NO
 | 
				
			||||
 | 
				
			||||
# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
 | 
				
			||||
# in the modules index. If set to NO, only the current project's groups will 
 | 
				
			||||
# be listed.
 | 
				
			||||
 | 
				
			||||
EXTERNAL_GROUPS        = YES
 | 
				
			||||
 | 
				
			||||
# The PERL_PATH should be the absolute path and name of the perl script 
 | 
				
			||||
# interpreter (i.e. the result of `which perl').
 | 
				
			||||
 | 
				
			||||
PERL_PATH              = /usr/bin/perl
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration options related to the dot tool   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
 | 
				
			||||
# or super classes. Setting the tag to NO turns the diagrams off. Note that 
 | 
				
			||||
# this option is superseded by the HAVE_DOT option below. This is only a 
 | 
				
			||||
# fallback. It is recommended to install and use dot, since it yields more 
 | 
				
			||||
# powerful graphs.
 | 
				
			||||
 | 
				
			||||
CLASS_DIAGRAMS         = NO
 | 
				
			||||
 | 
				
			||||
# You can define message sequence charts within doxygen comments using the \msc 
 | 
				
			||||
# command. Doxygen will then run the mscgen tool (see 
 | 
				
			||||
# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
 | 
				
			||||
# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
 | 
				
			||||
# the mscgen tool resides. If left empty the tool is assumed to be found in the 
 | 
				
			||||
# default search path.
 | 
				
			||||
 | 
				
			||||
MSCGEN_PATH            = 
 | 
				
			||||
 | 
				
			||||
# If set to YES, the inheritance and collaboration graphs will hide 
 | 
				
			||||
# inheritance and usage relations if the target is undocumented 
 | 
				
			||||
# or is not a class.
 | 
				
			||||
 | 
				
			||||
HIDE_UNDOC_RELATIONS   = YES
 | 
				
			||||
 | 
				
			||||
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
 | 
				
			||||
# available from the path. This tool is part of Graphviz, a graph visualization 
 | 
				
			||||
# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
 | 
				
			||||
# have no effect if this option is set to NO (the default)
 | 
				
			||||
 | 
				
			||||
HAVE_DOT               = NO
 | 
				
			||||
 | 
				
			||||
# By default doxygen will write a font called FreeSans.ttf to the output 
 | 
				
			||||
# directory and reference it in all dot files that doxygen generates. This 
 | 
				
			||||
# font does not include all possible unicode characters however, so when you need 
 | 
				
			||||
# these (or just want a differently looking font) you can specify the font name 
 | 
				
			||||
# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
 | 
				
			||||
# which can be done by putting it in a standard location or by setting the 
 | 
				
			||||
# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
 | 
				
			||||
# containing the font.
 | 
				
			||||
 | 
				
			||||
DOT_FONTNAME           = FreeSans
 | 
				
			||||
 | 
				
			||||
# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
 | 
				
			||||
# The default size is 10pt.
 | 
				
			||||
 | 
				
			||||
DOT_FONTSIZE           = 10
 | 
				
			||||
 | 
				
			||||
# By default doxygen will tell dot to use the output directory to look for the 
 | 
				
			||||
# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
 | 
				
			||||
# different font using DOT_FONTNAME you can set the path where dot 
 | 
				
			||||
# can find it using this tag.
 | 
				
			||||
 | 
				
			||||
DOT_FONTPATH           = 
 | 
				
			||||
 | 
				
			||||
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for each documented class showing the direct and 
 | 
				
			||||
# indirect inheritance relations. Setting this tag to YES will force the 
 | 
				
			||||
# the CLASS_DIAGRAMS tag to NO.
 | 
				
			||||
 | 
				
			||||
CLASS_GRAPH            = NO
 | 
				
			||||
 | 
				
			||||
# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for each documented class showing the direct and 
 | 
				
			||||
# indirect implementation dependencies (inheritance, containment, and 
 | 
				
			||||
# class references variables) of the class with other documented classes.
 | 
				
			||||
 | 
				
			||||
COLLABORATION_GRAPH    = NO
 | 
				
			||||
 | 
				
			||||
# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will generate a graph for groups, showing the direct groups dependencies
 | 
				
			||||
 | 
				
			||||
GROUP_GRAPHS           = NO
 | 
				
			||||
 | 
				
			||||
# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
 | 
				
			||||
# collaboration diagrams in a style similar to the OMG's Unified Modeling 
 | 
				
			||||
# Language.
 | 
				
			||||
 | 
				
			||||
UML_LOOK               = NO
 | 
				
			||||
 | 
				
			||||
# If set to YES, the inheritance and collaboration graphs will show the 
 | 
				
			||||
# relations between templates and their instances.
 | 
				
			||||
 | 
				
			||||
TEMPLATE_RELATIONS     = NO
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
 | 
				
			||||
# tags are set to YES then doxygen will generate a graph for each documented 
 | 
				
			||||
# file showing the direct and indirect include dependencies of the file with 
 | 
				
			||||
# other documented files.
 | 
				
			||||
 | 
				
			||||
INCLUDE_GRAPH          = NO
 | 
				
			||||
 | 
				
			||||
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
 | 
				
			||||
# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
 | 
				
			||||
# documented header file showing the documented files that directly or 
 | 
				
			||||
# indirectly include this file.
 | 
				
			||||
 | 
				
			||||
INCLUDED_BY_GRAPH      = NO
 | 
				
			||||
 | 
				
			||||
# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
 | 
				
			||||
# doxygen will generate a call dependency graph for every global function 
 | 
				
			||||
# or class method. Note that enabling this option will significantly increase 
 | 
				
			||||
# the time of a run. So in most cases it will be better to enable call graphs 
 | 
				
			||||
# for selected functions only using the \callgraph command.
 | 
				
			||||
 | 
				
			||||
CALL_GRAPH             = NO
 | 
				
			||||
 | 
				
			||||
# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
 | 
				
			||||
# doxygen will generate a caller dependency graph for every global function 
 | 
				
			||||
# or class method. Note that enabling this option will significantly increase 
 | 
				
			||||
# the time of a run. So in most cases it will be better to enable caller 
 | 
				
			||||
# graphs for selected functions only using the \callergraph command.
 | 
				
			||||
 | 
				
			||||
CALLER_GRAPH           = NO
 | 
				
			||||
 | 
				
			||||
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||
# will graphical hierarchy of all classes instead of a textual one.
 | 
				
			||||
 | 
				
			||||
GRAPHICAL_HIERARCHY    = NO
 | 
				
			||||
 | 
				
			||||
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
 | 
				
			||||
# then doxygen will show the dependencies a directory has on other directories 
 | 
				
			||||
# in a graphical way. The dependency relations are determined by the #include
 | 
				
			||||
# relations between the files in the directories.
 | 
				
			||||
 | 
				
			||||
DIRECTORY_GRAPH        = NO
 | 
				
			||||
 | 
				
			||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
 | 
				
			||||
# generated by dot. Possible values are png, jpg, or gif
 | 
				
			||||
# If left blank png will be used.
 | 
				
			||||
 | 
				
			||||
DOT_IMAGE_FORMAT       = png
 | 
				
			||||
 | 
				
			||||
# The tag DOT_PATH can be used to specify the path where the dot tool can be 
 | 
				
			||||
# found. If left blank, it is assumed the dot tool can be found in the path.
 | 
				
			||||
 | 
				
			||||
DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"
 | 
				
			||||
 | 
				
			||||
# The DOTFILE_DIRS tag can be used to specify one or more directories that 
 | 
				
			||||
# contain dot files that are included in the documentation (see the 
 | 
				
			||||
# \dotfile command).
 | 
				
			||||
 | 
				
			||||
DOTFILE_DIRS           = 
 | 
				
			||||
 | 
				
			||||
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
 | 
				
			||||
# nodes that will be shown in the graph. If the number of nodes in a graph 
 | 
				
			||||
# becomes larger than this value, doxygen will truncate the graph, which is 
 | 
				
			||||
# visualized by representing a node as a red box. Note that doxygen if the 
 | 
				
			||||
# number of direct children of the root node in a graph is already larger than 
 | 
				
			||||
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
 | 
				
			||||
# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 | 
				
			||||
 | 
				
			||||
DOT_GRAPH_MAX_NODES    = 15
 | 
				
			||||
 | 
				
			||||
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
 | 
				
			||||
# graphs generated by dot. A depth value of 3 means that only nodes reachable 
 | 
				
			||||
# from the root by following a path via at most 3 edges will be shown. Nodes 
 | 
				
			||||
# that lay further from the root node will be omitted. Note that setting this 
 | 
				
			||||
# option to 1 or 2 may greatly reduce the computation time needed for large 
 | 
				
			||||
# code bases. Also note that the size of a graph can be further restricted by 
 | 
				
			||||
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
 | 
				
			||||
 | 
				
			||||
MAX_DOT_GRAPH_DEPTH    = 2
 | 
				
			||||
 | 
				
			||||
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
 | 
				
			||||
# background. This is disabled by default, because dot on Windows does not 
 | 
				
			||||
# seem to support this out of the box. Warning: Depending on the platform used, 
 | 
				
			||||
# enabling this option may lead to badly anti-aliased labels on the edges of 
 | 
				
			||||
# a graph (i.e. they become hard to read).
 | 
				
			||||
 | 
				
			||||
DOT_TRANSPARENT        = YES
 | 
				
			||||
 | 
				
			||||
# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
 | 
				
			||||
# files in one run (i.e. multiple -o and -T options on the command line). This 
 | 
				
			||||
# makes dot run faster, but since only newer versions of dot (>1.8.10) 
 | 
				
			||||
# support this, this feature is disabled by default.
 | 
				
			||||
 | 
				
			||||
DOT_MULTI_TARGETS      = NO
 | 
				
			||||
 | 
				
			||||
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# generate a legend page explaining the meaning of the various boxes and 
 | 
				
			||||
# arrows in the dot generated graphs.
 | 
				
			||||
 | 
				
			||||
GENERATE_LEGEND        = YES
 | 
				
			||||
 | 
				
			||||
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
 | 
				
			||||
# remove the intermediate dot files that are used to generate 
 | 
				
			||||
# the various graphs.
 | 
				
			||||
 | 
				
			||||
DOT_CLEANUP            = YES
 | 
				
			||||
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
# Configuration::additions related to the search engine   
 | 
				
			||||
#---------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
# The SEARCHENGINE tag specifies whether or not a search engine should be 
 | 
				
			||||
# used. If set to NO the values of all tags below this one will be ignored.
 | 
				
			||||
 | 
				
			||||
SEARCHENGINE           = NO
 | 
				
			||||
@ -0,0 +1,156 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Main source file for the TeensyHID bootloader. This file contains the complete bootloader logic.
 | 
				
			||||
 */
 | 
				
			||||
 
 | 
				
			||||
#define  INCLUDE_FROM_TEENSYHID_C
 | 
				
			||||
#include "TeensyHID.h"
 | 
				
			||||
 | 
				
			||||
/* Global Variables: */
 | 
				
			||||
/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
 | 
				
			||||
 *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
 | 
				
			||||
 *  started via a forced watchdog reset.
 | 
				
			||||
 */
 | 
				
			||||
bool RunBootloader = true;
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously 
 | 
				
			||||
 *  runs the bootloader processing routine until instructed to soft-exit.
 | 
				
			||||
 */
 | 
				
			||||
int main(void)
 | 
				
			||||
{
 | 
				
			||||
	/* Disable watchdog if enabled by bootloader/fuses */
 | 
				
			||||
	MCUSR &= ~(1 << WDRF);
 | 
				
			||||
	wdt_disable();
 | 
				
			||||
 | 
				
			||||
	/* Disable Clock Division */
 | 
				
			||||
	SetSystemClockPrescaler(0);
 | 
				
			||||
 | 
				
			||||
	/* Relocate the interrupt vector table to the bootloader section */
 | 
				
			||||
	MCUCR = (1 << IVCE);
 | 
				
			||||
	MCUCR = (1 << IVSEL);
 | 
				
			||||
 | 
				
			||||
	/* Initialize USB subsystem */
 | 
				
			||||
	USB_Init();
 | 
				
			||||
	
 | 
				
			||||
	while (RunBootloader)
 | 
				
			||||
	  USB_USBTask();
 | 
				
			||||
	  
 | 
				
			||||
	/* Shut down the USB interface, so that the host will register the disconnection */
 | 
				
			||||
	USB_ShutDown();
 | 
				
			||||
 | 
				
			||||
	/* Wait 100ms to give the host time to register the disconnection */
 | 
				
			||||
	_delay_ms(100);
 | 
				
			||||
 | 
				
			||||
	/* Enable the watchdog and force a timeout to reset the AVR */
 | 
				
			||||
	wdt_enable(WDTO_250MS);
 | 
				
			||||
					
 | 
				
			||||
	for (;;);
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready
 | 
				
			||||
 *  to relay data to and from the attached USB host.
 | 
				
			||||
 */
 | 
				
			||||
EVENT_HANDLER(USB_ConfigurationChanged)
 | 
				
			||||
{
 | 
				
			||||
	/* Setup HID Report Endpoint */
 | 
				
			||||
	Endpoint_ConfigureEndpoint(HID_EPNUM, EP_TYPE_INTERRUPT,
 | 
				
			||||
		                       ENDPOINT_DIR_IN, HID_EPSIZE,
 | 
				
			||||
	                           ENDPOINT_BANK_SINGLE);
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific
 | 
				
			||||
 *  control requests that are not handled internally by the USB library (including the HID commands, which are
 | 
				
			||||
 *  all issued via the control endpoint), so that they can be handled appropriately for the application.
 | 
				
			||||
 */
 | 
				
			||||
EVENT_HANDLER(USB_UnhandledControlPacket)
 | 
				
			||||
{
 | 
				
			||||
	/* Handle HID Class specific requests */
 | 
				
			||||
	switch (bRequest)
 | 
				
			||||
	{
 | 
				
			||||
		case REQ_SetReport:
 | 
				
			||||
			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
 | 
				
			||||
			{
 | 
				
			||||
				Endpoint_ClearSetupReceived();
 | 
				
			||||
				
 | 
				
			||||
				/* Wait until the command (report) has been sent by the host */
 | 
				
			||||
				while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
 | 
				
			||||
				/* Read in the write destination address */
 | 
				
			||||
				uint16_t PageAddress = Endpoint_Read_Word_LE();
 | 
				
			||||
				
 | 
				
			||||
				/* Check if the command is a program page command, or a start application command */
 | 
				
			||||
				if (PageAddress == TEENSY_STARTAPPLICATION)
 | 
				
			||||
				{
 | 
				
			||||
					RunBootloader = false;
 | 
				
			||||
				}
 | 
				
			||||
				else
 | 
				
			||||
				{
 | 
				
			||||
					/* Erase the given FLASH page, ready to be programmed */
 | 
				
			||||
					boot_page_erase(PageAddress);
 | 
				
			||||
					boot_spm_busy_wait();
 | 
				
			||||
					
 | 
				
			||||
					/* Write each of the FLASH page's bytes in sequence */
 | 
				
			||||
					for (uint8_t PageByte = 0; PageByte < 128; PageByte += 2)
 | 
				
			||||
					{
 | 
				
			||||
						/* Check if endpoint is empty - if so clear it and wait until ready for next packet */
 | 
				
			||||
						if (!(Endpoint_BytesInEndpoint()))
 | 
				
			||||
						{
 | 
				
			||||
							Endpoint_ClearSetupOUT();
 | 
				
			||||
							while (!(Endpoint_IsSetupOUTReceived()));
 | 
				
			||||
						}
 | 
				
			||||
 | 
				
			||||
						/* Write the next data word to the FLASH page */
 | 
				
			||||
						boot_page_fill(PageAddress + PageByte, Endpoint_Read_Word_LE());
 | 
				
			||||
					}
 | 
				
			||||
 | 
				
			||||
					/* Write the filled FLASH page to memory */
 | 
				
			||||
					boot_page_write(PageAddress);
 | 
				
			||||
					boot_spm_busy_wait();
 | 
				
			||||
 | 
				
			||||
					/* Re-enable RWW section */
 | 
				
			||||
					boot_rww_enable();
 | 
				
			||||
				}
 | 
				
			||||
 | 
				
			||||
				Endpoint_ClearSetupOUT();
 | 
				
			||||
 | 
				
			||||
				/* Wait until the host is ready to receive the request confirmation */
 | 
				
			||||
				while (!(Endpoint_IsSetupINReady()));
 | 
				
			||||
				
 | 
				
			||||
				/* Handshake the request by sending an empty IN packet */
 | 
				
			||||
				Endpoint_ClearSetupIN();
 | 
				
			||||
			}
 | 
				
			||||
			
 | 
				
			||||
			break;
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,73 @@
 | 
				
			||||
/*
 | 
				
			||||
             LUFA Library
 | 
				
			||||
     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
              
 | 
				
			||||
  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
 | 
				
			||||
  software without specific, written prior permission.
 | 
				
			||||
 | 
				
			||||
  The author disclaim all warranties with regard to this
 | 
				
			||||
  software, including all implied warranties of merchantability
 | 
				
			||||
  and fitness.  In no event shall the author be liable for any
 | 
				
			||||
  special, indirect or consequential damages or any damages
 | 
				
			||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||
  in an action of contract, negligence or other tortious action,
 | 
				
			||||
  arising out of or in connection with the use or performance of
 | 
				
			||||
  this software.
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  Header file for TeensyHID.c.
 | 
				
			||||
 */
 | 
				
			||||
 
 | 
				
			||||
#ifndef _TEENSYHID_H_
 | 
				
			||||
#define _TEENSYHID_H_
 | 
				
			||||
 | 
				
			||||
	/* Includes: */
 | 
				
			||||
		#include <avr/io.h>
 | 
				
			||||
		#include <avr/wdt.h>
 | 
				
			||||
		#include <avr/boot.h>
 | 
				
			||||
		#include <avr/wdt.h>
 | 
				
			||||
		#include <util/delay.h>
 | 
				
			||||
		#include <stdbool.h>
 | 
				
			||||
 | 
				
			||||
		#include "Descriptors.h"
 | 
				
			||||
 | 
				
			||||
		#include <LUFA/Version.h>                    // Library Version Information
 | 
				
			||||
		#include <LUFA/Drivers/USB/USB.h>            // USB Functionality
 | 
				
			||||
		
 | 
				
			||||
	/* Preprocessor Checks: */
 | 
				
			||||
		#if !defined(__AVR_AT90USB162__)
 | 
				
			||||
			#error This bootloader is not compatible with the selected AVR model.
 | 
				
			||||
		#endif
 | 
				
			||||
 | 
				
			||||
	/* Macros: */
 | 
				
			||||
		/** HID Class specific request to send the next HID report to the device. */
 | 
				
			||||
		#define REQ_SetReport           0x09
 | 
				
			||||
		
 | 
				
			||||
		#define TEENSY_STARTAPPLICATION 0xFFFF
 | 
				
			||||
 | 
				
			||||
	/* Event Handlers: */
 | 
				
			||||
		/** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */
 | 
				
			||||
		HANDLES_EVENT(USB_Disconnect);
 | 
				
			||||
 | 
				
			||||
		/** Indicates that this module will catch the USB_ConfigurationChanged event when thrown by the library. */
 | 
				
			||||
		HANDLES_EVENT(USB_ConfigurationChanged);
 | 
				
			||||
 | 
				
			||||
		/** Indicates that this module will catch the USB_UnhandledControlPacket event when thrown by the library. */
 | 
				
			||||
		HANDLES_EVENT(USB_UnhandledControlPacket);
 | 
				
			||||
		
 | 
				
			||||
#endif
 | 
				
			||||
@ -0,0 +1,41 @@
 | 
				
			||||
/** \file
 | 
				
			||||
 *
 | 
				
			||||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
				
			||||
 *  documentation pages. It is not a project source file.
 | 
				
			||||
 */
 | 
				
			||||
 
 | 
				
			||||
/** \mainpage Teensy HID Class USB AVR Bootloader
 | 
				
			||||
 * 
 | 
				
			||||
 * This bootloader enumerates to the host as a HID Class device, allowing for Teensy compatible programming
 | 
				
			||||
 * software to load firmware onto the AVR, such as the official software at http://www.pjrc.com/teensy/.
 | 
				
			||||
 *  
 | 
				
			||||
 * Out of the box this bootloader builds for the USB162, and will fit into 2KB of bootloader space.
 | 
				
			||||
 *
 | 
				
			||||
 * This spoofs (with permission) the offical Teensy bootloader's VID and PID, so that the software remains
 | 
				
			||||
 * compatible with no changes.
 | 
				
			||||
 *  
 | 
				
			||||
 * <table>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>USB Mode:</b></td>
 | 
				
			||||
 *   <td>Device</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>USB Class:</b></td>
 | 
				
			||||
 *   <td>Human Interface Device Class (HID)</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr> 
 | 
				
			||||
 *   <td><b>USB Subclass:</b></td>
 | 
				
			||||
 *   <td>N/A</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>Relevant Standards:</b></td>
 | 
				
			||||
 *   <td>USBIF HID Class Standard</td>
 | 
				
			||||
 *   <td>Teensy Programming Protocol Details</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 *  <tr>
 | 
				
			||||
 *   <td><b>Usable Speeds:</b></td>
 | 
				
			||||
 *   <td>Low Speed Mode</td>
 | 
				
			||||
 *   <td>Full Speed Mode</td>
 | 
				
			||||
 *  </tr>
 | 
				
			||||
 * </table>
 | 
				
			||||
 */
 | 
				
			||||
@ -0,0 +1,711 @@
 | 
				
			||||
# Hey Emacs, this is a -*- makefile -*-
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
 | 
				
			||||
#  >> Modified for use with the LUFA project. <<
 | 
				
			||||
#
 | 
				
			||||
# Released to the Public Domain
 | 
				
			||||
#
 | 
				
			||||
# Additional material for this makefile was written by:
 | 
				
			||||
# Peter Fleury
 | 
				
			||||
# Tim Henigan
 | 
				
			||||
# Colin O'Flynn
 | 
				
			||||
# Reiner Patommel
 | 
				
			||||
# Markus Pfaff
 | 
				
			||||
# Sander Pool
 | 
				
			||||
# Frederik Rouleau
 | 
				
			||||
# Carlos Lamas
 | 
				
			||||
# Dean Camera
 | 
				
			||||
# Opendous Inc.
 | 
				
			||||
# Denver Gingerich
 | 
				
			||||
#
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
# On command line:
 | 
				
			||||
#
 | 
				
			||||
# make all = Make software.
 | 
				
			||||
#
 | 
				
			||||
# make clean = Clean out built project files.
 | 
				
			||||
#
 | 
				
			||||
# make coff = Convert ELF to AVR COFF.
 | 
				
			||||
#
 | 
				
			||||
# make extcoff = Convert ELF to AVR Extended COFF.
 | 
				
			||||
#
 | 
				
			||||
# make program = Download the hex file to the device, using avrdude.
 | 
				
			||||
#                Please customize the avrdude settings below first!
 | 
				
			||||
#
 | 
				
			||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
 | 
				
			||||
#            have dfu-programmer installed).
 | 
				
			||||
#
 | 
				
			||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
 | 
				
			||||
#             have Atmel FLIP installed).
 | 
				
			||||
#
 | 
				
			||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
 | 
				
			||||
#               (must have dfu-programmer installed).
 | 
				
			||||
#
 | 
				
			||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
 | 
				
			||||
#                (must have Atmel FLIP installed).
 | 
				
			||||
#
 | 
				
			||||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
				
			||||
#                DoxyGen installed)
 | 
				
			||||
#
 | 
				
			||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
				
			||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
				
			||||
#
 | 
				
			||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
				
			||||
#
 | 
				
			||||
# make filename.i = Create a preprocessed source file for use in submitting
 | 
				
			||||
#                   bug reports to the GCC project.
 | 
				
			||||
#
 | 
				
			||||
# To rebuild project do "make clean" then "make all".
 | 
				
			||||
#----------------------------------------------------------------------------
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# MCU name
 | 
				
			||||
MCU = at90usb162
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Target board (see library BoardTypes.h documentation, USER or blank for projects not requiring
 | 
				
			||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called 
 | 
				
			||||
# "Board" inside the application directory.
 | 
				
			||||
BOARD  = USBKEY
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Processor frequency.
 | 
				
			||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
				
			||||
#     processor frequency. You can then use this symbol in your source code to 
 | 
				
			||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
				
			||||
#     automatically to create a 32-bit value in your source code.
 | 
				
			||||
#     Typical values are:
 | 
				
			||||
#         F_CPU =  1000000
 | 
				
			||||
#         F_CPU =  1843200
 | 
				
			||||
#         F_CPU =  2000000
 | 
				
			||||
#         F_CPU =  3686400
 | 
				
			||||
#         F_CPU =  4000000
 | 
				
			||||
#         F_CPU =  7372800
 | 
				
			||||
#         F_CPU =  8000000
 | 
				
			||||
#         F_CPU = 11059200
 | 
				
			||||
#         F_CPU = 14745600
 | 
				
			||||
#         F_CPU = 16000000
 | 
				
			||||
#         F_CPU = 18432000
 | 
				
			||||
#         F_CPU = 20000000
 | 
				
			||||
F_CPU = 8000000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Output format. (can be srec, ihex, binary)
 | 
				
			||||
FORMAT = ihex
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Target file name (without extension).
 | 
				
			||||
TARGET = TeensyHID
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Object files directory
 | 
				
			||||
#     To put object files in current directory, use a dot (.), do NOT make
 | 
				
			||||
#     this an empty or blank macro!
 | 
				
			||||
OBJDIR = .
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List C source files here. (C dependencies are automatically generated.)
 | 
				
			||||
SRC = $(TARGET).c                                          \
 | 
				
			||||
	  Descriptors.c                                        \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/LowLevel.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/Endpoint.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/USBTask.c           \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/Events.c            \
 | 
				
			||||
	  ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c    \
 | 
				
			||||
	  
 | 
				
			||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
				
			||||
CPPSRC = 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List Assembler source files here.
 | 
				
			||||
#     Make them always end in a capital .S.  Files ending in a lowercase .s
 | 
				
			||||
#     will not be considered source files but generated files (assembler
 | 
				
			||||
#     output from the compiler), and will be deleted upon "make clean"!
 | 
				
			||||
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
 | 
				
			||||
#     it will preserve the spelling of the filenames, and gcc itself does
 | 
				
			||||
#     care about how the name is spelled on its command-line.
 | 
				
			||||
ASRC =
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
				
			||||
#     0 = turn off optimization. s = optimize for size.
 | 
				
			||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
				
			||||
OPT = s
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Debugging format.
 | 
				
			||||
#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
 | 
				
			||||
#     AVR Studio 4.10 requires dwarf-2.
 | 
				
			||||
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
 | 
				
			||||
DEBUG = dwarf-2
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List any extra directories to look for include files here.
 | 
				
			||||
#     Each directory must be seperated by a space.
 | 
				
			||||
#     Use forward slashes for directory separators.
 | 
				
			||||
#     For a directory that has spaces, enclose it in quotes.
 | 
				
			||||
EXTRAINCDIRS = ../../
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compiler flag to set the C Standard level.
 | 
				
			||||
#     c89   = "ANSI" C
 | 
				
			||||
#     gnu89 = c89 plus GCC extensions
 | 
				
			||||
#     c99   = ISO C99 standard (not yet fully implemented)
 | 
				
			||||
#     gnu99 = c99 plus GCC extensions
 | 
				
			||||
CSTANDARD = -std=gnu99
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Starting byte address of the bootloader
 | 
				
			||||
BOOT_START = 0xC000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for C sources
 | 
				
			||||
CDEFS  = -DF_CPU=$(F_CPU)UL -DBOARD=BOARD_$(BOARD) -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DSTATIC_ENDPOINT_CONFIGURATION
 | 
				
			||||
CDEFS += -DUSB_DEVICE_ONLY -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
 | 
				
			||||
CDEFS += -DUSE_RAM_DESCRIPTORS -DBOOT_START_ADDR=$(BOOT_START)UL -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION
 | 
				
			||||
CDEFS += -DNO_CLEARSET_FEATURE_REQUEST
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for ASM sources
 | 
				
			||||
ADEFS = -DF_CPU=$(F_CPU)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Place -D or -U options here for C++ sources
 | 
				
			||||
CPPDEFS = -DF_CPU=$(F_CPU)UL
 | 
				
			||||
#CPPDEFS += -D__STDC_LIMIT_MACROS
 | 
				
			||||
#CPPDEFS += -D__STDC_CONSTANT_MACROS
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Compiler Options C ----------------
 | 
				
			||||
#  -g*:          generate debugging information
 | 
				
			||||
#  -O*:          optimization level
 | 
				
			||||
#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
				
			||||
#  -Wall...:     warning level
 | 
				
			||||
#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
				
			||||
#    -adhlns...: create assembler listing
 | 
				
			||||
CFLAGS = -g$(DEBUG)
 | 
				
			||||
CFLAGS += $(CDEFS)
 | 
				
			||||
CFLAGS += -O$(OPT)
 | 
				
			||||
CFLAGS += -funsigned-char
 | 
				
			||||
CFLAGS += -funsigned-bitfields
 | 
				
			||||
CFLAGS += -ffunction-sections
 | 
				
			||||
CFLAGS += -fpack-struct
 | 
				
			||||
CFLAGS += -fshort-enums
 | 
				
			||||
CFLAGS += -fno-inline-small-functions
 | 
				
			||||
CFLAGS += -fno-reorder-blocks
 | 
				
			||||
CFLAGS += -fno-reorder-blocks-and-partition
 | 
				
			||||
CFLAGS += -fno-reorder-functions
 | 
				
			||||
CFLAGS += -fno-toplevel-reorder
 | 
				
			||||
CFLAGS += -Wall
 | 
				
			||||
CFLAGS += -Wstrict-prototypes
 | 
				
			||||
CFLAGS += -Wundef
 | 
				
			||||
#CFLAGS += -fno-unit-at-a-time
 | 
				
			||||
#CFLAGS += -Wunreachable-code
 | 
				
			||||
#CFLAGS += -Wsign-compare
 | 
				
			||||
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
 | 
				
			||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
				
			||||
CFLAGS += $(CSTANDARD)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Compiler Options C++ ----------------
 | 
				
			||||
#  -g*:          generate debugging information
 | 
				
			||||
#  -O*:          optimization level
 | 
				
			||||
#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
				
			||||
#  -Wall...:     warning level
 | 
				
			||||
#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
				
			||||
#    -adhlns...: create assembler listing
 | 
				
			||||
CPPFLAGS = -g$(DEBUG)
 | 
				
			||||
CPPFLAGS += $(CPPDEFS)
 | 
				
			||||
CPPFLAGS += -O$(OPT)
 | 
				
			||||
CPPFLAGS += -funsigned-char
 | 
				
			||||
CPPFLAGS += -funsigned-bitfields
 | 
				
			||||
CPPFLAGS += -fpack-struct
 | 
				
			||||
CPPFLAGS += -fshort-enums
 | 
				
			||||
CPPFLAGS += -fno-exceptions
 | 
				
			||||
CPPFLAGS += -Wall
 | 
				
			||||
CFLAGS += -Wundef
 | 
				
			||||
#CPPFLAGS += -mshort-calls
 | 
				
			||||
#CPPFLAGS += -fno-unit-at-a-time
 | 
				
			||||
#CPPFLAGS += -Wstrict-prototypes
 | 
				
			||||
#CPPFLAGS += -Wunreachable-code
 | 
				
			||||
#CPPFLAGS += -Wsign-compare
 | 
				
			||||
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
 | 
				
			||||
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
				
			||||
#CPPFLAGS += $(CSTANDARD)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Assembler Options ----------------
 | 
				
			||||
#  -Wa,...:   tell GCC to pass this to the assembler.
 | 
				
			||||
#  -adhlns:   create listing
 | 
				
			||||
#  -gstabs:   have the assembler create line number information; note that
 | 
				
			||||
#             for use in COFF files, additional information about filenames
 | 
				
			||||
#             and function names needs to be present in the assembler source
 | 
				
			||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
				
			||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
				
			||||
#       dump that will be displayed for a given single line of source input.
 | 
				
			||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Library Options ----------------
 | 
				
			||||
# Minimalistic printf version
 | 
				
			||||
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
				
			||||
 | 
				
			||||
# Floating point printf version (requires MATH_LIB = -lm below)
 | 
				
			||||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
				
			||||
 | 
				
			||||
# If this is left blank, then it will use the Standard printf version.
 | 
				
			||||
PRINTF_LIB = 
 | 
				
			||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
				
			||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Minimalistic scanf version
 | 
				
			||||
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
				
			||||
 | 
				
			||||
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
 | 
				
			||||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
				
			||||
 | 
				
			||||
# If this is left blank, then it will use the Standard scanf version.
 | 
				
			||||
SCANF_LIB = 
 | 
				
			||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
				
			||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
MATH_LIB = -lm
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# List any extra directories to look for libraries here.
 | 
				
			||||
#     Each directory must be seperated by a space.
 | 
				
			||||
#     Use forward slashes for directory separators.
 | 
				
			||||
#     For a directory that has spaces, enclose it in quotes.
 | 
				
			||||
EXTRALIBDIRS = 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- External Memory Options ----------------
 | 
				
			||||
 | 
				
			||||
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
				
			||||
# used for variables (.data/.bss) and heap (malloc()).
 | 
				
			||||
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
 | 
				
			||||
 | 
				
			||||
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
				
			||||
# only used for heap (malloc()).
 | 
				
			||||
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
 | 
				
			||||
 | 
				
			||||
EXTMEMOPTS =
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Linker Options ----------------
 | 
				
			||||
#  -Wl,...:     tell GCC to pass this to linker.
 | 
				
			||||
#    -Map:      create map file
 | 
				
			||||
#    --cref:    add cross reference to  map file
 | 
				
			||||
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 | 
				
			||||
LDFLAGS += -Wl,--relax 
 | 
				
			||||
LDFLAGS += -Wl,--gc-sections
 | 
				
			||||
LDFLAGS += -Wl,--section-start=.text=$(BOOT_START)
 | 
				
			||||
LDFLAGS += $(EXTMEMOPTS)
 | 
				
			||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
				
			||||
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
 | 
				
			||||
#LDFLAGS += -T linker_script.x
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Programming Options (avrdude) ----------------
 | 
				
			||||
 | 
				
			||||
# Programming hardware: alf avr910 avrisp bascom bsd 
 | 
				
			||||
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
 | 
				
			||||
#
 | 
				
			||||
# Type: avrdude -c ?
 | 
				
			||||
# to get a full listing.
 | 
				
			||||
#
 | 
				
			||||
AVRDUDE_PROGRAMMER = jtagmkII
 | 
				
			||||
 | 
				
			||||
# com1 = serial port. Use lpt1 to connect to parallel port.
 | 
				
			||||
AVRDUDE_PORT = usb
 | 
				
			||||
 | 
				
			||||
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
				
			||||
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Uncomment the following if you want avrdude's erase cycle counter.
 | 
				
			||||
# Note that this counter needs to be initialized first using -Yn,
 | 
				
			||||
# see avrdude manual.
 | 
				
			||||
#AVRDUDE_ERASE_COUNTER = -y
 | 
				
			||||
 | 
				
			||||
# Uncomment the following if you do /not/ wish a verification to be
 | 
				
			||||
# performed after programming the device.
 | 
				
			||||
#AVRDUDE_NO_VERIFY = -V
 | 
				
			||||
 | 
				
			||||
# Increase verbosity level.  Please use this when submitting bug
 | 
				
			||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
				
			||||
# to submit bug reports.
 | 
				
			||||
#AVRDUDE_VERBOSE = -v -v
 | 
				
			||||
 | 
				
			||||
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
 | 
				
			||||
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#---------------- Debugging Options ----------------
 | 
				
			||||
 | 
				
			||||
# For simulavr only - target MCU frequency.
 | 
				
			||||
DEBUG_MFREQ = $(F_CPU)
 | 
				
			||||
 | 
				
			||||
# Set the DEBUG_UI to either gdb or insight.
 | 
				
			||||
# DEBUG_UI = gdb
 | 
				
			||||
DEBUG_UI = insight
 | 
				
			||||
 | 
				
			||||
# Set the debugging back-end to either avarice, simulavr.
 | 
				
			||||
DEBUG_BACKEND = avarice
 | 
				
			||||
#DEBUG_BACKEND = simulavr
 | 
				
			||||
 | 
				
			||||
# GDB Init Filename.
 | 
				
			||||
GDBINIT_FILE = __avr_gdbinit
 | 
				
			||||
 | 
				
			||||
# When using avarice settings for the JTAG
 | 
				
			||||
JTAG_DEV = /dev/com1
 | 
				
			||||
 | 
				
			||||
# Debugging port used to communicate between GDB / avarice / simulavr.
 | 
				
			||||
DEBUG_PORT = 4242
 | 
				
			||||
 | 
				
			||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
				
			||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
				
			||||
#     avarice is running on a different computer.
 | 
				
			||||
DEBUG_HOST = localhost
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#============================================================================
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Define programs and commands.
 | 
				
			||||
SHELL = sh
 | 
				
			||||
CC = avr-gcc
 | 
				
			||||
OBJCOPY = avr-objcopy
 | 
				
			||||
OBJDUMP = avr-objdump
 | 
				
			||||
SIZE = avr-size
 | 
				
			||||
AR = avr-ar rcs
 | 
				
			||||
NM = avr-nm
 | 
				
			||||
AVRDUDE = avrdude
 | 
				
			||||
REMOVE = rm -f
 | 
				
			||||
REMOVEDIR = rm -rf
 | 
				
			||||
COPY = cp
 | 
				
			||||
WINSHELL = cmd
 | 
				
			||||
 | 
				
			||||
# Define Messages
 | 
				
			||||
# English
 | 
				
			||||
MSG_ERRORS_NONE = Errors: none
 | 
				
			||||
MSG_BEGIN = -------- begin --------
 | 
				
			||||
MSG_END = --------  end  --------
 | 
				
			||||
MSG_SIZE_BEFORE = Size before: 
 | 
				
			||||
MSG_SIZE_AFTER = Size after:
 | 
				
			||||
MSG_COFF = Converting to AVR COFF:
 | 
				
			||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
				
			||||
MSG_FLASH = Creating load file for Flash:
 | 
				
			||||
MSG_EEPROM = Creating load file for EEPROM:
 | 
				
			||||
MSG_EXTENDED_LISTING = Creating Extended Listing:
 | 
				
			||||
MSG_SYMBOL_TABLE = Creating Symbol Table:
 | 
				
			||||
MSG_LINKING = Linking:
 | 
				
			||||
MSG_COMPILING = Compiling C:
 | 
				
			||||
MSG_COMPILING_CPP = Compiling C++:
 | 
				
			||||
MSG_ASSEMBLING = Assembling:
 | 
				
			||||
MSG_CLEANING = Cleaning project:
 | 
				
			||||
MSG_CREATING_LIBRARY = Creating library:
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Define all object files.
 | 
				
			||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
				
			||||
 | 
				
			||||
# Define all listing files.
 | 
				
			||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compiler flags to generate dependency files.
 | 
				
			||||
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Combine all necessary flags and optional flags.
 | 
				
			||||
# Add target processor to flags.
 | 
				
			||||
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
 | 
				
			||||
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
 | 
				
			||||
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Default target.
 | 
				
			||||
all: begin gccversion sizebefore build checkhooks checklibmode sizeafter end
 | 
				
			||||
 | 
				
			||||
# Change the build target to build a HEX file or a library.
 | 
				
			||||
build: elf hex eep lss sym
 | 
				
			||||
#build: lib
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
elf: $(TARGET).elf
 | 
				
			||||
hex: $(TARGET).hex
 | 
				
			||||
eep: $(TARGET).eep
 | 
				
			||||
lss: $(TARGET).lss
 | 
				
			||||
sym: $(TARGET).sym
 | 
				
			||||
LIBNAME=lib$(TARGET).a
 | 
				
			||||
lib: $(LIBNAME)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Eye candy.
 | 
				
			||||
# AVR Studio 3.x does not check make's exit code but relies on
 | 
				
			||||
# the following magic strings to be generated by the compile job.
 | 
				
			||||
begin:
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_BEGIN)
 | 
				
			||||
 | 
				
			||||
end:
 | 
				
			||||
	@echo $(MSG_END)
 | 
				
			||||
	@echo
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Display size of file.
 | 
				
			||||
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
 | 
				
			||||
ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf
 | 
				
			||||
MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )
 | 
				
			||||
FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )
 | 
				
			||||
 | 
				
			||||
sizebefore:
 | 
				
			||||
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
 | 
				
			||||
	2>/dev/null; echo; fi
 | 
				
			||||
 | 
				
			||||
sizeafter:
 | 
				
			||||
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
 | 
				
			||||
	2>/dev/null; echo; fi
 | 
				
			||||
 | 
				
			||||
checkhooks: build
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo ------- Unhooked LUFA Events -------
 | 
				
			||||
	@$(shell) (grep -s '^Event.*LUFA/.*\\.o' $(TARGET).map | \
 | 
				
			||||
	           cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \
 | 
				
			||||
			   echo "(None)"
 | 
				
			||||
	@echo ----- End Unhooked LUFA Events -----
 | 
				
			||||
 | 
				
			||||
checklibmode:
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo ----------- Library Mode -----------
 | 
				
			||||
	@$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \
 | 
				
			||||
	          | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \
 | 
				
			||||
	          || echo "No specific mode (both device and host mode allowable)."
 | 
				
			||||
	@echo ------------------------------------
 | 
				
			||||
 | 
				
			||||
# Display compiler version information.
 | 
				
			||||
gccversion : 
 | 
				
			||||
	@$(CC) --version
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Program the device.  
 | 
				
			||||
program: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
				
			||||
 | 
				
			||||
flip: $(TARGET).hex
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation erase f
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation start reset 0
 | 
				
			||||
 | 
				
			||||
dfu: $(TARGET).hex
 | 
				
			||||
	dfu-programmer $(MCU) erase
 | 
				
			||||
	dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex
 | 
				
			||||
	dfu-programmer $(MCU) reset
 | 
				
			||||
 | 
				
			||||
flip-ee: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	copy $(TARGET).eep $(TARGET)eep.hex
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
 | 
				
			||||
	batchisp -hardware usb -device $(MCU) -operation start reset 0
 | 
				
			||||
 | 
				
			||||
dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
				
			||||
	dfu-programmer $(MCU) erase
 | 
				
			||||
	dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep
 | 
				
			||||
	dfu-programmer $(MCU) reset
 | 
				
			||||
 | 
				
			||||
# Generate avr-gdb config/init file which does the following:
 | 
				
			||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
				
			||||
#     a breakpoint at main().
 | 
				
			||||
gdb-config: 
 | 
				
			||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
				
			||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo end >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
 | 
				
			||||
	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
 | 
				
			||||
ifeq ($(DEBUG_BACKEND),simulavr)
 | 
				
			||||
	@echo load  >> $(GDBINIT_FILE)
 | 
				
			||||
endif
 | 
				
			||||
	@echo break main >> $(GDBINIT_FILE)
 | 
				
			||||
 | 
				
			||||
debug: gdb-config $(TARGET).elf
 | 
				
			||||
ifeq ($(DEBUG_BACKEND), avarice)
 | 
				
			||||
	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
 | 
				
			||||
	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
 | 
				
			||||
	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
 | 
				
			||||
	@$(WINSHELL) /c pause
 | 
				
			||||
 | 
				
			||||
else
 | 
				
			||||
	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
 | 
				
			||||
	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
 | 
				
			||||
endif
 | 
				
			||||
	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
 | 
				
			||||
COFFCONVERT = $(OBJCOPY) --debugging
 | 
				
			||||
COFFCONVERT += --change-section-address .data-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .bss-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .noinit-0x800000
 | 
				
			||||
COFFCONVERT += --change-section-address .eeprom-0x810000
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
coff: $(TARGET).elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COFF) $(TARGET).cof
 | 
				
			||||
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
extcoff: $(TARGET).elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
 | 
				
			||||
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create final output files (.hex, .eep) from ELF output file.
 | 
				
			||||
%.hex: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_FLASH) $@
 | 
				
			||||
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 | 
				
			||||
 | 
				
			||||
%.eep: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EEPROM) $@
 | 
				
			||||
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
 | 
				
			||||
	--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
 | 
				
			||||
 | 
				
			||||
# Create extended listing file from ELF output file.
 | 
				
			||||
%.lss: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_EXTENDED_LISTING) $@
 | 
				
			||||
	$(OBJDUMP) -h -z -S $< > $@
 | 
				
			||||
 | 
				
			||||
# Create a symbol table from ELF output file.
 | 
				
			||||
%.sym: %.elf
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_SYMBOL_TABLE) $@
 | 
				
			||||
	$(NM) -n $< > $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create library from object files.
 | 
				
			||||
.SECONDARY : $(TARGET).a
 | 
				
			||||
.PRECIOUS : $(OBJ)
 | 
				
			||||
%.a: $(OBJ)
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_CREATING_LIBRARY) $@
 | 
				
			||||
	$(AR) $@ $(OBJ)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Link: create ELF output file from object files.
 | 
				
			||||
.SECONDARY : $(TARGET).elf
 | 
				
			||||
.PRECIOUS : $(OBJ)
 | 
				
			||||
%.elf: $(OBJ)
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_LINKING) $@
 | 
				
			||||
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create object files from C source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.c
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COMPILING) $<
 | 
				
			||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create object files from C++ source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.cpp
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
				
			||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create assembler files from C source files.
 | 
				
			||||
%.s : %.c
 | 
				
			||||
	$(CC) -S $(ALL_CFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Compile: create assembler files from C++ source files.
 | 
				
			||||
%.s : %.cpp
 | 
				
			||||
	$(CC) -S $(ALL_CPPFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Assemble: create object files from assembler source files.
 | 
				
			||||
$(OBJDIR)/%.o : %.S
 | 
				
			||||
	@echo
 | 
				
			||||
	@echo $(MSG_ASSEMBLING) $<
 | 
				
			||||
	$(CC) -c $(ALL_ASFLAGS) $< -o $@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Create preprocessed source for use in sending a bug report.
 | 
				
			||||
%.i : %.c
 | 
				
			||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
				
			||||
	
 | 
				
			||||
 | 
				
			||||
# Target: clean project.
 | 
				
			||||
clean: begin clean_list clean_binary end
 | 
				
			||||
 | 
				
			||||
clean_binary:
 | 
				
			||||
	$(REMOVE) $(TARGET).hex
 | 
				
			||||
 | 
				
			||||
clean_list:
 | 
				
			||||
	@echo $(MSG_CLEANING)
 | 
				
			||||
	$(REMOVE) $(TARGET).eep
 | 
				
			||||
	$(REMOVE) $(TARGET).cof
 | 
				
			||||
	$(REMOVE) $(TARGET).elf
 | 
				
			||||
	$(REMOVE) $(TARGET).map
 | 
				
			||||
	$(REMOVE) $(TARGET).sym
 | 
				
			||||
	$(REMOVE) $(TARGET).lss
 | 
				
			||||
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
 | 
				
			||||
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.s)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.d)
 | 
				
			||||
	$(REMOVE) $(SRC:.c=.i)
 | 
				
			||||
	$(REMOVEDIR) .dep
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
doxygen:
 | 
				
			||||
	@echo Generating Project Documentation...
 | 
				
			||||
	@doxygen Doxygen.conf
 | 
				
			||||
	@echo Documentation Generation Complete.
 | 
				
			||||
 | 
				
			||||
clean_doxygen:
 | 
				
			||||
	rm -rf Documentation
 | 
				
			||||
 | 
				
			||||
# Create object files directory
 | 
				
			||||
$(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Include the dependency files.
 | 
				
			||||
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Listing of phony targets.
 | 
				
			||||
.PHONY : all checkhooks checklibmode begin  \
 | 
				
			||||
finish end sizebefore sizeafter gccversion  \
 | 
				
			||||
build elf hex eep lss sym coff extcoff      \
 | 
				
			||||
clean clean_list clean_binary program debug \
 | 
				
			||||
gdb-config doxygen
 | 
				
			||||
@ -0,0 +1,29 @@
 | 
				
			||||
#
 | 
				
			||||
#             LUFA Library
 | 
				
			||||
#     Copyright (C) Dean Camera, 2009.
 | 
				
			||||
#              
 | 
				
			||||
#  dean [at] fourwalledcubicle [dot] com
 | 
				
			||||
#      www.fourwalledcubicle.com
 | 
				
			||||
#
 | 
				
			||||
 | 
				
			||||
# Makefile to build all the LUFA USB Bootloaders. Call with "make all" to
 | 
				
			||||
# rebuild all bootloaders.
 | 
				
			||||
 | 
				
			||||
# Bootloaders are pre-cleaned before each one is built, to ensure any
 | 
				
			||||
# custom LUFA library build options are reflected in the compiled
 | 
				
			||||
# code.
 | 
				
			||||
 | 
				
			||||
all:
 | 
				
			||||
	make -C 'DFU/' clean
 | 
				
			||||
	make -C 'DFU/' all
 | 
				
			||||
 | 
				
			||||
	make -C 'CDC/' clean
 | 
				
			||||
	make -C 'CDC/' all
 | 
				
			||||
 | 
				
			||||
	make -C 'TeensyHID/' clean
 | 
				
			||||
	make -C 'TeensyHID/' all
 | 
				
			||||
 | 
				
			||||
%:
 | 
				
			||||
	make -C 'DFU/' $@
 | 
				
			||||
	make -C 'CDC/' $@
 | 
				
			||||
	make -C 'TeensyHID/' $@
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue